pax_global_header00006660000000000000000000000064141665616040014523gustar00rootroot0000000000000052 comment=90c7438c94e4a14c71c5f16c9e4209b4435e5b37 cli-table3-0.6.1/000077500000000000000000000000001416656160400134465ustar00rootroot00000000000000cli-table3-0.6.1/.eslintrc.js000066400000000000000000000005621416656160400157100ustar00rootroot00000000000000module.exports = { parserOptions: { ecmaVersion: 6, }, env: { node: true, }, extends: ['eslint:recommended', 'prettier'], plugins: ['prettier'], rules: { 'prettier/prettier': 'error', 'no-control-regex': 'off', }, overrides: [ { // tests files: ['test/**/*.js'], env: { jest: true, }, }, ], }; cli-table3-0.6.1/.github/000077500000000000000000000000001416656160400150065ustar00rootroot00000000000000cli-table3-0.6.1/.github/dependabot.yml000066400000000000000000000005101416656160400176320ustar00rootroot00000000000000version: 2 updates: - package-ecosystem: npm directory: "/" schedule: interval: daily time: "07:00" open-pull-requests-limit: 10 ignore: - dependency-name: eslint-config-prettier versions: - 7.2.0 - 8.0.0 - 8.1.0 - 8.2.0 - dependency-name: cli-table versions: - 0.3.4 - 0.3.5 cli-table3-0.6.1/.gitignore000066400000000000000000000001221416656160400154310ustar00rootroot00000000000000node_modules/ .idea/ .DS_Store coverage/ JasmineAdapter-1.1.2.js jasmine-1.1.0.js cli-table3-0.6.1/.travis.yml000066400000000000000000000003121416656160400155530ustar00rootroot00000000000000language: node_js node_js: - "10" - "12" - "13" cache: yarn script: # --color and --runInBand are necessary to ensure that `colors` work correctly - yarn test --coverage --runInBand --color cli-table3-0.6.1/CHANGELOG.md000066400000000000000000000104301416656160400152550ustar00rootroot00000000000000# Changelog ## v0.6.1 (2022-01-09) * [#251](https://github.com/cli-table/cli-table3/pull/251) Pin `colors` to 1.4.0 ([@JJ](https://github.com/JJ)) ## v0.6.0 (2020-03-30) #### :boom: Breaking Change * [#156](https://github.com/cli-table/cli-table3/pull/156) Drop support for Node 6 and 8 ([@Turbo87](https://github.com/Turbo87)) #### :bug: Bug Fix * [#92](https://github.com/cli-table/cli-table3/pull/92) Emoji Length Calculation Fix ([@acupoftee](https://github.com/acupoftee)) * [#53](https://github.com/cli-table/cli-table3/pull/53) "Table" union type definition fix ([@macieklad](https://github.com/macieklad)) #### :memo: Documentation * [#135](https://github.com/cli-table/cli-table3/pull/135) docs: use https ([@DanielRuf](https://github.com/DanielRuf)) #### :house: Internal * [#132](https://github.com/cli-table/cli-table3/pull/132) Update lockfile ([@DanielRuf](https://github.com/DanielRuf)) * [#134](https://github.com/cli-table/cli-table3/pull/134) Fix ESLint errors ([@DanielRuf](https://github.com/DanielRuf)) * [#103](https://github.com/cli-table/cli-table3/pull/103) Fix Jest configuration ([@boneskull](https://github.com/boneskull)) #### Committers: 5 - Christopher Hiller ([@boneskull](https://github.com/boneskull)) - Daniel Ruf ([@DanielRuf](https://github.com/DanielRuf)) - Maciej Ładoś ([@macieklad](https://github.com/macieklad)) - Tee ([@acupoftee](https://github.com/acupoftee)) - Tobias Bieniek ([@Turbo87](https://github.com/Turbo87)) ## v0.5.1 (2018-07-19) #### :rocket: Enhancement * [#21](https://github.com/cli-table/cli-table3/pull/21) Import type definition from `@types/cli-table2` ([@Turbo87](https://github.com/Turbo87)) #### Committers: 1 - Tobias Bieniek ([Turbo87](https://github.com/Turbo87)) ## v0.5.0 (2018-06-11) #### :boom: Breaking Change * [#2](https://github.com/cli-table/cli-table3/pull/2) Update Node version requirements. ([@Turbo87](https://github.com/Turbo87)) #### :memo: Documentation * [#11](https://github.com/cli-table/cli-table3/pull/11) Update Documentation. ([@Turbo87](https://github.com/Turbo87)) #### :house: Internal * [#16](https://github.com/cli-table/cli-table3/pull/16) Replace `kind-of` dependency with `typeof` and `Array.isArray()`. ([@Turbo87](https://github.com/Turbo87)) * [#15](https://github.com/cli-table/cli-table3/pull/15) Remove Gulp. ([@Turbo87](https://github.com/Turbo87)) * [#13](https://github.com/cli-table/cli-table3/pull/13) Use ES6 class syntax and `let/const`. ([@Turbo87](https://github.com/Turbo87)) * [#12](https://github.com/cli-table/cli-table3/pull/12) Add ESLint and Prettier. ([@Turbo87](https://github.com/Turbo87)) * [#10](https://github.com/cli-table/cli-table3/pull/10) chore: use yarn cache. ([@DanielRuf](https://github.com/DanielRuf)) * [#9](https://github.com/cli-table/cli-table3/pull/9) Use Jest for testing. ([@Turbo87](https://github.com/Turbo87)) * [#3](https://github.com/cli-table/cli-table3/pull/3) Add `yarn.lock` file. ([@Turbo87](https://github.com/Turbo87)) * [#1](https://github.com/cli-table/cli-table3/pull/1) Skip broken test. ([@Turbo87](https://github.com/Turbo87)) #### Committers: 2 - Daniel Ruf ([DanielRuf](https://github.com/DanielRuf)) - Tobias Bieniek ([Turbo87](https://github.com/Turbo87)) ## v0.4.0 (2018-06-10) First official release as `cli-table3`. Changes compares to `cli-table2` v0.2.0: #### :rocket: Enhancement * [#27](https://github.com/jamestalmage/cli-table2/pull/27) Remove "lodash" dependency. ([@Turbo87](https://github.com/Turbo87)) #### :bug: Bug Fix * [#29](https://github.com/jamestalmage/cli-table2/pull/29) Fix wordWrap with colSpan. ([@mmurphy](https://github.com/mmurphy)) * [#24](https://github.com/jamestalmage/cli-table2/pull/24) Fixing the runtime error when content is truncated. ([@sthadeshwar](https://github.com/sthadeshwar)) #### :memo: Documentation * [#41](https://github.com/jamestalmage/cli-table2/pull/41) Create LICENSE. ([@GantMan](https://github.com/GantMan)) #### :house: Internal * [#26](https://github.com/jamestalmage/cli-table2/pull/26) package.json: Whitelist JS files ([@Turbo87](https://github.com/Turbo87)) #### Committers: 4 - Gant Laborde ([GantMan](https://github.com/GantMan)) - Martin Murphy ([mmurphy](https://github.com/mmurphy)) - Satyajit Thadeshwar ([sthadeshwar](https://github.com/sthadeshwar)) - Tobias Bieniek ([Turbo87](https://github.com/Turbo87)) cli-table3-0.6.1/LICENSE000066400000000000000000000021161416656160400144530ustar00rootroot00000000000000MIT License Copyright (c) 2014 James Talmage Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE 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. cli-table3-0.6.1/README.md000066400000000000000000000166121416656160400147330ustar00rootroot00000000000000cli-table3 =============================================================================== [![npm version](https://img.shields.io/npm/v/cli-table3.svg)](https://www.npmjs.com/package/cli-table3) [![Build Status](https://travis-ci.com/cli-table/cli-table3.svg?branch=master)](https://travis-ci.com/cli-table/cli-table3) This utility allows you to render unicode-aided tables on the command line from your node.js scripts. `cli-table3` is based on (and api compatible with) the original [cli-table](https://github.com/Automattic/cli-table), and [cli-table2](https://github.com/jamestalmage/cli-table2), which are both unmaintained. `cli-table3` includes all the additional features from `cli-table2`. ![Screenshot](https://i.imgur.com/sYq4T.png) ## Features not in the original cli-table - Ability to make cells span columns and/or rows. - Ability to set custom styles per cell (border characters/colors, padding, etc). - Vertical alignment (top, bottom, center). - Automatic word wrapping. - More robust truncation of cell text that contains ansi color characters. - Better handling of text color that spans multiple lines. - API compatible with the original cli-table. - Exhaustive test suite including the entire original cli-table test suite. - Lots of examples auto-generated from the tests ([basic](https://github.com/cli-table/cli-table3/blob/master/basic-usage.md), [advanced](https://github.com/cli-table/cli-table3/blob/master/advanced-usage.md)). ## Features - Customizable characters that constitute the table. - Color/background styling in the header through [colors.js](https://github.com/marak/colors.js) - Column width customization - Text truncation based on predefined widths - Text alignment (left, right, center) - Padding (left, right) - Easy-to-use API ## Installation ```bash npm install cli-table3 ``` ## How to use A portion of the unit test suite is used to generate examples: - [basic-usage](https://github.com/cli-table/cli-table3/blob/master/basic-usage.md) - covers basic uses. - [advanced](https://github.com/cli-table/cli-table3/blob/master/advanced-usage.md) - covers using the new column and row span features. This package is api compatible with the original [cli-table](https://github.com/Automattic/cli-table). So all the original documentation still applies (copied below). ### Horizontal Tables ```javascript var Table = require('cli-table3'); // instantiate var table = new Table({ head: ['TH 1 label', 'TH 2 label'] , colWidths: [100, 200] }); // table is an Array, so you can `push`, `unshift`, `splice` and friends table.push( ['First value', 'Second value'] , ['First value', 'Second value'] ); console.log(table.toString()); ``` ### Vertical Tables ```javascript var Table = require('cli-table3'); var table = new Table(); table.push( { 'Some key': 'Some value' } , { 'Another key': 'Another value' } ); console.log(table.toString()); ``` ### Cross Tables Cross tables are very similar to vertical tables, with two key differences: 1. They require a `head` setting when instantiated that has an empty string as the first header 2. The individual rows take the general form of { "Header": ["Row", "Values"] } ```javascript var Table = require('cli-table3'); var table = new Table({ head: ["", "Top Header 1", "Top Header 2"] }); table.push( { 'Left Header 1': ['Value Row 1 Col 1', 'Value Row 1 Col 2'] } , { 'Left Header 2': ['Value Row 2 Col 1', 'Value Row 2 Col 2'] } ); console.log(table.toString()); ``` ### Custom styles The ```chars``` property controls how the table is drawn: ```javascript var table = new Table({ chars: { 'top': '═' , 'top-mid': '╤' , 'top-left': '╔' , 'top-right': '╗' , 'bottom': '═' , 'bottom-mid': '╧' , 'bottom-left': '╚' , 'bottom-right': '╝' , 'left': '║' , 'left-mid': '╟' , 'mid': '─' , 'mid-mid': '┼' , 'right': '║' , 'right-mid': '╢' , 'middle': '│' } }); table.push( ['foo', 'bar', 'baz'] , ['frob', 'bar', 'quuz'] ); console.log(table.toString()); // Outputs: // //╔══════╤═════╤══════╗ //║ foo │ bar │ baz ║ //╟──────┼─────┼──────╢ //║ frob │ bar │ quuz ║ //╚══════╧═════╧══════╝ ``` Empty decoration lines will be skipped, to avoid vertical separator rows just set the 'mid', 'left-mid', 'mid-mid', 'right-mid' to the empty string: ```javascript var table = new Table({ chars: {'mid': '', 'left-mid': '', 'mid-mid': '', 'right-mid': ''} }); table.push( ['foo', 'bar', 'baz'] , ['frobnicate', 'bar', 'quuz'] ); console.log(table.toString()); // Outputs: (note the lack of the horizontal line between rows) //┌────────────┬─────┬──────┐ //│ foo │ bar │ baz │ //│ frobnicate │ bar │ quuz │ //└────────────┴─────┴──────┘ ``` By setting all chars to empty with the exception of 'middle' being set to a single space and by setting padding to zero, it's possible to get the most compact layout with no decorations: ```javascript var table = new Table({ chars: { 'top': '' , 'top-mid': '' , 'top-left': '' , 'top-right': '' , 'bottom': '' , 'bottom-mid': '' , 'bottom-left': '' , 'bottom-right': '' , 'left': '' , 'left-mid': '' , 'mid': '' , 'mid-mid': '' , 'right': '' , 'right-mid': '' , 'middle': ' ' }, style: { 'padding-left': 0, 'padding-right': 0 } }); table.push( ['foo', 'bar', 'baz'] , ['frobnicate', 'bar', 'quuz'] ); console.log(table.toString()); // Outputs: //foo bar baz //frobnicate bar quuz ``` ## Build Targets Clone the repository and run `yarn install` to install all its submodules, then run one of the following commands: ###### Run the tests with coverage reports. ```bash $ yarn test:coverage ``` ###### Run the tests every time a file changes. ```bash $ yarn test:watch ``` ###### Update the documentation. ```bash $ yarn docs ``` ## Credits - James Talmage - author <james.talmage@jrtechnical.com> ([jamestalmage](https://github.com/jamestalmage)) - Guillermo Rauch - author of the original cli-table <guillermo@learnboost.com> ([Rauchg](https://github.com/rauchg)) ## License (The MIT License) Copyright (c) 2014 James Talmage <james.talmage@jrtechnical.com> Original cli-table code/documentation: Copyright (c) 2010 LearnBoost <dev@learnboost.com> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. cli-table3-0.6.1/advanced-usage.md000066400000000000000000000170431416656160400166440ustar00rootroot00000000000000##### use colSpan to span columns - (colSpan above normal cell) ┌───────────────┐ │ greetings │ ├───────────────┤ │ greetings │ ├───────┬───────┤ │ hello │ howdy │ └───────┴───────┘ ```javascript var table = new Table({style:{head:[],border:[]}}); table.push( [{colSpan:2,content:'greetings'}], [{colSpan:2,content:'greetings'}], ['hello','howdy'] ); ``` ##### use colSpan to span columns - (colSpan below normal cell) ┌───────┬───────┐ │ hello │ howdy │ ├───────┴───────┤ │ greetings │ ├───────────────┤ │ greetings │ └───────────────┘ ```javascript var table = new Table({style:{head:[],border:[]}}); table.push( ['hello','howdy'], [{colSpan:2,content:'greetings'}], [{colSpan:2,content:'greetings'}] ); ``` ##### use rowSpan to span rows - (rowSpan on the left side) ┌───────────┬───────────┬───────┐ │ greetings │ │ hello │ │ │ greetings ├───────┤ │ │ │ howdy │ └───────────┴───────────┴───────┘ ```javascript var table = new Table({style:{head:[],border:[]}}); table.push( [{rowSpan:2,content:'greetings'},{rowSpan:2,content:'greetings',vAlign:'center'},'hello'], ['howdy'] ); ``` ##### use rowSpan to span rows - (rowSpan on the right side) ┌───────┬───────────┬───────────┐ │ hello │ greetings │ │ ├───────┤ │ │ │ howdy │ │ greetings │ └───────┴───────────┴───────────┘ ```javascript var table = new Table({style:{head:[],border:[]}}); table.push( ['hello',{rowSpan:2,content:'greetings'},{rowSpan:2,content:'greetings',vAlign:'bottom'}], ['howdy'] ); ``` ##### mix rowSpan and colSpan together for complex table layouts ┌───────┬─────┬────┐ │ hello │ sup │ hi │ ├───────┤ │ │ │ howdy │ │ │ ├───┬───┼──┬──┤ │ │ o │ k │ │ │ │ └───┴───┴──┴──┴────┘ ```javascript var table = new Table({style:{head:[],border:[]}}); table.push( [{content:'hello',colSpan:2},{rowSpan:2, colSpan:2,content:'sup'},{rowSpan:3,content:'hi'}], [{content:'howdy',colSpan:2}], ['o','k','',''] ); ``` ##### multi-line content will flow across rows in rowSpan cells ┌───────┬───────────┬───────────┐ │ hello │ greetings │ greetings │ ├───────┤ friends │ friends │ │ howdy │ │ │ └───────┴───────────┴───────────┘ ```javascript var table = new Table({style:{head:[],border:[]}}); table.push( ['hello',{rowSpan:2,content:'greetings\nfriends'},{rowSpan:2,content:'greetings\nfriends'}], ['howdy'] ); ``` ##### multi-line content will flow across rows in rowSpan cells - (complex layout) ┌───────┬─────┬────┐ │ hello │ sup │ hi │ ├───────┤ man │ yo │ │ howdy │ hey │ │ ├───┬───┼──┬──┤ │ │ o │ k │ │ │ │ └───┴───┴──┴──┴────┘ ```javascript var table = new Table({style:{head:[],border:[]}}); table.push( [{content:'hello',colSpan:2},{rowSpan:2, colSpan:2,content:'sup\nman\nhey'},{rowSpan:3,content:'hi\nyo'}], [{content:'howdy',colSpan:2}], ['o','k','',''] ); ``` ##### rowSpan cells can have a staggered layout ┌───┬───┐ │ a │ b │ │ ├───┤ │ │ c │ ├───┤ │ │ d │ │ └───┴───┘ ```javascript var table = new Table({style:{head:[],border:[]}}); table.push( [{content:'a',rowSpan:2},'b'], [{content:'c',rowSpan:2}], ['d'] ); ``` ##### the layout manager automatically create empty cells to fill in the table ┌───┬───┬──┐ │ a │ b │ │ │ ├───┤ │ │ │ │ │ │ ├───┴──┤ │ │ c │ ├───┤ │ │ │ │ └───┴──────┘ ```javascript var table = new Table({style:{head:[],border:[]}}); //notice we only create 3 cells here, but the table ends up having 6. table.push( [{content:'a',rowSpan:3,colSpan:2},'b'], [], [{content:'c',rowSpan:2,colSpan:2}], [] ); ``` ##### use table `rowHeights` option to fix row height. The truncation symbol will be shown on the last line. ┌───────┐ │ hello │ │ hi… │ └───────┘ ```javascript var table = new Table({rowHeights:[2],style:{head:[],border:[]}}); table.push(['hello\nhi\nsup']); ``` ##### if `colWidths` is not specified, the layout manager will automatically widen rows to fit the content ┌─────────────┐ │ hello there │ ├──────┬──────┤ │ hi │ hi │ └──────┴──────┘ ```javascript var table = new Table({style:{head:[],border:[]}}); table.push( [{colSpan:2,content:'hello there'}], ['hi', 'hi'] ); ``` ##### you can specify a column width for only the first row, other rows will be automatically widened to fit content ┌─────────────┐ │ hello there │ ├────┬────────┤ │ hi │ hi │ └────┴────────┘ ```javascript var table = new Table({colWidths:[4],style:{head:[],border:[]}}); table.push( [{colSpan:2,content:'hello there'}], ['hi',{hAlign:'center',content:'hi'}] ); ``` ##### a column with a null column width will be automatically widened to fit content ┌─────────────┐ │ hello there │ ├────────┬────┤ │ hi │ hi │ └────────┴────┘ ```javascript var table = new Table({colWidths:[null, 4],style:{head:[],border:[]}}); table.push( [{colSpan:2,content:'hello there'}], [{hAlign:'right',content:'hi'}, 'hi'] ); ``` ##### feel free to use colors in your content strings, column widths will be calculated correctly ![table image](./examples/screenshots/truncation-with-colors.png) ```javascript var table = new Table({colWidths:[5],style:{head:[],border:[]}}); table.push([colors.red('hello')]); ``` cli-table3-0.6.1/basic-usage.md000066400000000000000000000134361416656160400161620ustar00rootroot00000000000000##### Basic Usage ![table image](./examples/screenshots/basic-usage-with-colors.png) ```javascript // By default, headers will be red, and borders will be grey var table = new Table({head:['a','b']}); table.push(['c','d']); ``` ##### Basic Usage - disable colors - (used often in the examples and tests) ┌──────┬─────────────────────┬─────────────────────────┬─────────────────┐ │ Rel │ Change │ By │ When │ ├──────┼─────────────────────┼─────────────────────────┼─────────────────┤ │ v0.1 │ Testing something … │ rauchg@gmail.com │ 7 minutes ago │ ├──────┼─────────────────────┼─────────────────────────┼─────────────────┤ │ v0.1 │ Testing something … │ rauchg@gmail.com │ 8 minutes ago │ └──────┴─────────────────────┴─────────────────────────┴─────────────────┘ ```javascript // For most of these examples, and most of the unit tests we disable colors. // It makes unit tests easier to write/understand, and allows these pages to // display the examples as text instead of screen shots. var table = new Table({ head: ['Rel', 'Change', 'By', 'When'] , style: { head: [] //disable colors in header cells , border: [] //disable colors for the border } , colWidths: [6, 21, 25, 17] //set the widths of each column (optional) }); table.push( ['v0.1', 'Testing something cool', 'rauchg@gmail.com', '7 minutes ago'] , ['v0.1', 'Testing something cool', 'rauchg@gmail.com', '8 minutes ago'] ); ``` ##### Create vertical tables by adding objects a that specify key-value pairs ┌────┬──────────────────────┐ │v0.1│Testing something cool│ ├────┼──────────────────────┤ │v0.1│Testing something cool│ └────┴──────────────────────┘ ```javascript var table = new Table({ style: {'padding-left':0, 'padding-right':0, head:[], border:[]} }); table.push( {'v0.1': 'Testing something cool'} , {'v0.1': 'Testing something cool'} ); ``` ##### Cross tables are similar to vertical tables, but include an empty string for the first header ┌────────┬────────┬──────────────────────┐ │ │Header 1│Header 2 │ ├────────┼────────┼──────────────────────┤ │Header 3│v0.1 │Testing something cool│ ├────────┼────────┼──────────────────────┤ │Header 4│v0.1 │Testing something cool│ └────────┴────────┴──────────────────────┘ ```javascript var table = new Table({ head: ["", "Header 1", "Header 2"], style: {'padding-left':0, 'padding-right':0, head:[], border:[]} }); // clear styles to prevent color output table.push( {"Header 3": ['v0.1', 'Testing something cool'] } , {"Header 4": ['v0.1', 'Testing something cool'] } ); ``` ##### Stylize the table with custom border characters ╔══════╤═════╤══════╗ ║ foo │ bar │ baz ║ ╟──────┼─────┼──────╢ ║ frob │ bar │ quuz ║ ╚══════╧═════╧══════╝ ```javascript var table = new Table({ chars: { 'top': '═' , 'top-mid': '╤' , 'top-left': '╔' , 'top-right': '╗' , 'bottom': '═' , 'bottom-mid': '╧' , 'bottom-left': '╚' , 'bottom-right': '╝' , 'left': '║' , 'left-mid': '╟' , 'right': '║' , 'right-mid': '╢' }, style: { head: [] , border: [] } }); table.push( ['foo', 'bar', 'baz'] , ['frob', 'bar', 'quuz'] ); ``` ##### Use ansi colors (i.e. colors.js) to style text within the cells at will, even across multiple lines ![table image](./examples/screenshots/multi-line-colors.png) ```javascript var table = new Table({style:{border:[],header:[]}}); table.push([ colors.red('Hello\nhow\nare\nyou?'), colors.blue('I\nam\nfine\nthanks!') ]); ``` ##### Set `wordWrap` to true to make lines of text wrap instead of being truncated ┌───────┬─────────┐ │ Hello │ I am │ │ how │ fine │ │ are │ thanks! │ │ you? │ │ └───────┴─────────┘ ```javascript var table = new Table({ style:{border:[],header:[]}, colWidths:[7,9], wordWrap:true }); table.push([ 'Hello how are you?', 'I am fine thanks!' ]); ``` cli-table3-0.6.1/examples/000077500000000000000000000000001416656160400152645ustar00rootroot00000000000000cli-table3-0.6.1/examples/basic-usage-examples.js000066400000000000000000000200611416656160400216200ustar00rootroot00000000000000const Table = require('../src/table'); const colors = require('colors/safe'); module.exports = function (runTest) { function it(name, fn) { let result = fn(); runTest(name, result[0], result[1], result[2]); } it('Basic Usage', function () { function makeTable() { // By default, headers will be red, and borders will be grey let table = new Table({ head: ['a', 'b'] }); table.push(['c', 'd']); return table; } let expected = [ colors.gray('┌───') + colors.gray('┬───┐'), colors.gray('│') + colors.red(' a ') + colors.gray('│') + colors.red(' b ') + colors.gray('│'), colors.gray('├───') + colors.gray('┼───┤'), colors.gray('│') + ' c ' + colors.gray('│') + ' d ' + colors.gray('│'), colors.gray('└───') + colors.gray('┴───┘'), ]; return [makeTable, expected, 'basic-usage-with-colors']; }); it('Basic Usage - disable colors - (used often in the examples and tests)', function () { function makeTable() { // For most of these examples, and most of the unit tests we disable colors. // It makes unit tests easier to write/understand, and allows these pages to // display the examples as text instead of screen shots. let table = new Table({ head: ['Rel', 'Change', 'By', 'When'], style: { head: [], //disable colors in header cells border: [], //disable colors for the border }, colWidths: [6, 21, 25, 17], //set the widths of each column (optional) }); table.push( ['v0.1', 'Testing something cool', 'rauchg@gmail.com', '7 minutes ago'], ['v0.1', 'Testing something cool', 'rauchg@gmail.com', '8 minutes ago'] ); return table; } let expected = [ '┌──────┬─────────────────────┬─────────────────────────┬─────────────────┐', '│ Rel │ Change │ By │ When │', '├──────┼─────────────────────┼─────────────────────────┼─────────────────┤', '│ v0.1 │ Testing something … │ rauchg@gmail.com │ 7 minutes ago │', '├──────┼─────────────────────┼─────────────────────────┼─────────────────┤', '│ v0.1 │ Testing something … │ rauchg@gmail.com │ 8 minutes ago │', '└──────┴─────────────────────┴─────────────────────────┴─────────────────┘', ]; return [makeTable, expected]; }); it('Create vertical tables by adding objects a that specify key-value pairs', function () { function makeTable() { let table = new Table({ style: { 'padding-left': 0, 'padding-right': 0, head: [], border: [] }, }); table.push({ 'v0.1': 'Testing something cool' }, { 'v0.1': 'Testing something cool' }); return table; } let expected = [ '┌────┬──────────────────────┐', '│v0.1│Testing something cool│', '├────┼──────────────────────┤', '│v0.1│Testing something cool│', '└────┴──────────────────────┘', ]; return [makeTable, expected]; }); it('Cross tables are similar to vertical tables, but include an empty string for the first header', function () { function makeTable() { let table = new Table({ head: ['', 'Header 1', 'Header 2'], style: { 'padding-left': 0, 'padding-right': 0, head: [], border: [] }, }); // clear styles to prevent color output table.push( { 'Header 3': ['v0.1', 'Testing something cool'] }, { 'Header 4': ['v0.1', 'Testing something cool'] } ); return table; } let expected = [ '┌────────┬────────┬──────────────────────┐', '│ │Header 1│Header 2 │', '├────────┼────────┼──────────────────────┤', '│Header 3│v0.1 │Testing something cool│', '├────────┼────────┼──────────────────────┤', '│Header 4│v0.1 │Testing something cool│', '└────────┴────────┴──────────────────────┘', ]; return [makeTable, expected]; }); it('Stylize the table with custom border characters', function () { function makeTable() { let table = new Table({ chars: { top: '═', 'top-mid': '╤', 'top-left': '╔', 'top-right': '╗', bottom: '═', 'bottom-mid': '╧', 'bottom-left': '╚', 'bottom-right': '╝', left: '║', 'left-mid': '╟', right: '║', 'right-mid': '╢', }, style: { head: [], border: [], }, }); table.push(['foo', 'bar', 'baz'], ['frob', 'bar', 'quuz']); return table; } let expected = [ '╔══════╤═════╤══════╗', '║ foo │ bar │ baz ║', '╟──────┼─────┼──────╢', '║ frob │ bar │ quuz ║', '╚══════╧═════╧══════╝', ]; return [makeTable, expected]; }); it('Use ansi colors (i.e. colors.js) to style text within the cells at will, even across multiple lines', function () { function makeTable() { let table = new Table({ style: { border: [], header: [] } }); table.push([colors.red('Hello\nhow\nare\nyou?'), colors.blue('I\nam\nfine\nthanks!')]); return table; } let expected = [ '┌───────┬─────────┐', '│ ' + colors.red('Hello') + ' │ ' + colors.blue('I') + ' │', '│ ' + colors.red('how') + ' │ ' + colors.blue('am') + ' │', '│ ' + colors.red('are') + ' │ ' + colors.blue('fine') + ' │', '│ ' + colors.red('you?') + ' │ ' + colors.blue('thanks!') + ' │', '└───────┴─────────┘', ]; return [makeTable, expected, 'multi-line-colors']; }); it('Set `wordWrap` to true to make lines of text wrap instead of being truncated', function () { function makeTable() { let table = new Table({ style: { border: [], header: [] }, colWidths: [7, 9], wordWrap: true, }); table.push(['Hello how are you?', 'I am fine thanks!']); return table; } let expected = [ '┌───────┬─────────┐', '│ Hello │ I am │', '│ how │ fine │', '│ are │ thanks! │', '│ you? │ │', '└───────┴─────────┘', ]; return [makeTable, expected]; }); }; /* Expectation - ready to be copy/pasted and filled in. DO NOT DELETE THIS let expected = [ '┌──┬───┬──┬──┐' , '│ │ │ │ │' , '├──┼───┼──┼──┤' , '│ │ … │ │ │' , '├──┼───┼──┼──┤' , '│ │ … │ │ │' , '└──┴───┴──┴──┘' ]; */ cli-table3-0.6.1/examples/col-and-row-span-examples.js000066400000000000000000000244241416656160400225250ustar00rootroot00000000000000const Table = require('../src/table'); const colors = require('colors/safe'); module.exports = function (runTest) { function it(name, fn) { let result = fn(); runTest(name, result[0], result[1], result[2]); } it('use colSpan to span columns - (colSpan above normal cell)', function () { function makeTable() { let table = new Table({ style: { head: [], border: [] } }); table.push([{ colSpan: 2, content: 'greetings' }], [{ colSpan: 2, content: 'greetings' }], ['hello', 'howdy']); return table; } let expected = [ '┌───────────────┐', '│ greetings │', '├───────────────┤', '│ greetings │', '├───────┬───────┤', '│ hello │ howdy │', '└───────┴───────┘', ]; return [makeTable, expected]; }); it('use colSpan to span columns - (colSpan below normal cell)', function () { function makeTable() { let table = new Table({ style: { head: [], border: [] } }); table.push(['hello', 'howdy'], [{ colSpan: 2, content: 'greetings' }], [{ colSpan: 2, content: 'greetings' }]); return table; } let expected = [ '┌───────┬───────┐', '│ hello │ howdy │', '├───────┴───────┤', '│ greetings │', '├───────────────┤', '│ greetings │', '└───────────────┘', ]; return [makeTable, expected]; }); it('use rowSpan to span rows - (rowSpan on the left side)', function () { function makeTable() { let table = new Table({ style: { head: [], border: [] } }); table.push( [{ rowSpan: 2, content: 'greetings' }, { rowSpan: 2, content: 'greetings', vAlign: 'center' }, 'hello'], ['howdy'] ); return table; } let expected = [ '┌───────────┬───────────┬───────┐', '│ greetings │ │ hello │', '│ │ greetings ├───────┤', '│ │ │ howdy │', '└───────────┴───────────┴───────┘', ]; return [makeTable, expected]; }); it('use rowSpan to span rows - (rowSpan on the right side)', function () { function makeTable() { let table = new Table({ style: { head: [], border: [] } }); table.push( ['hello', { rowSpan: 2, content: 'greetings' }, { rowSpan: 2, content: 'greetings', vAlign: 'bottom' }], ['howdy'] ); return table; } let expected = [ '┌───────┬───────────┬───────────┐', '│ hello │ greetings │ │', '├───────┤ │ │', '│ howdy │ │ greetings │', '└───────┴───────────┴───────────┘', ]; return [makeTable, expected]; }); it('mix rowSpan and colSpan together for complex table layouts', function () { function makeTable() { let table = new Table({ style: { head: [], border: [] } }); table.push( [ { content: 'hello', colSpan: 2 }, { rowSpan: 2, colSpan: 2, content: 'sup' }, { rowSpan: 3, content: 'hi' }, ], [{ content: 'howdy', colSpan: 2 }], ['o', 'k', '', ''] ); return table; } let expected = [ '┌───────┬─────┬────┐', '│ hello │ sup │ hi │', '├───────┤ │ │', '│ howdy │ │ │', '├───┬───┼──┬──┤ │', '│ o │ k │ │ │ │', '└───┴───┴──┴──┴────┘', ]; return [makeTable, expected]; }); it('multi-line content will flow across rows in rowSpan cells', function () { function makeTable() { let table = new Table({ style: { head: [], border: [] } }); table.push( ['hello', { rowSpan: 2, content: 'greetings\nfriends' }, { rowSpan: 2, content: 'greetings\nfriends' }], ['howdy'] ); return table; } let expected = [ '┌───────┬───────────┬───────────┐', '│ hello │ greetings │ greetings │', '├───────┤ friends │ friends │', '│ howdy │ │ │', '└───────┴───────────┴───────────┘', ]; return [makeTable, expected]; }); it('multi-line content will flow across rows in rowSpan cells - (complex layout)', function () { function makeTable() { let table = new Table({ style: { head: [], border: [] } }); table.push( [ { content: 'hello', colSpan: 2 }, { rowSpan: 2, colSpan: 2, content: 'sup\nman\nhey' }, { rowSpan: 3, content: 'hi\nyo' }, ], [{ content: 'howdy', colSpan: 2 }], ['o', 'k', '', ''] ); return table; } let expected = [ '┌───────┬─────┬────┐', '│ hello │ sup │ hi │', '├───────┤ man │ yo │', '│ howdy │ hey │ │', '├───┬───┼──┬──┤ │', '│ o │ k │ │ │ │', '└───┴───┴──┴──┴────┘', ]; return [makeTable, expected]; }); it('rowSpan cells can have a staggered layout', function () { function makeTable() { let table = new Table({ style: { head: [], border: [] } }); table.push([{ content: 'a', rowSpan: 2 }, 'b'], [{ content: 'c', rowSpan: 2 }], ['d']); return table; } let expected = ['┌───┬───┐', '│ a │ b │', '│ ├───┤', '│ │ c │', '├───┤ │', '│ d │ │', '└───┴───┘']; return [makeTable, expected]; }); it('the layout manager automatically create empty cells to fill in the table', function () { function makeTable() { let table = new Table({ style: { head: [], border: [] } }); //notice we only create 3 cells here, but the table ends up having 6. table.push([{ content: 'a', rowSpan: 3, colSpan: 2 }, 'b'], [], [{ content: 'c', rowSpan: 2, colSpan: 2 }], []); return table; } let expected = [ '┌───┬───┬──┐', '│ a │ b │ │', // top-right and bottom-left cells are automatically created to fill the empty space '│ ├───┤ │', '│ │ │ │', '│ ├───┴──┤', '│ │ c │', '├───┤ │', '│ │ │', '└───┴──────┘', ]; return [makeTable, expected]; }); it('use table `rowHeights` option to fix row height. The truncation symbol will be shown on the last line.', function () { function makeTable() { let table = new Table({ rowHeights: [2], style: { head: [], border: [] }, }); table.push(['hello\nhi\nsup']); return table; } let expected = ['┌───────┐', '│ hello │', '│ hi… │', '└───────┘']; return [makeTable, expected]; }); it('if `colWidths` is not specified, the layout manager will automatically widen rows to fit the content', function () { function makeTable() { let table = new Table({ style: { head: [], border: [] } }); table.push([{ colSpan: 2, content: 'hello there' }], ['hi', 'hi']); return table; } let expected = ['┌─────────────┐', '│ hello there │', '├──────┬──────┤', '│ hi │ hi │', '└──────┴──────┘']; return [makeTable, expected]; }); it('you can specify a column width for only the first row, other rows will be automatically widened to fit content', function () { function makeTable() { let table = new Table({ colWidths: [4], style: { head: [], border: [] }, }); table.push([{ colSpan: 2, content: 'hello there' }], ['hi', { hAlign: 'center', content: 'hi' }]); return table; } let expected = ['┌─────────────┐', '│ hello there │', '├────┬────────┤', '│ hi │ hi │', '└────┴────────┘']; return [makeTable, expected]; }); it('a column with a null column width will be automatically widened to fit content', function () { function makeTable() { let table = new Table({ colWidths: [null, 4], style: { head: [], border: [] }, }); table.push([{ colSpan: 2, content: 'hello there' }], [{ hAlign: 'right', content: 'hi' }, 'hi']); return table; } let expected = ['┌─────────────┐', '│ hello there │', '├────────┬────┤', '│ hi │ hi │', '└────────┴────┘']; return [makeTable, expected]; }); it('feel free to use colors in your content strings, column widths will be calculated correctly', function () { function makeTable() { let table = new Table({ colWidths: [5], style: { head: [], border: [] }, }); table.push([colors.red('hello')]); return table; } let expected = ['┌─────┐', '│ ' + colors.red('he') + '… │', '└─────┘']; return [makeTable, expected, 'truncation-with-colors']; }); }; /* let expected = [ '┌──┬───┬──┬──┐' , '│ │ │ │ │' , '├──┼───┼──┼──┤' , '│ │ … │ │ │' , '├──┼───┼──┼──┤' , '│ │ … │ │ │' , '└──┴───┴──┴──┘' ]; */ cli-table3-0.6.1/examples/screenshots/000077500000000000000000000000001416656160400176245ustar00rootroot00000000000000cli-table3-0.6.1/examples/screenshots/basic-usage-with-colors.png000066400000000000000000000141711416656160400247710ustar00rootroot00000000000000PNG  IHDR4 EiCCPICC ProfileH WwXS 0eO[P)AH #@Pq+VEZԁۢEAŁ ߹aاO>9}sOд幸@P̟go0 Aqq1כQƫTtwH\ 9CT Cg#+ h-Q(p'º $Ra:RR@`E'"a!$IeF_( s QyyDl3'oX )d \ sT?]^Ku-QDƣ.Ɯf#_1!aHpD0.,A¯Ehp2')h[ `iaT NVLgr'PHQCB\xΔG!X0҉7I' A '@ŹR, xBOiD|g"T s@,}ĻJ#1"qh$,iP!Sq(byj~#D87^P04t"Q݈قq|E8&w! |P!׀%, 34"Ee>O!q*i*kjD5RN~H?NHCp$P&AdCգT+}P݇(8s9*2Bor"'-q8C Gzlj"qƒU~Z9(鐏SSǡ_ù C)♅hAt,4KRB%wqrvtOVc_&2P)X~ }x>G/ ?п&2 ,  !K s`!B956?#pN  z a40.fbVyaXcX:0%6[cl+VN`66^bpg㺸1n <OħYx>^ux5Ox; %P'xHx!D,Fd bQFT^D;M'$䓎h~FI'K .l!3MfDsТhhYRZ%mv:hot:nCDf*=>Do?2 Ï0 =+;:Ӕ g1eEJn1fZHmrjj:X,+ZZ:źzn>Q]@}~߳udľ~aQLF}w.g4'#Tq8W85444jkVjԼ٭e%КUuXV6WY;V;O{nsڝ: k0N6:ׂrssOq;t6Qٺ?%ԫ;#xּ(^.o9A##;ʈ#e047gHN4aaHݑ##Fndoo4hE^ccz&<@l&LLRզMA\:~ ,Liլլ<|>{, /L=-XZffe%Zkuꭵu7֝66Q666wm5llmmr6]%Up&QQޣdGtd;99:>3zXIr̙1ܝr;qqȹХ嚫k|nnbnܹݿqovi󦗮WR4`Gx7woX>3mk` xh( $.(;hO``E!>!sCBЈв0 aók{"#fG4E"#WFތ2FD7w\K4;:!zCELx|ߝ`5A6>bbWދˏe"}bĪğI&LK؝&18qy$$eRsf)))L;Ba4!#|1}rSl̜rnܩGiNL;NKOIߝQ+fDel EE]b?qI_fEfg_֪.IR- nȎޒ6'6ggNnJΗ;W\*\z;}׿,sYrWWVXrWvEqţUWխ.[zʹ5**eUm_a?nl^\o%nm9p-[ʷ|^[몭+ѷm{=y~a|ǧwx6ڽUv홼?6uܻuo_~دn>|ޟ~x{US/ooHmh;Lxxѳ? QXq'5.G».?i3?ugRO ŋK_uso\7yoޖ3x3R> 136 136 mF 1IDATxmL[ǯ`X o!b,J ƤD"k)j4>@Ĕjiِar5NQ"mhM:',%Y uL 1ؼcs{~ {sW0 .::X9 mg+r&Xs:݁0j)?/:VەC+c_}߾}?o2·e@?>dZUF)z-r-~ϊjίa,% 'LW0Tt;E1hRqD"0$0] ]?EC0ԬZ4CJ ]?EC0ԬZ4CJx,/Vtk-u)ڠ =K+H&uYN}EFH.ueIg %ǀ(A%; [C)a!-J}{~ ^A1B'}WY`nqf ^4*0p@= |B} ӧ7;cFyXk0063R L|IެRa(U7w!LRFx&B%$U`|0<0`"b~gah{l9fRa ~ޥ?\ h {E(<#3㋳'F-'Xou]O\2ѾŢ|6m2p d*PD 9ֻp@2= 㨄J rBU{c/#L i*6/-ܥQg` ry8$r][,1iأGS.K 0d+,DOkUhU#W0Ũ}+7܋AFd§}A([~uy1f:ggK|8)i(RmL@ kI<;WB:Zz^=JdM&]z5lшJ b,3hwyz%/K)0Qr#SR¦HOoKJ'. %軗tQE `"㲬UO)<3 ^fdo+4mknϙK9}kQKTvL MVi0Z%<. xo=.9hgtw֑#ǜ#ܙ"\{afwHx8Xwa+1l5_Gr%{Pg3l!M=qa\`<ˋVN-8 0\.w^l:vL3: eE0"E`H,*nu%"}t15uarsɸ"="rP'/WyF)uI)m`DHeaA0"u@ : RYcH,1R'|BtMY<˓NLUDl~S`$Nj`6m/KV^Q`9QF%nsL"JG'^IR3_*:y͎$#9󥢓 P&9󥢓@D=nCyT`H\ t* KA0NR%!qI<`rq|r\R<)h;plk +BW}ǰ]>sZs}2 a}uxjדgz `ӃM;B]gik}AaagyﵶtjVcdwЖbLEAM\,VmpƖt*G7 eYoJnU`D : RY=&C:~)cL (?yБQ2qd@`r&U L\(`LΤ ke əT`2q 09*L&A0&gR̙/$Ke|F*sKE' ̟G\0̭w9}sOд幸@P̟go0 Aqq1כQƫTtwH\ 9CT Cg#+ h-Q(p'º $Ra:RR@`E'"a!$IeF_( s QyyDl3'oX )d \ sT?]^Ku-QDƣ.Ɯf#_1!aHpD0.,A¯Ehp2')h[ `iaT NVLgr'PHQCB\xΔG!X0҉7I' A '@ŹR, xBOiD|g"T s@,}ĻJ#1"qh$,iP!Sq(byj~#D87^P04t"Q݈قq|E8&w! |P!׀%, 34"Ee>O!q*i*kjD5RN~H?NHCp$P&AdCգT+}P݇(8s9*2Bor"'-q8C Gzlj"qƒU~Z9(鐏SSǡ_ù C)♅hAt,4KRB%wqrvtOVc_&2P)X~ }x>G/ ?п&2 ,  !K s`!B956?#pN  z a40.fbVyaXcX:0%6[cl+VN`66^bpg㺸1n <OħYx>^ux5Ox; %P'xHx!D,Fd bQFT^D;M'$䓎h~FI'K .l!3MfDsТhhYRZ%mv:hot:nCDf*=>Do?2 Ï0 =+;:Ӕ g1eEJn1fZHmrjj:X,+ZZ:źzn>Q]@}~߳udľ~aQLF}w.g4'#Tq8W85444jkVjԼ٭e%КUuXV6WY;V;O{nsڝ: k0N6:ׂrssOq;t6Qٺ?%ԫ;#xּ(^.o9A##;ʈ#e047gHN4aaHݑ##Fndoo4hE^ccz&<@l&LLRզMA\:~ ,Liլլ<|>{, /L=-XZffe%Zkuꭵu7֝66Q666wm5llmmr6]%Up&QQޣdGtd;99:>3zXIr̙1ܝr;qqȹХ嚫k|nnbnܹݿqovi󦗮WR4`Gx7woX>3mk` xh( $.(;hO``E!>!sCBЈв0 aók{"#fG4E"#WFތ2FD7w\K4;:!zCELx|ߝ`5A6>bbWދˏe"}bĪğI&LK؝&18qy$$eRsf)))L;Ba4!#|1}rSl̜rnܩGiNL;NKOIߝQ+fDel EE]b?qI_fEfg_֪.IR- nȎޒ6'6ggNnJΗ;W\*\z;}׿,sYrWWVXrWvEqţUWխ.[zʹ5**eUm_a?nl^\o%nm9p-[ʷ|^[몭+ѷm{=y~a|ǧwx6ڽUv홼?6uܻuo_~دn>|ޟ~x{US/ooHmh;Lxxѳ? QXq'5.G».?i3?ugRO ŋK_uso\7yoޖ3x3R> 272 168 "$IDATx} pיn{g43i !"V0ze7qp]galau])'ލ_lw㻸qn` Z^ldHIHѼ5﹧_34.y;  D"@ D"@ D"317|/$HIih C#|UCyH ~F|-OK@#pokO8_A! S3CNz %zdtƌ.y©+Fq {9izIfBx?6n5@<ǎT+/KF%! j19ltDta8D`! ZwN@ >x! ZwN@ >x! ZwN@ >x! ZwN@ >x!0)ep/4\R_gQ`-h(#aBT _)D@< bqF D~"V\,w'4[e$ -$ xJs%JIN IY_52$B񜮙oZo1i8E˚}q+ 8w ˱lxP =-1Ch}$*L-Q{,ݏxGz``0%iW7+^5'xb$EǴ:rB$   @-@^El.m6SB hr=fL8tjt|~( 5 fZhF"9ns2e S0xb)2=f ?5Wwo⎉j G iN-jp$|j{vpfPjs!("!ހGf/+WO gK cw $A(s.znW:k6HN/XY?6>H[}T}5l*lkkULs^ V S<Ӡ'̰z#Ҍ8[,΀ݠ gޫ߀]uf:`ՠt_\9ӧ2BqRle{IȱRic WXa,v@%%#qOQPQt]:#Ԣb &-pӟ"5V|J [p&@)}mx_Wv _q5 L=cj@E"PHruY'1iˉy&Lxjl;d?Ty zK~4ܼT.*rg"c2tWV? Jv5vze*95J#a)N$^B)&w8a)#ĭubǵϼŰ' }>J^8V;3CFIe7:gaI*20g>d >aL !g89:?\#JJYѨ;p'Lknoze9h6?a6wu$6ko梙Ϛ_ ,!l&E9&9T+H^5uWVa&%+.Yɢ $ <dB&:D H@!D  MtjzVE*R$I6y7Prl`y AU~#2#0.Y ;;G},F%XCAgL?[=c;M+H1C^,MR cC~Q Tw}M-rNqYĤҤCTa)PQ3;OKnD%Go5JQ^A{Yb;ј!ھ2x憎̭mp ] R&t|d 05!=L7=5އ[mY+c]ݓP{I\?!q  PpC)h%t8h_NDBt=0h$ݳ_s a cu2 y'2ݧWCڀWwNfﲚZVFQL1P~ޛ)&WIFU Ɏ.W|TcX'CwMk+H!2D( $ v3rkoxV Ki ,4cU„" ݰf D`0h;/)XGˈ=g9blL?z8"\SiŪz1j$jQ#Y%Ld̆6K%xxykj;&Tr+k+ S|q5To{D[=tU]zcĦM+PE>Z ?PV(1wFt![<q0Zjgx,d$JeR=zR \? ߿iO%>cPD>Z~'_Ə,ɑC;TH[]_]{0Q<)ab~%ٝ4 ~lx p3|b&`;f:U׶ uץNl9yn,ɵ`V@Eȧ/!J<;/ep]?Sj%KVNK!@O,ر<7ą82BL+\X'L.]0 z{ 17}֓/L~&NX^q"r}nUK_h ڈpYa{s$k$bD`Gaѥ$LxGaѥ@FdS2/ί?ҳQFdS2'3WQFdS2jjē-+[e$L<`@"}ҟG%zԶv1P!=M,깭--fovh,$LXq3f5dwEbXjN&R&`;0cŘ(PqQ2"B@aã\)nƓ5??Kaꤳf~&Y09(rt/y]qõ)X"LAZE* -F6O:+ wh/0O})*F_:/O/~#v]t`V 'c?m?kܰڼ&h\@#L +gꌳ8d>fv'o!,ƍhtj :2KMrVTy2M3æCf }{Zj0n>;bzDFh6iR4YI+T315 ${;B/m_7Yc'$Rt$ Uu#u2oqF%"ȟ4l͉j9z'^~Yü30.fج/ߙ~m4N{~H~1 NorB>C,ME1-M,24HM\ Дڈ4'A'1S}G_a"rgpkhU\@i?7 ,whԷM䘮RKGN$Ca*pFt}v@0 ɉT_>/@Ci:KČ6av/k'5X:b ;˫Ȓbp`h<!X7%SSdI)ʶog0bl 7]& ̋""ٶJ}OH%Bb  8nנwg[K!r:u> 3 ĭ=Z\%5i@}#t"uF0Pp8F^H7P8N LR-q)/XQ k%m]L[36Cɨ]W>z#~{ IIS@ O?3Cɫ-XN8dNT &= (fl~l˰]6=3LI䎋X{$x߹fGݕ23Fݡ~ Nbr:?c}F S{_d R=v1D]{> #vױqI"%XK|׹`(©qqSV\bW` H0eьl! Ұ@ #a),V"XT6HlJhӂM~gkɦdsB'#5(#aRe  Hy#+pIwu2žK9\Y3t{|$NϿ'fzM CS(}Hs9F"5OK).  ʗub@U_y߽5A B$EF6(AD^k& TV+`LP#mQYh8nc5m\ݒ5P ~c-(5߬n3jU0JM}LM(HyC _= Z$mF[5xo5(/b^8X[ ˂ yo~筶:[H`GK(-lz H yolTDd07V뱯#WG'@:B>7cxqy 1CP g-? bX1¿}K&TvkLf!{ #0-c)pDDz _3ߥkRpWM+4uT2ag[? a$xRg2~hf1,701/ƹ5 H"bv%MSFeuQ/:uKJbɶVdD#a0SL*n+#~b骷#|M˱V9A=D 4&aj\#no1ɚݫU%@xh|}t?~F~:q]~j⺋ bl fghW.w4SAݿ!8F:t̜+ƉEJbKt>cuII^l%D ĈFL)2EǗ'~E{}w:z5 iiiC{g678ٲbKƕK[o;(+:Rl8~w`2e359t`nUFwijU3ѓgX!Fw/HJglZTXliť3@GcȷzB?b+ ޙ^,Hvg[>V]J i5ϖ'-*6ڻIV/_Ptnq^B%?齒^CN<~Mw=eɮI` wK=OʚPT[֒l.^dF L1vʅ ,/= 0ד jT5#Nڵ("1Y 7Mêp/ZAz|ިll`-8Yi%g'rSi.ٮEkEQ̫VK'V}dhĥ(1.ߺy#x\; 26DVD8&?_259I -?y쾍.oYGȜPW$:pOlEsx6 ՚֌3}6ږ&.?5'60yVgXWTSŖ TݼX kB&E>dF라8_|3KdwՐG*~5+ K;'H6r謔&Nc1<2|GVig*j°.mdE[I[k/>a~p>T69+16~;cU=ˌ^`)6~!%2aO[$uly]?p^?vyֆE5Fpx:DZ$mXMxVĒg+XfA9-"[Z|ddWS.Z~Oߴos 2b1vQp]`'N!0b΁UP9X*"D_a9k_3kۅy_҃sx).k}*X|͑+rQPvx??KQ °vo uM:ADZ!otd'iM+c}  wp*TyGW}W^[& SK89-'8شry7 L܄CI;AL"`@ P6~w k}#kDr(uMoz n˷i_%v#s9m_9!5& 6k/y'hQ@|c ~S{E}<3ߺ=*x HF#o h"cRv-F)zB@Og |j&W87#co䝨` lǧݚ}I Vj;O~!m˂A 3+Ѩ7h316*ˀVDhoF0?@`0Nˎ"ElE5kdVΦdΚeRē 2&9- !jTdkɦd@gzlr&[e$ W*pH$)fFrH$)fFrH$)fFrH$)fFrH$)fFr sޒFn3Rmœ1[)駱F΀RN9cP# +cWHb&BtJI]@NPك+HwgadӓO.A$nRb=2:Jf@Ƅ(e<)^!޻FfYD"@ D"@ D"dC|CIENDB`cli-table3-0.6.1/examples/screenshots/truncation-with-colors.png000066400000000000000000000116321416656160400247730ustar00rootroot00000000000000PNG  IHDRjH' EiCCPICC ProfileH WwXS 0eO[P)AH #@Pq+VEZԁۢEAŁ ߹aاO>9}sOд幸@P̟go0 Aqq1כQƫTtwH\ 9CT Cg#+ h-Q(p'º $Ra:RR@`E'"a!$IeF_( s QyyDl3'oX )d \ sT?]^Ku-QDƣ.Ɯf#_1!aHpD0.,A¯Ehp2')h[ `iaT NVLgr'PHQCB\xΔG!X0҉7I' A '@ŹR, xBOiD|g"T s@,}ĻJ#1"qh$,iP!Sq(byj~#D87^P04t"Q݈قq|E8&w! |P!׀%, 34"Ee>O!q*i*kjD5RN~H?NHCp$P&AdCգT+}P݇(8s9*2Bor"'-q8C Gzlj"qƒU~Z9(鐏SSǡ_ù C)♅hAt,4KRB%wqrvtOVc_&2P)X~ }x>G/ ?п&2 ,  !K s`!B956?#pN  z a40.fbVyaXcX:0%6[cl+VN`66^bpg㺸1n <OħYx>^ux5Ox; %P'xHx!D,Fd bQFT^D;M'$䓎h~FI'K .l!3MfDsТhhYRZ%mv:hot:nCDf*=>Do?2 Ï0 =+;:Ӕ g1eEJn1fZHmrjj:X,+ZZ:źzn>Q]@}~߳udľ~aQLF}w.g4'#Tq8W85444jkVjԼ٭e%КUuXV6WY;V;O{nsڝ: k0N6:ׂrssOq;t6Qٺ?%ԫ;#xּ(^.o9A##;ʈ#e047gHN4aaHݑ##Fndoo4hE^ccz&<@l&LLRզMA\:~ ,Liլլ<|>{, /L=-XZffe%Zkuꭵu7֝66Q666wm5llmmr6]%Up&QQޣdGtd;99:>3zXIr̙1ܝr;qqȹХ嚫k|nnbnܹݿqovi󦗮WR4`Gx7woX>3mk` xh( $.(;hO``E!>!sCBЈв0 aók{"#fG4E"#WFތ2FD7w\K4;:!zCELx|ߝ`5A6>bbWދˏe"}bĪğI&LK؝&18qy$$eRsf)))L;Ba4!#|1}rSl̜rnܩGiNL;NKOIߝQ+fDel EE]b?qI_fEfg_֪.IR- nȎޒ6'6ggNnJΗ;W\*\z;}׿,sYrWWVXrWvEqţUWխ.[zʹ5**eUm_a?nl^\o%nm9p-[ʷ|^[몭+ѷm{=y~a|ǧwx6ڽUv홼?6uܻuo_~دn>|ޟ~x{US/ooHmh;Lxxѳ? QXq'5.G».?i3?ugRO ŋK_uso\7yoޖ3x3R> 106 72 SIDATx}h[Uo{4{M6@GWtM'8lXQ,lAtsJv *ҁC*:Wa ,0躤nfԤGz^>^o]^{!9=*] %)Ԑ%P|Xy@Q|XiQ|Xiac?{FcUN8/\yXV&m[wn]R+ePEk/Gr 6=?! 7nmZ([Pf%?jjgBgn<(Ğ/:h6RUODa F%`D$t:<%7Jò"r'f!K#9Νwx8u=p u]׋ՕDaΉswݙnz_8?NgN'?w#O9WwDا;zzSIgs_eE3NڽķMGvc?#?y#JHeMv]~HŌwNo"`xG<?q#>]>㏆gj^GfG6Xqخ;`sZB>ٝQFhضily x+ApF&X9hY.G8x~]pu,HVU|,, p,JUM}ߘo Φoߓ>?=qU :cX`H҄K2"mQ|X)S8r5V;2(WxR; yx,Sk9.y/JW2````+>-XQߘMMA;K_g␋(|SRM 5 KT@|2PסC}%u?&ɥNԮ oj۷|4/D KPpXʔ71sf@ >o 4IENDB`cli-table3-0.6.1/index.d.ts000066400000000000000000000044621416656160400153550ustar00rootroot00000000000000declare namespace CliTable3 { type CharName = "top" | "top-mid" | "top-left" | "top-right" | "bottom" | "bottom-mid" | "bottom-left" | "bottom-right" | "left" | "left-mid" | "mid" | "mid-mid" | "right" | "right-mid" | "middle"; type HorizontalAlignment = "left" | "center" | "right"; type VerticalAlignment = "top" | "center" | "bottom"; interface TableOptions { truncate: string; colWidths: Array; rowHeights: Array; colAligns: HorizontalAlignment[]; rowAligns: VerticalAlignment[]; head: string[]; wordWrap: boolean; } interface TableInstanceOptions extends TableOptions { chars: Record; style: { "padding-left": number; "padding-right": number; head: string[]; border: string[]; compact: boolean; }; } interface TableConstructorOptions extends Partial { chars?: Partial>; style?: Partial; } type CellValue = boolean | number | string | null | undefined; interface CellOptions { content: CellValue; chars?: Partial>; truncate?: string; colSpan?: number; rowSpan?: number; hAlign?: HorizontalAlignment; vAlign?: VerticalAlignment; style?: { "padding-left"?: number; "padding-right"?: number; head?: string[]; border?: string[]; }; } interface GenericTable extends Array { options: TableInstanceOptions; readonly width: number; } type Table = GenericTable; type Cell = CellValue | CellOptions; type HorizontalTableRow = Cell[]; interface VerticalTableRow { [name: string]: Cell; } interface CrossTableRow { [name: string]: Cell[]; } } interface CliTable3 { new (options?: CliTable3.TableConstructorOptions): CliTable3.Table; readonly prototype: CliTable3.Table; } declare const CliTable3: CliTable3; export = CliTable3; cli-table3-0.6.1/index.js000066400000000000000000000000501416656160400151060ustar00rootroot00000000000000module.exports = require('./src/table');cli-table3-0.6.1/lib/000077500000000000000000000000001416656160400142145ustar00rootroot00000000000000cli-table3-0.6.1/lib/print-example.js000066400000000000000000000065031416656160400173430ustar00rootroot00000000000000/* eslint-env jest */ /* eslint-disable no-console */ const colors = require('colors/safe'); const fs = require('fs'); function logExample(fn) { runPrintingExample( fn, function logName(name) { console.log(colors.gray('========= ') + name + colors.gray(' ================')); }, console.log, //logTable console.log, //logCode console.log, //logSeparator identity //screenShot ); } function mdExample(fn, file, cb) { let buffer = []; runPrintingExample( fn, function logName(name) { buffer.push('##### ' + name); }, function logTable(table) { //md files won't render color strings properly. table = stripColors(table); // indent table so is displayed preformatted text table = ' ' + table.split('\n').join('\n '); buffer.push(table); }, function logCode(code) { buffer.push('```javascript'); buffer.push(stripColors(code)); buffer.push('```'); }, function logSeparator(sep) { buffer.push(stripColors(sep)); }, function logScreenShot(image) { buffer.push('![table image](./examples/screenshots/' + image + '.png)'); } ); fs.writeFileSync(file, buffer.join('\n')); if (cb) { cb(); } } /** * Actually runs the tests and verifies the functions create the expected output. * @param name of the test suite, used in the mocha.describe call. * @param fn a function which creates the test suite. */ function runTest(name, fn) { function testExample(name, fn, expected) { it(name, function () { expect(fn().toString()).toEqual(expected.join('\n')); }); } describe(name, function () { fn(testExample, identity); }); } /** * Common execution for runs that print output (either to console or to a Markdown file); * @param fn - a function containing the tests/demos. * @param logName - callback to print the name of this test to the console or file. * @param logTable - callback to print the output of the table to the console or file. * @param logCode - callback to print the output of the table to the console or file. * @param logSeparator - callback to print extra whitespace between demos. * @param logScreenShot - write out a link to the screenShot image. */ function runPrintingExample(fn, logName, logTable, logCode, logSeparator, logScreenShot) { /** * Called by every test/demo * @param name - the name of this test. * @param makeTable - a function which builds the table under test. Also, The contents of this function will be printed. * @param expected - The expected result. * @param screenshot - If present, there is an image containing a screenshot of the output */ function printExample(name, makeTable, expected, screenshot) { let code = makeTable.toString().split('\n').slice(1, -2).join('\n'); logName(name); if (screenshot && logScreenShot) { logScreenShot(screenshot); } else { logTable(makeTable().toString()); } logCode(code); logSeparator('\n'); } fn(printExample); } // removes all the color characters from a string function stripColors(str) { return str.split(/\u001b\[(?:\d*;){0,5}\d*m/g).join(''); } // returns the first arg - used as snapshot function function identity(str) { return str; } module.exports = { mdExample: mdExample, logExample: logExample, runTest: runTest, }; cli-table3-0.6.1/package.json000066400000000000000000000043651416656160400157440ustar00rootroot00000000000000{ "name": "cli-table3", "version": "0.6.1", "description": "Pretty unicode tables for the command line. Based on the original cli-table.", "main": "index.js", "types": "index.d.ts", "files": [ "src/", "index.d.ts", "index.js" ], "directories": { "test": "test" }, "dependencies": { "string-width": "^4.2.0" }, "devDependencies": { "ansi-256-colors": "^1.1.0", "cli-table": "^0.3.1", "eslint-config-prettier": "^6.0.0", "eslint-plugin-prettier": "^3.0.0", "jest": "^25.2.4", "jest-runner-eslint": "^0.7.0", "lerna-changelog": "^1.0.1", "prettier": "2.3.2" }, "optionalDependencies": { "colors": "1.4.0" }, "scripts": { "changelog": "lerna-changelog", "docs": "node ./scripts/update-docs.js", "prettier": "prettier --write '{examples,lib,scripts,src,test}/**/*.js'", "test": "jest --color", "test:watch": "jest --color --watchAll --notify" }, "repository": { "type": "git", "url": "https://github.com/cli-table/cli-table3.git" }, "keywords": [ "node", "command", "line", "cli", "table", "tables", "tabular", "unicode", "colors", "grid" ], "author": "James Talmage", "license": "MIT", "bugs": { "url": "https://github.com/cli-table/cli-table3/issues" }, "homepage": "https://github.com/cli-table/cli-table3", "engines": { "node": "10.* || >= 12.*" }, "changelog": { "repo": "cli-table/cli-table3", "labels": { "breaking": ":boom: Breaking Change", "enhancement": ":rocket: Enhancement", "bug": ":bug: Bug Fix", "documentation": ":memo: Documentation", "internal": ":house: Internal" } }, "jest": { "projects": [ { "displayName": "test", "testMatch": [ "/test/*.js" ] }, { "runner": "jest-runner-eslint", "displayName": "lint", "testMatch": [ "/examples/**/*.js", "/lib/**/*.js", "/scripts/**/*.js", "/src/**/*.js", "/test/**/*.js" ] } ] }, "prettier": { "printWidth": 120, "tabWidth": 2, "singleQuote": true, "trailingComma": "es5" } } cli-table3-0.6.1/scripts/000077500000000000000000000000001416656160400151355ustar00rootroot00000000000000cli-table3-0.6.1/scripts/print-examples.js000066400000000000000000000003061416656160400204420ustar00rootroot00000000000000var printExample = require('../lib/print-example'); printExample.logExample(require('../examples/basic-usage-examples')); printExample.logExample(require('../examples/col-and-row-span-examples')); cli-table3-0.6.1/scripts/update-docs.js000066400000000000000000000003531416656160400177040ustar00rootroot00000000000000var printExample = require('../lib/print-example'); printExample.mdExample(require('../examples/basic-usage-examples'), 'basic-usage.md'); printExample.mdExample(require('../examples/col-and-row-span-examples'), 'advanced-usage.md'); cli-table3-0.6.1/src/000077500000000000000000000000001416656160400142355ustar00rootroot00000000000000cli-table3-0.6.1/src/cell.js000066400000000000000000000277261416656160400155300ustar00rootroot00000000000000const utils = require('./utils'); class Cell { /** * A representation of a cell within the table. * Implementations must have `init` and `draw` methods, * as well as `colSpan`, `rowSpan`, `desiredHeight` and `desiredWidth` properties. * @param options * @constructor */ constructor(options) { this.setOptions(options); /** * Each cell will have it's `x` and `y` values set by the `layout-manager` prior to * `init` being called; * @type {Number} */ this.x = null; this.y = null; } setOptions(options) { if (['boolean', 'number', 'string'].indexOf(typeof options) !== -1) { options = { content: '' + options }; } options = options || {}; this.options = options; let content = options.content; if (['boolean', 'number', 'string'].indexOf(typeof content) !== -1) { this.content = String(content); } else if (!content) { this.content = ''; } else { throw new Error('Content needs to be a primitive, got: ' + typeof content); } this.colSpan = options.colSpan || 1; this.rowSpan = options.rowSpan || 1; } mergeTableOptions(tableOptions, cells) { this.cells = cells; let optionsChars = this.options.chars || {}; let tableChars = tableOptions.chars; let chars = (this.chars = {}); CHAR_NAMES.forEach(function (name) { setOption(optionsChars, tableChars, name, chars); }); this.truncate = this.options.truncate || tableOptions.truncate; let style = (this.options.style = this.options.style || {}); let tableStyle = tableOptions.style; setOption(style, tableStyle, 'padding-left', this); setOption(style, tableStyle, 'padding-right', this); this.head = style.head || tableStyle.head; this.border = style.border || tableStyle.border; let fixedWidth = tableOptions.colWidths[this.x]; if (tableOptions.wordWrap && fixedWidth) { fixedWidth -= this.paddingLeft + this.paddingRight; if (this.colSpan) { let i = 1; while (i < this.colSpan) { fixedWidth += tableOptions.colWidths[this.x + i]; i++; } } this.lines = utils.colorizeLines(utils.wordWrap(fixedWidth, this.content)); } else { this.lines = utils.colorizeLines(this.content.split('\n')); } this.desiredWidth = utils.strlen(this.content) + this.paddingLeft + this.paddingRight; this.desiredHeight = this.lines.length; } /** * Initializes the Cells data structure. * * @param tableOptions - A fully populated set of tableOptions. * In addition to the standard default values, tableOptions must have fully populated the * `colWidths` and `rowWidths` arrays. Those arrays must have lengths equal to the number * of columns or rows (respectively) in this table, and each array item must be a Number. * */ init(tableOptions) { let x = this.x; let y = this.y; this.widths = tableOptions.colWidths.slice(x, x + this.colSpan); this.heights = tableOptions.rowHeights.slice(y, y + this.rowSpan); this.width = this.widths.reduce(sumPlusOne, -1); this.height = this.heights.reduce(sumPlusOne, -1); this.hAlign = this.options.hAlign || tableOptions.colAligns[x]; this.vAlign = this.options.vAlign || tableOptions.rowAligns[y]; this.drawRight = x + this.colSpan == tableOptions.colWidths.length; } /** * Draws the given line of the cell. * This default implementation defers to methods `drawTop`, `drawBottom`, `drawLine` and `drawEmpty`. * @param lineNum - can be `top`, `bottom` or a numerical line number. * @param spanningCell - will be a number if being called from a RowSpanCell, and will represent how * many rows below it's being called from. Otherwise it's undefined. * @returns {String} The representation of this line. */ draw(lineNum, spanningCell) { if (lineNum == 'top') return this.drawTop(this.drawRight); if (lineNum == 'bottom') return this.drawBottom(this.drawRight); let padLen = Math.max(this.height - this.lines.length, 0); let padTop; switch (this.vAlign) { case 'center': padTop = Math.ceil(padLen / 2); break; case 'bottom': padTop = padLen; break; default: padTop = 0; } if (lineNum < padTop || lineNum >= padTop + this.lines.length) { return this.drawEmpty(this.drawRight, spanningCell); } let forceTruncation = this.lines.length > this.height && lineNum + 1 >= this.height; return this.drawLine(lineNum - padTop, this.drawRight, forceTruncation, spanningCell); } /** * Renders the top line of the cell. * @param drawRight - true if this method should render the right edge of the cell. * @returns {String} */ drawTop(drawRight) { let content = []; if (this.cells) { //TODO: cells should always exist - some tests don't fill it in though this.widths.forEach(function (width, index) { content.push(this._topLeftChar(index)); content.push(utils.repeat(this.chars[this.y == 0 ? 'top' : 'mid'], width)); }, this); } else { content.push(this._topLeftChar(0)); content.push(utils.repeat(this.chars[this.y == 0 ? 'top' : 'mid'], this.width)); } if (drawRight) { content.push(this.chars[this.y == 0 ? 'topRight' : 'rightMid']); } return this.wrapWithStyleColors('border', content.join('')); } _topLeftChar(offset) { let x = this.x + offset; let leftChar; if (this.y == 0) { leftChar = x == 0 ? 'topLeft' : offset == 0 ? 'topMid' : 'top'; } else { if (x == 0) { leftChar = 'leftMid'; } else { leftChar = offset == 0 ? 'midMid' : 'bottomMid'; if (this.cells) { //TODO: cells should always exist - some tests don't fill it in though let spanAbove = this.cells[this.y - 1][x] instanceof Cell.ColSpanCell; if (spanAbove) { leftChar = offset == 0 ? 'topMid' : 'mid'; } if (offset == 0) { let i = 1; while (this.cells[this.y][x - i] instanceof Cell.ColSpanCell) { i++; } if (this.cells[this.y][x - i] instanceof Cell.RowSpanCell) { leftChar = 'leftMid'; } } } } } return this.chars[leftChar]; } wrapWithStyleColors(styleProperty, content) { if (this[styleProperty] && this[styleProperty].length) { try { let colors = require('colors/safe'); for (let i = this[styleProperty].length - 1; i >= 0; i--) { colors = colors[this[styleProperty][i]]; } return colors(content); } catch (e) { return content; } } else { return content; } } /** * Renders a line of text. * @param lineNum - Which line of text to render. This is not necessarily the line within the cell. * There may be top-padding above the first line of text. * @param drawRight - true if this method should render the right edge of the cell. * @param forceTruncationSymbol - `true` if the rendered text should end with the truncation symbol even * if the text fits. This is used when the cell is vertically truncated. If `false` the text should * only include the truncation symbol if the text will not fit horizontally within the cell width. * @param spanningCell - a number of if being called from a RowSpanCell. (how many rows below). otherwise undefined. * @returns {String} */ drawLine(lineNum, drawRight, forceTruncationSymbol, spanningCell) { let left = this.chars[this.x == 0 ? 'left' : 'middle']; if (this.x && spanningCell && this.cells) { let cellLeft = this.cells[this.y + spanningCell][this.x - 1]; while (cellLeft instanceof ColSpanCell) { cellLeft = this.cells[cellLeft.y][cellLeft.x - 1]; } if (!(cellLeft instanceof RowSpanCell)) { left = this.chars['rightMid']; } } let leftPadding = utils.repeat(' ', this.paddingLeft); let right = drawRight ? this.chars['right'] : ''; let rightPadding = utils.repeat(' ', this.paddingRight); let line = this.lines[lineNum]; let len = this.width - (this.paddingLeft + this.paddingRight); if (forceTruncationSymbol) line += this.truncate || '…'; let content = utils.truncate(line, len, this.truncate); content = utils.pad(content, len, ' ', this.hAlign); content = leftPadding + content + rightPadding; return this.stylizeLine(left, content, right); } stylizeLine(left, content, right) { left = this.wrapWithStyleColors('border', left); right = this.wrapWithStyleColors('border', right); if (this.y === 0) { content = this.wrapWithStyleColors('head', content); } return left + content + right; } /** * Renders the bottom line of the cell. * @param drawRight - true if this method should render the right edge of the cell. * @returns {String} */ drawBottom(drawRight) { let left = this.chars[this.x == 0 ? 'bottomLeft' : 'bottomMid']; let content = utils.repeat(this.chars.bottom, this.width); let right = drawRight ? this.chars['bottomRight'] : ''; return this.wrapWithStyleColors('border', left + content + right); } /** * Renders a blank line of text within the cell. Used for top and/or bottom padding. * @param drawRight - true if this method should render the right edge of the cell. * @param spanningCell - a number of if being called from a RowSpanCell. (how many rows below). otherwise undefined. * @returns {String} */ drawEmpty(drawRight, spanningCell) { let left = this.chars[this.x == 0 ? 'left' : 'middle']; if (this.x && spanningCell && this.cells) { let cellLeft = this.cells[this.y + spanningCell][this.x - 1]; while (cellLeft instanceof ColSpanCell) { cellLeft = this.cells[cellLeft.y][cellLeft.x - 1]; } if (!(cellLeft instanceof RowSpanCell)) { left = this.chars['rightMid']; } } let right = drawRight ? this.chars['right'] : ''; let content = utils.repeat(' ', this.width); return this.stylizeLine(left, content, right); } } class ColSpanCell { /** * A Cell that doesn't do anything. It just draws empty lines. * Used as a placeholder in column spanning. * @constructor */ constructor() {} draw() { return ''; } init() {} mergeTableOptions() {} } class RowSpanCell { /** * A placeholder Cell for a Cell that spans multiple rows. * It delegates rendering to the original cell, but adds the appropriate offset. * @param originalCell * @constructor */ constructor(originalCell) { this.originalCell = originalCell; } init(tableOptions) { let y = this.y; let originalY = this.originalCell.y; this.cellOffset = y - originalY; this.offset = findDimension(tableOptions.rowHeights, originalY, this.cellOffset); } draw(lineNum) { if (lineNum == 'top') { return this.originalCell.draw(this.offset, this.cellOffset); } if (lineNum == 'bottom') { return this.originalCell.draw('bottom'); } return this.originalCell.draw(this.offset + 1 + lineNum); } mergeTableOptions() {} } // HELPER FUNCTIONS function setOption(objA, objB, nameB, targetObj) { let nameA = nameB.split('-'); if (nameA.length > 1) { nameA[1] = nameA[1].charAt(0).toUpperCase() + nameA[1].substr(1); nameA = nameA.join(''); targetObj[nameA] = objA[nameA] || objA[nameB] || objB[nameA] || objB[nameB]; } else { targetObj[nameB] = objA[nameB] || objB[nameB]; } } function findDimension(dimensionTable, startingIndex, span) { let ret = dimensionTable[startingIndex]; for (let i = 1; i < span; i++) { ret += 1 + dimensionTable[startingIndex + i]; } return ret; } function sumPlusOne(a, b) { return a + b + 1; } let CHAR_NAMES = [ 'top', 'top-mid', 'top-left', 'top-right', 'bottom', 'bottom-mid', 'bottom-left', 'bottom-right', 'left', 'left-mid', 'mid', 'mid-mid', 'right', 'right-mid', 'middle', ]; module.exports = Cell; module.exports.ColSpanCell = ColSpanCell; module.exports.RowSpanCell = RowSpanCell; cli-table3-0.6.1/src/layout-manager.js000066400000000000000000000144151416656160400175250ustar00rootroot00000000000000const Cell = require('./cell'); const { ColSpanCell, RowSpanCell } = Cell; (function () { function layoutTable(table) { table.forEach(function (row, rowIndex) { let prevCell = null; row.forEach(function (cell, columnIndex) { cell.y = rowIndex; cell.x = prevCell ? prevCell.x + 1 : columnIndex; for (let y = rowIndex; y >= 0; y--) { let row2 = table[y]; let xMax = y === rowIndex ? columnIndex : row2.length; for (let x = 0; x < xMax; x++) { let cell2 = row2[x]; while (cellsConflict(cell, cell2)) { cell.x++; } } prevCell = cell; } }); }); } function maxWidth(table) { let mw = 0; table.forEach(function (row) { row.forEach(function (cell) { mw = Math.max(mw, cell.x + (cell.colSpan || 1)); }); }); return mw; } function maxHeight(table) { return table.length; } function cellsConflict(cell1, cell2) { let yMin1 = cell1.y; let yMax1 = cell1.y - 1 + (cell1.rowSpan || 1); let yMin2 = cell2.y; let yMax2 = cell2.y - 1 + (cell2.rowSpan || 1); let yConflict = !(yMin1 > yMax2 || yMin2 > yMax1); let xMin1 = cell1.x; let xMax1 = cell1.x - 1 + (cell1.colSpan || 1); let xMin2 = cell2.x; let xMax2 = cell2.x - 1 + (cell2.colSpan || 1); let xConflict = !(xMin1 > xMax2 || xMin2 > xMax1); return yConflict && xConflict; } function conflictExists(rows, x, y) { let i_max = Math.min(rows.length - 1, y); let cell = { x: x, y: y }; for (let i = 0; i <= i_max; i++) { let row = rows[i]; for (let j = 0; j < row.length; j++) { if (cellsConflict(cell, row[j])) { return true; } } } return false; } function allBlank(rows, y, xMin, xMax) { for (let x = xMin; x < xMax; x++) { if (conflictExists(rows, x, y)) { return false; } } return true; } function addRowSpanCells(table) { table.forEach(function (row, rowIndex) { row.forEach(function (cell) { for (let i = 1; i < cell.rowSpan; i++) { let rowSpanCell = new RowSpanCell(cell); rowSpanCell.x = cell.x; rowSpanCell.y = cell.y + i; rowSpanCell.colSpan = cell.colSpan; insertCell(rowSpanCell, table[rowIndex + i]); } }); }); } function addColSpanCells(cellRows) { for (let rowIndex = cellRows.length - 1; rowIndex >= 0; rowIndex--) { let cellColumns = cellRows[rowIndex]; for (let columnIndex = 0; columnIndex < cellColumns.length; columnIndex++) { let cell = cellColumns[columnIndex]; for (let k = 1; k < cell.colSpan; k++) { let colSpanCell = new ColSpanCell(); colSpanCell.x = cell.x + k; colSpanCell.y = cell.y; cellColumns.splice(columnIndex + 1, 0, colSpanCell); } } } } function insertCell(cell, row) { let x = 0; while (x < row.length && row[x].x < cell.x) { x++; } row.splice(x, 0, cell); } function fillInTable(table) { let h_max = maxHeight(table); let w_max = maxWidth(table); for (let y = 0; y < h_max; y++) { for (let x = 0; x < w_max; x++) { if (!conflictExists(table, x, y)) { let opts = { x: x, y: y, colSpan: 1, rowSpan: 1 }; x++; while (x < w_max && !conflictExists(table, x, y)) { opts.colSpan++; x++; } let y2 = y + 1; while (y2 < h_max && allBlank(table, y2, opts.x, opts.x + opts.colSpan)) { opts.rowSpan++; y2++; } let cell = new Cell(opts); cell.x = opts.x; cell.y = opts.y; insertCell(cell, table[y]); } } } } function generateCells(rows) { return rows.map(function (row) { if (!Array.isArray(row)) { let key = Object.keys(row)[0]; row = row[key]; if (Array.isArray(row)) { row = row.slice(); row.unshift(key); } else { row = [key, row]; } } return row.map(function (cell) { return new Cell(cell); }); }); } function makeTableLayout(rows) { let cellRows = generateCells(rows); layoutTable(cellRows); fillInTable(cellRows); addRowSpanCells(cellRows); addColSpanCells(cellRows); return cellRows; } module.exports = { makeTableLayout: makeTableLayout, layoutTable: layoutTable, addRowSpanCells: addRowSpanCells, maxWidth: maxWidth, fillInTable: fillInTable, computeWidths: makeComputeWidths('colSpan', 'desiredWidth', 'x', 1), computeHeights: makeComputeWidths('rowSpan', 'desiredHeight', 'y', 1), }; })(); function makeComputeWidths(colSpan, desiredWidth, x, forcedMin) { return function (vals, table) { let result = []; let spanners = []; table.forEach(function (row) { row.forEach(function (cell) { if ((cell[colSpan] || 1) > 1) { spanners.push(cell); } else { result[cell[x]] = Math.max(result[cell[x]] || 0, cell[desiredWidth] || 0, forcedMin); } }); }); vals.forEach(function (val, index) { if (typeof val === 'number') { result[index] = val; } }); //spanners.forEach(function(cell){ for (let k = spanners.length - 1; k >= 0; k--) { let cell = spanners[k]; let span = cell[colSpan]; let col = cell[x]; let existingWidth = result[col]; let editableCols = typeof vals[col] === 'number' ? 0 : 1; for (let i = 1; i < span; i++) { existingWidth += 1 + result[col + i]; if (typeof vals[col + i] !== 'number') { editableCols++; } } if (cell[desiredWidth] > existingWidth) { let i = 0; while (editableCols > 0 && cell[desiredWidth] > existingWidth) { if (typeof vals[col + i] !== 'number') { let dif = Math.round((cell[desiredWidth] - existingWidth) / editableCols); existingWidth += dif; result[col + i] += dif; editableCols--; } i++; } } } Object.assign(vals, result); for (let j = 0; j < vals.length; j++) { vals[j] = Math.max(forcedMin, vals[j] || 0); } }; } cli-table3-0.6.1/src/table.js000066400000000000000000000034701416656160400156660ustar00rootroot00000000000000const utils = require('./utils'); const tableLayout = require('./layout-manager'); class Table extends Array { constructor(options) { super(); this.options = utils.mergeOptions(options); } toString() { let array = this; let headersPresent = this.options.head && this.options.head.length; if (headersPresent) { array = [this.options.head]; if (this.length) { array.push.apply(array, this); } } else { this.options.style.head = []; } let cells = tableLayout.makeTableLayout(array); cells.forEach(function (row) { row.forEach(function (cell) { cell.mergeTableOptions(this.options, cells); }, this); }, this); tableLayout.computeWidths(this.options.colWidths, cells); tableLayout.computeHeights(this.options.rowHeights, cells); cells.forEach(function (row) { row.forEach(function (cell) { cell.init(this.options); }, this); }, this); let result = []; for (let rowIndex = 0; rowIndex < cells.length; rowIndex++) { let row = cells[rowIndex]; let heightOfRow = this.options.rowHeights[rowIndex]; if (rowIndex === 0 || !this.options.style.compact || (rowIndex == 1 && headersPresent)) { doDraw(row, 'top', result); } for (let lineNum = 0; lineNum < heightOfRow; lineNum++) { doDraw(row, lineNum, result); } if (rowIndex + 1 == cells.length) { doDraw(row, 'bottom', result); } } return result.join('\n'); } get width() { let str = this.toString().split('\n'); return str[0].length; } } function doDraw(row, lineNum, result) { let line = []; row.forEach(function (cell) { line.push(cell.draw(lineNum)); }); let str = line.join(''); if (str.length) result.push(str); } module.exports = Table; cli-table3-0.6.1/src/utils.js000066400000000000000000000161331416656160400157370ustar00rootroot00000000000000const stringWidth = require('string-width'); function codeRegex(capture) { return capture ? /\u001b\[((?:\d*;){0,5}\d*)m/g : /\u001b\[(?:\d*;){0,5}\d*m/g; } function strlen(str) { let code = codeRegex(); let stripped = ('' + str).replace(code, ''); let split = stripped.split('\n'); return split.reduce(function (memo, s) { return stringWidth(s) > memo ? stringWidth(s) : memo; }, 0); } function repeat(str, times) { return Array(times + 1).join(str); } function pad(str, len, pad, dir) { let length = strlen(str); if (len + 1 >= length) { let padlen = len - length; switch (dir) { case 'right': { str = repeat(pad, padlen) + str; break; } case 'center': { let right = Math.ceil(padlen / 2); let left = padlen - right; str = repeat(pad, left) + str + repeat(pad, right); break; } default: { str = str + repeat(pad, padlen); break; } } } return str; } let codeCache = {}; function addToCodeCache(name, on, off) { on = '\u001b[' + on + 'm'; off = '\u001b[' + off + 'm'; codeCache[on] = { set: name, to: true }; codeCache[off] = { set: name, to: false }; codeCache[name] = { on: on, off: off }; } //https://github.com/Marak/colors.js/blob/master/lib/styles.js addToCodeCache('bold', 1, 22); addToCodeCache('italics', 3, 23); addToCodeCache('underline', 4, 24); addToCodeCache('inverse', 7, 27); addToCodeCache('strikethrough', 9, 29); function updateState(state, controlChars) { let controlCode = controlChars[1] ? parseInt(controlChars[1].split(';')[0]) : 0; if ((controlCode >= 30 && controlCode <= 39) || (controlCode >= 90 && controlCode <= 97)) { state.lastForegroundAdded = controlChars[0]; return; } if ((controlCode >= 40 && controlCode <= 49) || (controlCode >= 100 && controlCode <= 107)) { state.lastBackgroundAdded = controlChars[0]; return; } if (controlCode === 0) { for (let i in state) { /* istanbul ignore else */ if (Object.prototype.hasOwnProperty.call(state, i)) { delete state[i]; } } return; } let info = codeCache[controlChars[0]]; if (info) { state[info.set] = info.to; } } function readState(line) { let code = codeRegex(true); let controlChars = code.exec(line); let state = {}; while (controlChars !== null) { updateState(state, controlChars); controlChars = code.exec(line); } return state; } function unwindState(state, ret) { let lastBackgroundAdded = state.lastBackgroundAdded; let lastForegroundAdded = state.lastForegroundAdded; delete state.lastBackgroundAdded; delete state.lastForegroundAdded; Object.keys(state).forEach(function (key) { if (state[key]) { ret += codeCache[key].off; } }); if (lastBackgroundAdded && lastBackgroundAdded != '\u001b[49m') { ret += '\u001b[49m'; } if (lastForegroundAdded && lastForegroundAdded != '\u001b[39m') { ret += '\u001b[39m'; } return ret; } function rewindState(state, ret) { let lastBackgroundAdded = state.lastBackgroundAdded; let lastForegroundAdded = state.lastForegroundAdded; delete state.lastBackgroundAdded; delete state.lastForegroundAdded; Object.keys(state).forEach(function (key) { if (state[key]) { ret = codeCache[key].on + ret; } }); if (lastBackgroundAdded && lastBackgroundAdded != '\u001b[49m') { ret = lastBackgroundAdded + ret; } if (lastForegroundAdded && lastForegroundAdded != '\u001b[39m') { ret = lastForegroundAdded + ret; } return ret; } function truncateWidth(str, desiredLength) { if (str.length === strlen(str)) { return str.substr(0, desiredLength); } while (strlen(str) > desiredLength) { str = str.slice(0, -1); } return str; } function truncateWidthWithAnsi(str, desiredLength) { let code = codeRegex(true); let split = str.split(codeRegex()); let splitIndex = 0; let retLen = 0; let ret = ''; let myArray; let state = {}; while (retLen < desiredLength) { myArray = code.exec(str); let toAdd = split[splitIndex]; splitIndex++; if (retLen + strlen(toAdd) > desiredLength) { toAdd = truncateWidth(toAdd, desiredLength - retLen); } ret += toAdd; retLen += strlen(toAdd); if (retLen < desiredLength) { if (!myArray) { break; } // full-width chars may cause a whitespace which cannot be filled ret += myArray[0]; updateState(state, myArray); } } return unwindState(state, ret); } function truncate(str, desiredLength, truncateChar) { truncateChar = truncateChar || '…'; let lengthOfStr = strlen(str); if (lengthOfStr <= desiredLength) { return str; } desiredLength -= strlen(truncateChar); let ret = truncateWidthWithAnsi(str, desiredLength); return ret + truncateChar; } function defaultOptions() { return { chars: { top: '─', 'top-mid': '┬', 'top-left': '┌', 'top-right': '┐', bottom: '─', 'bottom-mid': '┴', 'bottom-left': '└', 'bottom-right': '┘', left: '│', 'left-mid': '├', mid: '─', 'mid-mid': '┼', right: '│', 'right-mid': '┤', middle: '│', }, truncate: '…', colWidths: [], rowHeights: [], colAligns: [], rowAligns: [], style: { 'padding-left': 1, 'padding-right': 1, head: ['red'], border: ['grey'], compact: false, }, head: [], }; } function mergeOptions(options, defaults) { options = options || {}; defaults = defaults || defaultOptions(); let ret = Object.assign({}, defaults, options); ret.chars = Object.assign({}, defaults.chars, options.chars); ret.style = Object.assign({}, defaults.style, options.style); return ret; } function wordWrap(maxLength, input) { let lines = []; let split = input.split(/(\s+)/g); let line = []; let lineLength = 0; let whitespace; for (let i = 0; i < split.length; i += 2) { let word = split[i]; let newLength = lineLength + strlen(word); if (lineLength > 0 && whitespace) { newLength += whitespace.length; } if (newLength > maxLength) { if (lineLength !== 0) { lines.push(line.join('')); } line = [word]; lineLength = strlen(word); } else { line.push(whitespace || '', word); lineLength = newLength; } whitespace = split[i + 1]; } if (lineLength) { lines.push(line.join('')); } return lines; } function multiLineWordWrap(maxLength, input) { let output = []; input = input.split('\n'); for (let i = 0; i < input.length; i++) { output.push.apply(output, wordWrap(maxLength, input[i])); } return output; } function colorizeLines(input) { let state = {}; let output = []; for (let i = 0; i < input.length; i++) { let line = rewindState(state, input[i]); state = readState(line); let temp = Object.assign({}, state); output.push(unwindState(temp, line)); } return output; } module.exports = { strlen: strlen, repeat: repeat, pad: pad, truncate: truncate, mergeOptions: mergeOptions, wordWrap: multiLineWordWrap, colorizeLines: colorizeLines, }; cli-table3-0.6.1/test/000077500000000000000000000000001416656160400144255ustar00rootroot00000000000000cli-table3-0.6.1/test/cell-test.js000066400000000000000000001002461416656160400166620ustar00rootroot00000000000000describe('Cell', function () { const colors = require('colors'); const Cell = require('../src/cell'); const { ColSpanCell, RowSpanCell } = Cell; const { mergeOptions } = require('../src/utils'); function defaultOptions() { //overwrite coloring of head and border by default for easier testing. return mergeOptions({ style: { head: [], border: [] } }); } function defaultChars() { return { top: '─', topMid: '┬', topLeft: '┌', topRight: '┐', bottom: '─', bottomMid: '┴', bottomLeft: '└', bottomRight: '┘', left: '│', leftMid: '├', mid: '─', midMid: '┼', right: '│', rightMid: '┤', middle: '│', }; } describe('constructor', function () { it('colSpan and rowSpan default to 1', function () { let cell = new Cell(); expect(cell.colSpan).toEqual(1); expect(cell.rowSpan).toEqual(1); }); it('colSpan and rowSpan can be set via constructor', function () { let cell = new Cell({ rowSpan: 2, colSpan: 3 }); expect(cell.rowSpan).toEqual(2); expect(cell.colSpan).toEqual(3); }); it('content can be set as a string', function () { let cell = new Cell('hello\nworld'); expect(cell.content).toEqual('hello\nworld'); }); it('content can be set as a options property', function () { let cell = new Cell({ content: 'hello\nworld' }); expect(cell.content).toEqual('hello\nworld'); }); it('default content is an empty string', function () { let cell = new Cell(); expect(cell.content).toEqual(''); }); it('new Cell(null) will have empty string content', function () { let cell = new Cell(null); expect(cell.content).toEqual(''); }); it('new Cell({content: null}) will have empty string content', function () { let cell = new Cell({ content: null }); expect(cell.content).toEqual(''); }); it('new Cell(0) will have "0" as content', function () { let cell = new Cell(0); expect(cell.content).toEqual('0'); }); it('new Cell({content: 0}) will have "0" as content', function () { let cell = new Cell({ content: 0 }); expect(cell.content).toEqual('0'); }); it('new Cell(false) will have "false" as content', function () { let cell = new Cell(false); expect(cell.content).toEqual('false'); }); it('new Cell({content: false}) will have "false" as content', function () { let cell = new Cell({ content: false }); expect(cell.content).toEqual('false'); }); }); describe('mergeTableOptions', function () { describe('chars', function () { it('unset chars take on value of table', function () { let cell = new Cell(); let tableOptions = defaultOptions(); cell.mergeTableOptions(tableOptions); expect(cell.chars).toEqual(defaultChars()); }); it('set chars override the value of table', function () { let cell = new Cell({ chars: { bottomRight: '=' } }); cell.mergeTableOptions(defaultOptions()); let chars = defaultChars(); chars.bottomRight = '='; expect(cell.chars).toEqual(chars); }); it('hyphenated names will be converted to camel-case', function () { let cell = new Cell({ chars: { 'bottom-left': '=' } }); cell.mergeTableOptions(defaultOptions()); let chars = defaultChars(); chars.bottomLeft = '='; expect(cell.chars).toEqual(chars); }); }); describe('truncate', function () { it('if unset takes on value of table', function () { let cell = new Cell(); cell.mergeTableOptions(defaultOptions()); expect(cell.truncate).toEqual('…'); }); it('if set overrides value of table', function () { let cell = new Cell({ truncate: '...' }); cell.mergeTableOptions(defaultOptions()); expect(cell.truncate).toEqual('...'); }); }); describe('style.padding-left', function () { it('if unset will be copied from tableOptions.style', function () { let cell = new Cell(); cell.mergeTableOptions(defaultOptions()); expect(cell.paddingLeft).toEqual(1); cell = new Cell(); let tableOptions = defaultOptions(); tableOptions.style['padding-left'] = 2; cell.mergeTableOptions(tableOptions); expect(cell.paddingLeft).toEqual(2); cell = new Cell(); tableOptions = defaultOptions(); tableOptions.style.paddingLeft = 3; cell.mergeTableOptions(tableOptions); expect(cell.paddingLeft).toEqual(3); }); it('if set will override tableOptions.style', function () { let cell = new Cell({ style: { 'padding-left': 2 } }); cell.mergeTableOptions(defaultOptions()); expect(cell.paddingLeft).toEqual(2); cell = new Cell({ style: { paddingLeft: 3 } }); cell.mergeTableOptions(defaultOptions()); expect(cell.paddingLeft).toEqual(3); }); }); describe('style.padding-right', function () { it('if unset will be copied from tableOptions.style', function () { let cell = new Cell(); cell.mergeTableOptions(defaultOptions()); expect(cell.paddingRight).toEqual(1); cell = new Cell(); let tableOptions = defaultOptions(); tableOptions.style['padding-right'] = 2; cell.mergeTableOptions(tableOptions); expect(cell.paddingRight).toEqual(2); cell = new Cell(); tableOptions = defaultOptions(); tableOptions.style.paddingRight = 3; cell.mergeTableOptions(tableOptions); expect(cell.paddingRight).toEqual(3); }); it('if set will override tableOptions.style', function () { let cell = new Cell({ style: { 'padding-right': 2 } }); cell.mergeTableOptions(defaultOptions()); expect(cell.paddingRight).toEqual(2); cell = new Cell({ style: { paddingRight: 3 } }); cell.mergeTableOptions(defaultOptions()); expect(cell.paddingRight).toEqual(3); }); }); describe('desiredWidth', function () { it('content(hello) padding(1,1) == 7', function () { let cell = new Cell('hello'); cell.mergeTableOptions(defaultOptions()); expect(cell.desiredWidth).toEqual(7); }); it('content(hi) padding(1,2) == 5', function () { let cell = new Cell({ content: 'hi', style: { paddingRight: 2 } }); let tableOptions = defaultOptions(); cell.mergeTableOptions(tableOptions); expect(cell.desiredWidth).toEqual(5); }); it('content(hi) padding(3,2) == 7', function () { let cell = new Cell({ content: 'hi', style: { paddingLeft: 3, paddingRight: 2 } }); let tableOptions = defaultOptions(); cell.mergeTableOptions(tableOptions); expect(cell.desiredWidth).toEqual(7); }); }); describe('desiredHeight', function () { it('1 lines of text', function () { let cell = new Cell('hi'); cell.mergeTableOptions(defaultOptions()); expect(cell.desiredHeight).toEqual(1); }); it('2 lines of text', function () { let cell = new Cell('hi\nbye'); cell.mergeTableOptions(defaultOptions()); expect(cell.desiredHeight).toEqual(2); }); it('2 lines of text', function () { let cell = new Cell('hi\nbye\nyo'); cell.mergeTableOptions(defaultOptions()); expect(cell.desiredHeight).toEqual(3); }); }); }); describe('init', function () { describe('hAlign', function () { it('if unset takes colAlign value from tableOptions', function () { let tableOptions = defaultOptions(); tableOptions.colAligns = ['left', 'right', 'both']; let cell = new Cell(); cell.x = 0; cell.mergeTableOptions(tableOptions); cell.init(tableOptions); expect(cell.hAlign).toEqual('left'); cell = new Cell(); cell.x = 1; cell.mergeTableOptions(tableOptions); cell.init(tableOptions); expect(cell.hAlign).toEqual('right'); cell = new Cell(); cell.mergeTableOptions(tableOptions); cell.x = 2; cell.init(tableOptions); expect(cell.hAlign).toEqual('both'); }); it('if set overrides tableOptions', function () { let tableOptions = defaultOptions(); tableOptions.colAligns = ['left', 'right', 'both']; let cell = new Cell({ hAlign: 'right' }); cell.x = 0; cell.mergeTableOptions(tableOptions); cell.init(tableOptions); expect(cell.hAlign).toEqual('right'); cell = new Cell({ hAlign: 'left' }); cell.x = 1; cell.mergeTableOptions(tableOptions); cell.init(tableOptions); expect(cell.hAlign).toEqual('left'); cell = new Cell({ hAlign: 'right' }); cell.x = 2; cell.mergeTableOptions(tableOptions); cell.init(tableOptions); expect(cell.hAlign).toEqual('right'); }); }); describe('vAlign', function () { it('if unset takes rowAlign value from tableOptions', function () { let tableOptions = defaultOptions(); tableOptions.rowAligns = ['top', 'bottom', 'center']; let cell = new Cell(); cell.y = 0; cell.mergeTableOptions(tableOptions); cell.init(tableOptions); expect(cell.vAlign).toEqual('top'); cell = new Cell(); cell.y = 1; cell.mergeTableOptions(tableOptions); cell.init(tableOptions); expect(cell.vAlign).toEqual('bottom'); cell = new Cell(); cell.y = 2; cell.mergeTableOptions(tableOptions); cell.init(tableOptions); expect(cell.vAlign).toEqual('center'); }); it('if set overrides tableOptions', function () { let tableOptions = defaultOptions(); tableOptions.rowAligns = ['top', 'bottom', 'center']; let cell = new Cell({ vAlign: 'bottom' }); cell.y = 0; cell.mergeTableOptions(tableOptions); cell.init(tableOptions); expect(cell.vAlign).toEqual('bottom'); cell = new Cell({ vAlign: 'top' }); cell.y = 1; cell.mergeTableOptions(tableOptions); cell.init(tableOptions); expect(cell.vAlign).toEqual('top'); cell = new Cell({ vAlign: 'center' }); cell.y = 2; cell.mergeTableOptions(tableOptions); cell.init(tableOptions); expect(cell.vAlign).toEqual('center'); }); }); describe('width', function () { it('will match colWidth of x', function () { let tableOptions = defaultOptions(); tableOptions.colWidths = [5, 10, 15]; let cell = new Cell(); cell.x = 0; cell.mergeTableOptions(tableOptions); cell.init(tableOptions); expect(cell.width).toEqual(5); cell = new Cell(); cell.x = 1; cell.mergeTableOptions(tableOptions); cell.init(tableOptions); expect(cell.width).toEqual(10); cell = new Cell(); cell.x = 2; cell.mergeTableOptions(tableOptions); cell.init(tableOptions); expect(cell.width).toEqual(15); }); it('will add colWidths if colSpan > 1 with wordWrap false', function () { let tableOptions = defaultOptions(); tableOptions.colWidths = [5, 10, 15]; let cell = new Cell({ colSpan: 2 }); cell.x = 0; cell.mergeTableOptions(tableOptions); cell.init(tableOptions); expect(cell.width).toEqual(16); cell = new Cell({ colSpan: 2 }); cell.x = 1; cell.mergeTableOptions(tableOptions); cell.init(tableOptions); expect(cell.width).toEqual(26); cell = new Cell({ colSpan: 3 }); cell.x = 0; cell.mergeTableOptions(tableOptions); cell.init(tableOptions); expect(cell.width).toEqual(32); }); it('will add colWidths if colSpan > 1 with wordWrap true', function () { let tableOptions = defaultOptions(); tableOptions.colWidths = [5, 10, 15]; tableOptions.wordWrap = true; let cell = new Cell({ colSpan: 2 }); cell.x = 0; cell.mergeTableOptions(tableOptions); cell.init(tableOptions); expect(cell.width).toEqual(16); cell = new Cell({ colSpan: 2 }); cell.x = 1; cell.mergeTableOptions(tableOptions); cell.init(tableOptions); expect(cell.width).toEqual(26); cell = new Cell({ colSpan: 3 }); cell.x = 0; cell.mergeTableOptions(tableOptions); cell.init(tableOptions); expect(cell.width).toEqual(32); }); it('will use multiple columns for wordWrap text when using colSpan and wordWrap together', function () { let tableOptions = defaultOptions(); tableOptions.colWidths = [7, 7, 17]; tableOptions.wordWrap = true; let cell = new Cell({ content: 'the quick brown fox', colSpan: 2 }); cell.x = 0; cell.mergeTableOptions(tableOptions); cell.init(tableOptions); expect(cell.lines.length).toEqual(2); expect(cell.lines[0]).toContain('quick'); expect(cell.lines[1]).toContain('fox'); cell = new Cell({ content: 'the quick brown fox', colSpan: 2 }); cell.x = 1; cell.mergeTableOptions(tableOptions); cell.init(tableOptions); expect(cell.lines.length).toEqual(1); expect(cell.lines[0]).toContain('fox'); cell = new Cell({ content: 'the quick brown fox', colSpan: 3 }); cell.x = 0; cell.mergeTableOptions(tableOptions); cell.init(tableOptions); expect(cell.lines.length).toEqual(1); expect(cell.lines[0]).toContain('fox'); }); it('will only use one column for wordWrap text when not using colSpan', function () { let tableOptions = defaultOptions(); tableOptions.colWidths = [7, 7, 7]; tableOptions.wordWrap = true; let cell = new Cell({ content: 'the quick brown fox' }); cell.x = 0; cell.mergeTableOptions(tableOptions); cell.init(tableOptions); expect(cell.lines.length).toEqual(4); expect(cell.lines[1]).toContain('quick'); expect(cell.lines[3]).toContain('fox'); }); }); describe('height', function () { it('will match rowHeight of x', function () { let tableOptions = defaultOptions(); tableOptions.rowHeights = [5, 10, 15]; let cell = new Cell(); cell.y = 0; cell.mergeTableOptions(tableOptions); cell.init(tableOptions); expect(cell.height).toEqual(5); cell = new Cell(); cell.y = 1; cell.mergeTableOptions(tableOptions); cell.init(tableOptions); expect(cell.height).toEqual(10); cell = new Cell(); cell.y = 2; cell.mergeTableOptions(tableOptions); cell.init(tableOptions); expect(cell.height).toEqual(15); }); it('will add rowHeights if rowSpan > 1', function () { let tableOptions = defaultOptions(); tableOptions.rowHeights = [5, 10, 15]; let cell = new Cell({ rowSpan: 2 }); cell.y = 0; cell.mergeTableOptions(tableOptions); cell.init(tableOptions); expect(cell.height).toEqual(16); cell = new Cell({ rowSpan: 2 }); cell.y = 1; cell.mergeTableOptions(tableOptions); cell.init(tableOptions); expect(cell.height).toEqual(26); cell = new Cell({ rowSpan: 3 }); cell.y = 0; cell.mergeTableOptions(tableOptions); cell.init(tableOptions); expect(cell.height).toEqual(32); }); }); describe('drawRight', function () { let tableOptions; beforeEach(function () { tableOptions = defaultOptions(); tableOptions.colWidths = [20, 20, 20]; }); it('col 1 of 3, with default colspan', function () { let cell = new Cell(); cell.x = 0; cell.mergeTableOptions(tableOptions); cell.init(tableOptions); expect(cell.drawRight).toEqual(false); }); it('col 2 of 3, with default colspan', function () { let cell = new Cell(); cell.x = 1; cell.mergeTableOptions(tableOptions); cell.init(tableOptions); expect(cell.drawRight).toEqual(false); }); it('col 3 of 3, with default colspan', function () { let cell = new Cell(); cell.x = 2; cell.mergeTableOptions(tableOptions); cell.init(tableOptions); expect(cell.drawRight).toEqual(true); }); it('col 3 of 4, with default colspan', function () { let cell = new Cell(); cell.x = 2; tableOptions.colWidths = [20, 20, 20, 20]; cell.mergeTableOptions(tableOptions); cell.init(tableOptions); expect(cell.drawRight).toEqual(false); }); it('col 2 of 3, with colspan of 2', function () { let cell = new Cell({ colSpan: 2 }); cell.x = 1; cell.mergeTableOptions(tableOptions); cell.init(tableOptions); expect(cell.drawRight).toEqual(true); }); it('col 1 of 3, with colspan of 3', function () { let cell = new Cell({ colSpan: 3 }); cell.x = 0; cell.mergeTableOptions(tableOptions); cell.init(tableOptions); expect(cell.drawRight).toEqual(true); }); it('col 1 of 3, with colspan of 2', function () { let cell = new Cell({ colSpan: 2 }); cell.x = 0; cell.mergeTableOptions(tableOptions); cell.init(tableOptions); expect(cell.drawRight).toEqual(false); }); }); }); describe('drawLine', function () { let cell; beforeEach(function () { cell = new Cell(); //manually init cell.chars = defaultChars(); cell.paddingLeft = cell.paddingRight = 1; cell.width = 7; cell.height = 3; cell.hAlign = 'center'; cell.vAlign = 'center'; cell.chars.left = 'L'; cell.chars.right = 'R'; cell.chars.middle = 'M'; cell.content = 'hello\nhowdy\ngoodnight'; cell.lines = cell.content.split('\n'); cell.x = cell.y = 0; }); describe('top line', function () { it('will draw the top left corner when x=0,y=0', function () { cell.x = cell.y = 0; expect(cell.draw('top')).toEqual('┌───────'); cell.drawRight = true; expect(cell.draw('top')).toEqual('┌───────┐'); }); it('will draw the top mid corner when x=1,y=0', function () { cell.x = 1; cell.y = 0; expect(cell.draw('top')).toEqual('┬───────'); cell.drawRight = true; expect(cell.draw('top')).toEqual('┬───────┐'); }); it('will draw the left mid corner when x=0,y=1', function () { cell.x = 0; cell.y = 1; expect(cell.draw('top')).toEqual('├───────'); cell.drawRight = true; expect(cell.draw('top')).toEqual('├───────┤'); }); it('will draw the mid mid corner when x=1,y=1', function () { cell.x = 1; cell.y = 1; expect(cell.draw('top')).toEqual('┼───────'); cell.drawRight = true; expect(cell.draw('top')).toEqual('┼───────┤'); }); it('will draw in the color specified by border style', function () { cell.border = ['gray']; expect(cell.draw('top')).toEqual(colors.gray('┌───────')); }); }); describe('bottom line', function () { it('will draw the bottom left corner if x=0', function () { cell.x = 0; cell.y = 1; expect(cell.draw('bottom')).toEqual('└───────'); cell.drawRight = true; expect(cell.draw('bottom')).toEqual('└───────┘'); }); it('will draw the bottom left corner if x=1', function () { cell.x = 1; cell.y = 1; expect(cell.draw('bottom')).toEqual('┴───────'); cell.drawRight = true; expect(cell.draw('bottom')).toEqual('┴───────┘'); }); it('will draw in the color specified by border style', function () { cell.border = ['gray']; expect(cell.draw('bottom')).toEqual(colors.gray('└───────')); }); }); describe('drawBottom', function () { it('draws an empty line', function () { expect(cell.drawEmpty()).toEqual('L '); expect(cell.drawEmpty(true)).toEqual('L R'); }); it('draws an empty line', function () { cell.border = ['gray']; cell.head = ['red']; expect(cell.drawEmpty()).toEqual(colors.gray('L') + colors.red(' ')); expect(cell.drawEmpty(true)).toEqual(colors.gray('L') + colors.red(' ') + colors.gray('R')); }); }); describe('first line of text', function () { beforeEach(function () { cell.width = 9; }); it('will draw left side if x=0', function () { cell.x = 0; expect(cell.draw(0)).toEqual('L hello '); cell.drawRight = true; expect(cell.draw(0)).toEqual('L hello R'); }); it('will draw mid side if x=1', function () { cell.x = 1; expect(cell.draw(0)).toEqual('M hello '); cell.drawRight = true; expect(cell.draw(0)).toEqual('M hello R'); }); it('will align left', function () { cell.x = 1; cell.hAlign = 'left'; expect(cell.draw(0)).toEqual('M hello '); cell.drawRight = true; expect(cell.draw(0)).toEqual('M hello R'); }); it('will align right', function () { cell.x = 1; cell.hAlign = 'right'; expect(cell.draw(0)).toEqual('M hello '); cell.drawRight = true; expect(cell.draw(0)).toEqual('M hello R'); }); it('left and right will be drawn in color of border style', function () { cell.border = ['gray']; cell.x = 0; expect(cell.draw(0)).toEqual(colors.gray('L') + ' hello '); cell.drawRight = true; expect(cell.draw(0)).toEqual(colors.gray('L') + ' hello ' + colors.gray('R')); }); it('text will be drawn in color of head style if y == 0', function () { cell.head = ['red']; cell.x = cell.y = 0; expect(cell.draw(0)).toEqual('L' + colors.red(' hello ')); cell.drawRight = true; expect(cell.draw(0)).toEqual('L' + colors.red(' hello ') + 'R'); }); it('text will NOT be drawn in color of head style if y == 1', function () { cell.head = ['red']; cell.x = cell.y = 1; expect(cell.draw(0)).toEqual('M hello '); cell.drawRight = true; expect(cell.draw(0)).toEqual('M hello R'); }); it('head and border colors together', function () { cell.border = ['gray']; cell.head = ['red']; cell.x = cell.y = 0; expect(cell.draw(0)).toEqual(colors.gray('L') + colors.red(' hello ')); cell.drawRight = true; expect(cell.draw(0)).toEqual(colors.gray('L') + colors.red(' hello ') + colors.gray('R')); }); }); describe('second line of text', function () { beforeEach(function () { cell.width = 9; }); it('will draw left side if x=0', function () { cell.x = 0; expect(cell.draw(1)).toEqual('L howdy '); cell.drawRight = true; expect(cell.draw(1)).toEqual('L howdy R'); }); it('will draw mid side if x=1', function () { cell.x = 1; expect(cell.draw(1)).toEqual('M howdy '); cell.drawRight = true; expect(cell.draw(1)).toEqual('M howdy R'); }); it('will align left', function () { cell.x = 1; cell.hAlign = 'left'; expect(cell.draw(1)).toEqual('M howdy '); cell.drawRight = true; expect(cell.draw(1)).toEqual('M howdy R'); }); it('will align right', function () { cell.x = 1; cell.hAlign = 'right'; expect(cell.draw(1)).toEqual('M howdy '); cell.drawRight = true; expect(cell.draw(1)).toEqual('M howdy R'); }); }); describe('truncated line of text', function () { beforeEach(function () { cell.width = 9; }); it('will draw left side if x=0', function () { cell.x = 0; expect(cell.draw(2)).toEqual('L goodni… '); cell.drawRight = true; expect(cell.draw(2)).toEqual('L goodni… R'); }); it('will draw mid side if x=1', function () { cell.x = 1; expect(cell.draw(2)).toEqual('M goodni… '); cell.drawRight = true; expect(cell.draw(2)).toEqual('M goodni… R'); }); it('will not change when aligned left', function () { cell.x = 1; cell.hAlign = 'left'; expect(cell.draw(2)).toEqual('M goodni… '); cell.drawRight = true; expect(cell.draw(2)).toEqual('M goodni… R'); }); it('will not change when aligned right', function () { cell.x = 1; cell.hAlign = 'right'; expect(cell.draw(2)).toEqual('M goodni… '); cell.drawRight = true; expect(cell.draw(2)).toEqual('M goodni… R'); }); }); describe('vAlign', function () { beforeEach(function () { cell.height = '5'; }); it('center', function () { cell.vAlign = 'center'; expect(cell.draw(0)).toEqual('L '); expect(cell.draw(1)).toEqual('L hello '); expect(cell.draw(2)).toEqual('L howdy '); expect(cell.draw(3)).toEqual('L good… '); expect(cell.draw(4)).toEqual('L '); cell.drawRight = true; expect(cell.draw(0)).toEqual('L R'); expect(cell.draw(1)).toEqual('L hello R'); expect(cell.draw(2)).toEqual('L howdy R'); expect(cell.draw(3)).toEqual('L good… R'); expect(cell.draw(4)).toEqual('L R'); cell.x = 1; cell.drawRight = false; expect(cell.draw(0)).toEqual('M '); expect(cell.draw(1)).toEqual('M hello '); expect(cell.draw(2)).toEqual('M howdy '); expect(cell.draw(3)).toEqual('M good… '); expect(cell.draw(4)).toEqual('M '); }); it('top', function () { cell.vAlign = 'top'; expect(cell.draw(0)).toEqual('L hello '); expect(cell.draw(1)).toEqual('L howdy '); expect(cell.draw(2)).toEqual('L good… '); expect(cell.draw(3)).toEqual('L '); expect(cell.draw(4)).toEqual('L '); cell.vAlign = null; //top is the default cell.drawRight = true; expect(cell.draw(0)).toEqual('L hello R'); expect(cell.draw(1)).toEqual('L howdy R'); expect(cell.draw(2)).toEqual('L good… R'); expect(cell.draw(3)).toEqual('L R'); expect(cell.draw(4)).toEqual('L R'); cell.x = 1; cell.drawRight = false; expect(cell.draw(0)).toEqual('M hello '); expect(cell.draw(1)).toEqual('M howdy '); expect(cell.draw(2)).toEqual('M good… '); expect(cell.draw(3)).toEqual('M '); expect(cell.draw(4)).toEqual('M '); }); it('center', function () { cell.vAlign = 'bottom'; expect(cell.draw(0)).toEqual('L '); expect(cell.draw(1)).toEqual('L '); expect(cell.draw(2)).toEqual('L hello '); expect(cell.draw(3)).toEqual('L howdy '); expect(cell.draw(4)).toEqual('L good… '); cell.drawRight = true; expect(cell.draw(0)).toEqual('L R'); expect(cell.draw(1)).toEqual('L R'); expect(cell.draw(2)).toEqual('L hello R'); expect(cell.draw(3)).toEqual('L howdy R'); expect(cell.draw(4)).toEqual('L good… R'); cell.x = 1; cell.drawRight = false; expect(cell.draw(0)).toEqual('M '); expect(cell.draw(1)).toEqual('M '); expect(cell.draw(2)).toEqual('M hello '); expect(cell.draw(3)).toEqual('M howdy '); expect(cell.draw(4)).toEqual('M good… '); }); }); it('vertically truncated will show truncation on last visible line', function () { cell.height = 2; expect(cell.draw(0)).toEqual('L hello '); expect(cell.draw(1)).toEqual('L howd… '); }); it("won't vertically truncate if the lines just fit", function () { cell.height = 2; cell.content = 'hello\nhowdy'; cell.lines = cell.content.split('\n'); expect(cell.draw(0)).toEqual('L hello '); expect(cell.draw(1)).toEqual('L howdy '); }); it('will vertically truncate even if last line is short', function () { cell.height = 2; cell.content = 'hello\nhi\nhowdy'; cell.lines = cell.content.split('\n'); expect(cell.draw(0)).toEqual('L hello '); expect(cell.draw(1)).toEqual('L hi… '); }); it('allows custom truncation', function () { cell.height = 2; cell.truncate = '...'; cell.content = 'hello\nhi\nhowdy'; cell.lines = cell.content.split('\n'); expect(cell.draw(0)).toEqual('L hello '); expect(cell.draw(1)).toEqual('L hi... '); cell.content = 'hello\nhowdy\nhi'; cell.lines = cell.content.split('\n'); expect(cell.draw(0)).toEqual('L hello '); expect(cell.draw(1)).toEqual('L ho... '); }); }); describe('ColSpanCell', function () { it('has an init function', function () { expect(new ColSpanCell()).toHaveProperty('init'); new ColSpanCell().init(); // nothing happens. }); it('draw returns an empty string', function () { expect(new ColSpanCell().draw('top')).toEqual(''); expect(new ColSpanCell().draw('bottom')).toEqual(''); expect(new ColSpanCell().draw(1)).toEqual(''); }); }); describe('RowSpanCell', function () { let original, tableOptions; beforeEach(function () { original = { rowSpan: 3, y: 0, draw: jest.fn(), }; tableOptions = { rowHeights: [2, 3, 4, 5], }; }); it('drawing top of the next row', function () { let spanner = new RowSpanCell(original); spanner.x = 0; spanner.y = 1; spanner.init(tableOptions); spanner.draw('top'); expect(original.draw).toHaveBeenCalledTimes(1); expect(original.draw).toHaveBeenCalledWith(2, 1); }); it('drawing line 0 of the next row', function () { let spanner = new RowSpanCell(original); spanner.x = 0; spanner.y = 1; spanner.init(tableOptions); spanner.draw(0); expect(original.draw).toHaveBeenCalledTimes(1); expect(original.draw).toHaveBeenCalledWith(3); }); it('drawing line 1 of the next row', function () { let spanner = new RowSpanCell(original); spanner.x = 0; spanner.y = 1; spanner.init(tableOptions); spanner.draw(1); expect(original.draw).toHaveBeenCalledTimes(1); expect(original.draw).toHaveBeenCalledWith(4); }); it('drawing top of two rows below', function () { let spanner = new RowSpanCell(original); spanner.x = 0; spanner.y = 2; spanner.init(tableOptions); spanner.draw('top'); expect(original.draw).toHaveBeenCalledTimes(1); expect(original.draw).toHaveBeenCalledWith(6, 2); }); it('drawing line 0 of two rows below', function () { let spanner = new RowSpanCell(original); spanner.x = 0; spanner.y = 2; spanner.init(tableOptions); spanner.draw(0); expect(original.draw).toHaveBeenCalledTimes(1); expect(original.draw).toHaveBeenCalledWith(7); }); it('drawing line 1 of two rows below', function () { let spanner = new RowSpanCell(original); spanner.x = 0; spanner.y = 2; spanner.init(tableOptions); spanner.draw(1); expect(original.draw).toHaveBeenCalledTimes(1); expect(original.draw).toHaveBeenCalledWith(8); }); it('drawing bottom', function () { let spanner = new RowSpanCell(original); spanner.x = 0; spanner.y = 1; spanner.init(tableOptions); spanner.draw('bottom'); expect(original.draw).toHaveBeenCalledTimes(1); expect(original.draw).toHaveBeenCalledWith('bottom'); }); }); }); cli-table3-0.6.1/test/example-tests.js000066400000000000000000000004341416656160400175570ustar00rootroot00000000000000const printExamples = require('../lib/print-example'); const examples = require('../examples/col-and-row-span-examples'); const usage = require('../examples/basic-usage-examples'); printExamples.runTest('@api Usage', usage); printExamples.runTest('@api Table (examples)', examples); cli-table3-0.6.1/test/layout-manager-test.js000066400000000000000000000140721416656160400206710ustar00rootroot00000000000000describe('layout-manager', function () { const layoutManager = require('../src/layout-manager'); const { layoutTable, addRowSpanCells, maxWidth } = layoutManager; const Cell = require('../src/cell'); const { RowSpanCell } = Cell; describe('layoutTable', function () { it('sets x and y', function () { let table = [ [{}, {}], [{}, {}], ]; layoutTable(table); expect(table).toEqual([ [ { x: 0, y: 0 }, { x: 1, y: 0 }, ], [ { x: 0, y: 1 }, { x: 1, y: 1 }, ], ]); let w = maxWidth(table); expect(w).toEqual(2); }); it('colSpan will push x values to the right', function () { let table = [ [{ colSpan: 2 }, {}], [{}, { colSpan: 2 }], ]; layoutTable(table); expect(table).toEqual([ [ { x: 0, y: 0, colSpan: 2 }, { x: 2, y: 0 }, ], [ { x: 0, y: 1 }, { x: 1, y: 1, colSpan: 2 }, ], ]); expect(maxWidth(table)).toEqual(3); }); it('rowSpan will push x values on cells below', function () { let table = [[{ rowSpan: 2 }, {}], [{}]]; layoutTable(table); expect(table).toEqual([ [ { x: 0, y: 0, rowSpan: 2 }, { x: 1, y: 0 }, ], [{ x: 1, y: 1 }], ]); expect(maxWidth(table)).toEqual(2); }); it('colSpan and rowSpan together', function () { let table = [[{ rowSpan: 2, colSpan: 2 }, {}], [{}]]; layoutTable(table); expect(table).toEqual([ [ { x: 0, y: 0, rowSpan: 2, colSpan: 2 }, { x: 2, y: 0 }, ], [{ x: 2, y: 1 }], ]); expect(maxWidth(table)).toEqual(3); }); it('complex layout', function () { let table = [ [{ c: 'a' }, { c: 'b' }, { c: 'c', rowSpan: 3, colSpan: 2 }, { c: 'd' }], [{ c: 'e', rowSpan: 2, colSpan: 2 }, { c: 'f' }], [{ c: 'g' }], ]; layoutTable(table); expect(table).toEqual([ [ { c: 'a', y: 0, x: 0 }, { c: 'b', y: 0, x: 1 }, { c: 'c', y: 0, x: 2, rowSpan: 3, colSpan: 2 }, { c: 'd', y: 0, x: 4 }, ], [ { c: 'e', rowSpan: 2, colSpan: 2, y: 1, x: 0 }, { c: 'f', y: 1, x: 4 }, ], [{ c: 'g', y: 2, x: 4 }], ]); }); it('complex layout 2', function () { let table = [ [ { c: 'a', rowSpan: 3 }, { c: 'b', rowSpan: 2 }, { c: 'cd', colSpan: 2 }, { c: 'e', rowSpan: 2 }, ], [{ c: 'c' }, { c: 'd' }], [{ c: 'b' }, { c: 'c' }, { c: 'd' }, { c: 'e' }], [{ c: 'a' }, { c: 'b' }, { c: 'c' }, { c: 'd' }, { c: 'e' }], ]; layoutTable(table); expect(table).toEqual([ [ { c: 'a', y: 0, x: 0, rowSpan: 3 }, { c: 'b', y: 0, x: 1, rowSpan: 2 }, { c: 'cd', y: 0, x: 2, colSpan: 2 }, { c: 'e', y: 0, x: 4, rowSpan: 2 }, ], [ { c: 'c', y: 1, x: 2 }, { c: 'd', y: 1, x: 3 }, ], [ { c: 'b', y: 2, x: 1 }, { c: 'c', y: 2, x: 2 }, { c: 'd', y: 2, x: 3 }, { c: 'e', y: 2, x: 4 }, ], [ { c: 'a', y: 3, x: 0 }, { c: 'b', y: 3, x: 1 }, { c: 'c', y: 3, x: 2 }, { c: 'd', y: 3, x: 3 }, { c: 'e', y: 3, x: 4 }, ], ]); }); it('maxWidth of single element', function () { let table = [[{}]]; layoutTable(table); expect(maxWidth(table)).toEqual(1); }); }); describe('addRowSpanCells', function () { it('will insert a rowSpan cell - beginning of line', function () { let table = [ [ { x: 0, y: 0, rowSpan: 2 }, { x: 1, y: 0 }, ], [{ x: 1, y: 1 }], ]; addRowSpanCells(table); expect(table[0]).toEqual([ { x: 0, y: 0, rowSpan: 2 }, { x: 1, y: 0 }, ]); expect(table[1].length).toEqual(2); expect(table[1][0]).toBeInstanceOf(RowSpanCell); expect(table[1][1]).toEqual({ x: 1, y: 1 }); }); it('will insert a rowSpan cell - end of line', function () { let table = [ [ { x: 0, y: 0 }, { x: 1, y: 0, rowSpan: 2 }, ], [{ x: 0, y: 1 }], ]; addRowSpanCells(table); expect(table[0]).toEqual([ { x: 0, y: 0 }, { rowSpan: 2, x: 1, y: 0 }, ]); expect(table[1].length).toEqual(2); expect(table[1][0]).toEqual({ x: 0, y: 1 }); expect(table[1][1]).toBeInstanceOf(RowSpanCell); }); it('will insert a rowSpan cell - middle of line', function () { let table = [ [ { x: 0, y: 0 }, { x: 1, y: 0, rowSpan: 2 }, { x: 2, y: 0 }, ], [ { x: 0, y: 1 }, { x: 2, y: 1 }, ], ]; addRowSpanCells(table); expect(table[0]).toEqual([ { x: 0, y: 0 }, { rowSpan: 2, x: 1, y: 0 }, { x: 2, y: 0 }, ]); expect(table[1].length).toEqual(3); expect(table[1][0]).toEqual({ x: 0, y: 1 }); expect(table[1][1]).toBeInstanceOf(RowSpanCell); expect(table[1][2]).toEqual({ x: 2, y: 1 }); }); it('will insert a rowSpan cell - multiple on the same line', function () { let table = [ [ { x: 0, y: 0 }, { x: 1, y: 0, rowSpan: 2 }, { x: 2, y: 0, rowSpan: 2 }, { x: 3, y: 0 }, ], [ { x: 0, y: 1 }, { x: 3, y: 1 }, ], ]; addRowSpanCells(table); expect(table[0]).toEqual([ { x: 0, y: 0 }, { rowSpan: 2, x: 1, y: 0 }, { rowSpan: 2, x: 2, y: 0 }, { x: 3, y: 0 }, ]); expect(table[1].length).toEqual(4); expect(table[1][0]).toEqual({ x: 0, y: 1 }); expect(table[1][1]).toBeInstanceOf(RowSpanCell); expect(table[1][2]).toBeInstanceOf(RowSpanCell); expect(table[1][3]).toEqual({ x: 3, y: 1 }); }); }); }); cli-table3-0.6.1/test/original-cli-table-index-tests.js000066400000000000000000000230561416656160400226740ustar00rootroot00000000000000describe('@api original-cli-table index tests', function () { const Table = require('../src/table'); it('test complete table', function () { let table = new Table({ head: ['Rel', 'Change', 'By', 'When'], style: { 'padding-left': 1, 'padding-right': 1, head: [], border: [], }, colWidths: [6, 21, 25, 17], }); table.push( ['v0.1', 'Testing something cool', 'rauchg@gmail.com', '7 minutes ago'], ['v0.1', 'Testing something cool', 'rauchg@gmail.com', '8 minutes ago'] ); let expected = [ '┌──────┬─────────────────────┬─────────────────────────┬─────────────────┐', '│ Rel │ Change │ By │ When │', '├──────┼─────────────────────┼─────────────────────────┼─────────────────┤', '│ v0.1 │ Testing something … │ rauchg@gmail.com │ 7 minutes ago │', '├──────┼─────────────────────┼─────────────────────────┼─────────────────┤', '│ v0.1 │ Testing something … │ rauchg@gmail.com │ 8 minutes ago │', '└──────┴─────────────────────┴─────────────────────────┴─────────────────┘', ]; expect(table.toString()).toEqual(expected.join('\n')); //expect(table.render()).should.eql(expected.join("\n")); }); it('test width property', function () { let table = new Table({ head: ['Cool'], style: { head: [], border: [], }, }); expect(table.width).toEqual(8); }); it('test vertical table output', function () { let table = new Table({ style: { 'padding-left': 0, 'padding-right': 0, head: [], border: [] } }); // clear styles to prevent color output table.push({ 'v0.1': 'Testing something cool' }, { 'v0.1': 'Testing something cool' }); let expected = [ '┌────┬──────────────────────┐', '│v0.1│Testing something cool│', '├────┼──────────────────────┤', '│v0.1│Testing something cool│', '└────┴──────────────────────┘', ]; expect(table.toString()).toEqual(expected.join('\n')); }); it('test cross table output', function () { let table = new Table({ head: ['', 'Header 1', 'Header 2'], style: { 'padding-left': 0, 'padding-right': 0, head: [], border: [] }, }); // clear styles to prevent color output table.push({ 'Header 3': ['v0.1', 'Testing something cool'] }, { 'Header 4': ['v0.1', 'Testing something cool'] }); let expected = [ '┌────────┬────────┬──────────────────────┐', '│ │Header 1│Header 2 │', '├────────┼────────┼──────────────────────┤', '│Header 3│v0.1 │Testing something cool│', '├────────┼────────┼──────────────────────┤', '│Header 4│v0.1 │Testing something cool│', '└────────┴────────┴──────────────────────┘', ]; expect(table.toString()).toEqual(expected.join('\n')); }); it('test table colors', function () { let table = new Table({ head: ['Rel', 'By'], style: { head: ['red'], border: ['grey'] }, }); /*let off = '' , red = '' , orange = '' , grey = ''*/ let off = '\u001b[39m', red = '\u001b[31m', orange = '\u001b[38;5;221m', grey = '\u001b[90m', c256s = orange + 'v0.1' + off; table.push([c256s, 'rauchg@gmail.com']); // The expectation from the original cli-table is commented out below. // The output from cli-table2 will still look the same, but the border color is // toggled off and back on at the border of each cell. /*let expected = [ grey + '┌──────┬──────────────────┐' + off , grey + '│' + off + red + ' Rel ' + off + grey + '│' + off + red + ' By ' + off + grey + '│' + off , grey + '├──────┼──────────────────┤' + off , grey + '│' + off + ' ' + c256s + ' ' + grey + '│' + off + ' rauchg@gmail.com ' + grey + '│' + off , grey + '└──────┴──────────────────┘' + off ];*/ let expected = [ grey + '┌──────' + off + grey + '┬──────────────────┐' + off, grey + '│' + off + red + ' Rel ' + off + grey + '│' + off + red + ' By ' + off + grey + '│' + off, grey + '├──────' + off + grey + '┼──────────────────┤' + off, grey + '│' + off + ' ' + c256s + ' ' + grey + '│' + off + ' rauchg@gmail.com ' + grey + '│' + off, grey + '└──────' + off + grey + '┴──────────────────┘' + off, ]; expect(table.toString()).toEqual(expected.join('\n')); }); it('test custom chars', function () { let table = new Table({ chars: { top: '═', 'top-mid': '╤', 'top-left': '╔', 'top-right': '╗', bottom: '═', 'bottom-mid': '╧', 'bottom-left': '╚', 'bottom-right': '╝', left: '║', 'left-mid': '╟', right: '║', 'right-mid': '╢', }, style: { head: [], border: [], }, }); table.push(['foo', 'bar', 'baz'], ['frob', 'bar', 'quuz']); let expected = [ '╔══════╤═════╤══════╗', '║ foo │ bar │ baz ║', '╟──────┼─────┼──────╢', '║ frob │ bar │ quuz ║', '╚══════╧═════╧══════╝', ]; expect(table.toString()).toEqual(expected.join('\n')); }); it('test compact shortand', function () { let table = new Table({ style: { head: [], border: [], compact: true, }, }); table.push(['foo', 'bar', 'baz'], ['frob', 'bar', 'quuz']); let expected = ['┌──────┬─────┬──────┐', '│ foo │ bar │ baz │', '│ frob │ bar │ quuz │', '└──────┴─────┴──────┘']; expect(table.toString()).toEqual(expected.join('\n')); }); it('test compact empty mid line', function () { let table = new Table({ chars: { mid: '', 'left-mid': '', 'mid-mid': '', 'right-mid': '', }, style: { head: [], border: [], }, }); table.push(['foo', 'bar', 'baz'], ['frob', 'bar', 'quuz']); let expected = ['┌──────┬─────┬──────┐', '│ foo │ bar │ baz │', '│ frob │ bar │ quuz │', '└──────┴─────┴──────┘']; expect(table.toString()).toEqual(expected.join('\n')); }); it('test decoration lines disabled', function () { let table = new Table({ chars: { top: '', 'top-mid': '', 'top-left': '', 'top-right': '', bottom: '', 'bottom-mid': '', 'bottom-left': '', 'bottom-right': '', left: '', 'left-mid': '', mid: '', 'mid-mid': '', right: '', 'right-mid': '', middle: ' ', // a single space }, style: { head: [], border: [], 'padding-left': 0, 'padding-right': 0, }, }); table.push(['foo', 'bar', 'baz'], ['frobnicate', 'bar', 'quuz']); let expected = ['foo bar baz ', 'frobnicate bar quuz']; expect(table.toString()).toEqual(expected.join('\n')); }); it('test with null/undefined as values or column names', function () { let table = new Table({ style: { head: [], border: [], }, }); table.push([null, undefined, 0]); // This is the expectation from the original cli-table. // The empty columns have widths based on the strings `null` and `undefined` // That does not make sense to me, so I am deviating from the original behavior here. /*let expected = [ '┌──────┬───────────┬───┐' , '│ │ │ 0 │' , '└──────┴───────────┴───┘' ]; */ let expected = ['┌──┬──┬───┐', '│ │ │ 0 │', '└──┴──┴───┘']; expect(table.toString()).toEqual(expected.join('\n')); }); }); cli-table3-0.6.1/test/original-cli-table-newlines-test.js000066400000000000000000000046211416656160400232230ustar00rootroot00000000000000describe('@api original-cli-table newline tests', function () { const Table = require('../src/table'); it('test table with newlines in headers', function () { let table = new Table({ head: ['Test', '1\n2\n3'], style: { 'padding-left': 1, 'padding-right': 1, head: [], border: [], }, }); let expected = ['┌──────┬───┐', '│ Test │ 1 │', '│ │ 2 │', '│ │ 3 │', '└──────┴───┘']; expect(table.toString()).toEqual(expected.join('\n')); }); it('test column width is accurately reflected when newlines are present', function () { let table = new Table({ head: ['Test\nWidth'], style: { head: [], border: [] } }); expect(table.width).toEqual(9); }); it('test newlines in body cells', function () { let table = new Table({ style: { head: [], border: [] } }); table.push(['something\nwith\nnewlines']); let expected = ['┌───────────┐', '│ something │', '│ with │', '│ newlines │', '└───────────┘']; expect(table.toString()).toEqual(expected.join('\n')); }); it('test newlines in vertical cell header and body', function () { let table = new Table({ style: { 'padding-left': 0, 'padding-right': 0, head: [], border: [] } }); table.push({ 'v\n0.1': 'Testing\nsomething cool' }); let expected = ['┌───┬──────────────┐', '│v │Testing │', '│0.1│something cool│', '└───┴──────────────┘']; expect(table.toString()).toEqual(expected.join('\n')); }); it('test newlines in cross table header and body', function () { let table = new Table({ head: ['', 'Header\n1'], style: { 'padding-left': 0, 'padding-right': 0, head: [], border: [] }, }); table.push({ 'Header\n2': ['Testing\nsomething\ncool'] }); let expected = [ '┌──────┬─────────┐', '│ │Header │', '│ │1 │', '├──────┼─────────┤', '│Header│Testing │', '│2 │something│', '│ │cool │', '└──────┴─────────┘', ]; expect(table.toString()).toEqual(expected.join('\n')); }); }); cli-table3-0.6.1/test/table-layout-test.js000066400000000000000000000303141416656160400203430ustar00rootroot00000000000000describe('tableLayout', function () { const Cell = require('../src/cell'); const layoutManager = require('../src/layout-manager'); const { makeTableLayout, addRowSpanCells, fillInTable, computeWidths, computeHeights } = layoutManager; it('simple 2x2 layout', function () { let actual = makeTableLayout([ ['hello', 'goodbye'], ['hola', 'adios'], ]); let expected = [ ['hello', 'goodbye'], ['hola', 'adios'], ]; checkLayout(actual, expected); }); it('cross table', function () { let actual = makeTableLayout([{ '1.0': ['yes', 'no'] }, { '2.0': ['hello', 'goodbye'] }]); let expected = [ ['1.0', 'yes', 'no'], ['2.0', 'hello', 'goodbye'], ]; checkLayout(actual, expected); }); it('vertical table', function () { let actual = makeTableLayout([{ '1.0': 'yes' }, { '2.0': 'hello' }]); let expected = [ ['1.0', 'yes'], ['2.0', 'hello'], ]; checkLayout(actual, expected); }); it('colSpan adds RowSpanCells to the right', function () { let actual = makeTableLayout([[{ content: 'hello', colSpan: 2 }], ['hola', 'adios']]); let expected = [ [{ content: 'hello', colSpan: 2 }, null], ['hola', 'adios'], ]; checkLayout(actual, expected); }); it('rowSpan adds RowSpanCell below', function () { let actual = makeTableLayout([[{ content: 'hello', rowSpan: 2 }, 'goodbye'], ['adios']]); let expected = [ ['hello', 'goodbye'], [{ spannerFor: [0, 0] }, 'adios'], ]; checkLayout(actual, expected); }); it('rowSpan and cellSpan together', function () { let actual = makeTableLayout([[{ content: 'hello', rowSpan: 2, colSpan: 2 }, 'goodbye'], ['adios']]); let expected = [ ['hello', null, 'goodbye'], [{ spannerFor: [0, 0] }, null, 'adios'], ]; checkLayout(actual, expected); }); it('complex layout', function () { let actual = makeTableLayout([ [{ content: 'hello', rowSpan: 2, colSpan: 2 }, { content: 'yo', rowSpan: 2, colSpan: 2 }, 'goodbye'], ['adios'], ]); let expected = [ ['hello', null, 'yo', null, 'goodbye'], [{ spannerFor: [0, 0] }, null, { spannerFor: [0, 2] }, null, 'adios'], ]; checkLayout(actual, expected); }); it('complex layout2', function () { let actual = makeTableLayout([ ['a', 'b', { content: 'c', rowSpan: 3, colSpan: 2 }, 'd'], [{ content: 'e', rowSpan: 2, colSpan: 2 }, 'f'], ['g'], ]); let expected = [ ['a', 'b', 'c', null, 'd'], ['e', null, { spannerFor: [0, 2] }, null, 'f'], [{ spannerFor: [1, 0] }, null, { spannerFor: [0, 2] }, null, 'g'], ]; checkLayout(actual, expected); }); it('stairstep spans', function () { let actual = makeTableLayout([[{ content: '', rowSpan: 2 }, ''], [{ content: '', rowSpan: 2 }], ['']]); let expected = [ [{ content: '', rowSpan: 2 }, ''], [{ spannerFor: [0, 0] }, { content: '', rowSpan: 2 }], ['', { spannerFor: [1, 1] }], ]; checkLayout(actual, expected); }); describe('fillInTable', function () { function mc(opts, y, x) { let cell = new Cell(opts); cell.x = x; cell.y = y; return cell; } it('will blank out individual cells', function () { let cells = [[mc('a', 0, 1)], [mc('b', 1, 0)]]; fillInTable(cells); checkLayout(cells, [ ['', 'a'], ['b', ''], ]); }); it('will autospan to the right', function () { let cells = [[], [mc('a', 1, 1)]]; fillInTable(cells); checkLayout(cells, [ [{ content: '', colSpan: 2 }, null], ['', 'a'], ]); }); it('will autospan down', function () { let cells = [[mc('a', 0, 1)], []]; fillInTable(cells); addRowSpanCells(cells); checkLayout(cells, [ [{ content: '', rowSpan: 2 }, 'a'], [{ spannerFor: [0, 0] }, ''], ]); }); it('will autospan right and down', function () { let cells = [[mc('a', 0, 2)], [], [mc('b', 2, 1)]]; fillInTable(cells); addRowSpanCells(cells); checkLayout(cells, [ [{ content: '', colSpan: 2, rowSpan: 2 }, null, 'a'], [{ spannerFor: [0, 0] }, null, { content: '', colSpan: 1, rowSpan: 2 }], ['', 'b', { spannerFor: [1, 2] }], ]); }); }); describe('computeWidths', function () { function mc(y, x, desiredWidth, colSpan) { return { x: x, y: y, desiredWidth: desiredWidth, colSpan: colSpan }; } it('finds the maximum desired width of each column', function () { let widths = []; let cells = [ [mc(0, 0, 7), mc(0, 1, 3), mc(0, 2, 5)], [mc(1, 0, 8), mc(1, 1, 5), mc(1, 2, 2)], [mc(2, 0, 6), mc(2, 1, 9), mc(2, 2, 1)], ]; computeWidths(widths, cells); expect(widths).toEqual([8, 9, 5]); }); it("won't touch hard coded values", function () { let widths = [null, 3]; let cells = [ [mc(0, 0, 7), mc(0, 1, 3), mc(0, 2, 5)], [mc(1, 0, 8), mc(1, 1, 5), mc(1, 2, 2)], [mc(2, 0, 6), mc(2, 1, 9), mc(2, 2, 1)], ]; computeWidths(widths, cells); expect(widths).toEqual([8, 3, 5]); }); it('assumes undefined desiredWidth is 1', function () { let widths = []; let cells = [[{ x: 0, y: 0 }], [{ x: 0, y: 1 }], [{ x: 0, y: 2 }]]; computeWidths(widths, cells); expect(widths).toEqual([1]); }); it('takes into account colSpan and wont over expand', function () { let widths = []; let cells = [ [mc(0, 0, 10, 2), mc(0, 2, 5)], [mc(1, 0, 5), mc(1, 1, 5), mc(1, 2, 2)], [mc(2, 0, 4), mc(2, 1, 2), mc(2, 2, 1)], ]; computeWidths(widths, cells); expect(widths).toEqual([5, 5, 5]); }); it('will expand rows involved in colSpan in a balanced way', function () { let widths = []; let cells = [ [mc(0, 0, 13, 2), mc(0, 2, 5)], [mc(1, 0, 5), mc(1, 1, 5), mc(1, 2, 2)], [mc(2, 0, 4), mc(2, 1, 2), mc(2, 2, 1)], ]; computeWidths(widths, cells); expect(widths).toEqual([6, 6, 5]); }); it('expands across 3 cols', function () { let widths = []; let cells = [[mc(0, 0, 25, 3)], [mc(1, 0, 5), mc(1, 1, 5), mc(1, 2, 2)], [mc(2, 0, 4), mc(2, 1, 2), mc(2, 2, 1)]]; computeWidths(widths, cells); expect(widths).toEqual([9, 9, 5]); }); it('multiple spans in same table', function () { let widths = []; let cells = [[mc(0, 0, 25, 3)], [mc(1, 0, 30, 3)], [mc(2, 0, 4), mc(2, 1, 2), mc(2, 2, 1)]]; computeWidths(widths, cells); expect(widths).toEqual([11, 9, 8]); }); it('spans will only edit uneditable tables', function () { let widths = [null, 3]; let cells = [[mc(0, 0, 20, 3)], [mc(1, 0, 4), mc(1, 1, 20), mc(1, 2, 5)]]; computeWidths(widths, cells); expect(widths).toEqual([7, 3, 8]); }); it('spans will only edit uneditable tables - first column uneditable', function () { let widths = [3]; let cells = [[mc(0, 0, 20, 3)], [mc(1, 0, 4), mc(1, 1, 3), mc(1, 2, 5)]]; computeWidths(widths, cells); expect(widths).toEqual([3, 7, 8]); }); }); describe('computeHeights', function () { function mc(y, x, desiredHeight, colSpan) { return { x: x, y: y, desiredHeight: desiredHeight, rowSpan: colSpan }; } it('finds the maximum desired height of each row', function () { let heights = []; let cells = [ [mc(0, 0, 7), mc(0, 1, 3), mc(0, 2, 5)], [mc(1, 0, 8), mc(1, 1, 5), mc(1, 2, 2)], [mc(2, 0, 6), mc(2, 1, 9), mc(2, 2, 1)], ]; computeHeights(heights, cells); expect(heights).toEqual([7, 8, 9]); }); it("won't touch hard coded values", function () { let heights = [null, 3]; let cells = [ [mc(0, 0, 7), mc(0, 1, 3), mc(0, 2, 5)], [mc(1, 0, 8), mc(1, 1, 5), mc(1, 2, 2)], [mc(2, 0, 6), mc(2, 1, 9), mc(2, 2, 1)], ]; computeHeights(heights, cells); expect(heights).toEqual([7, 3, 9]); }); it('assumes undefined desiredHeight is 1', function () { let heights = []; let cells = [ [ { x: 0, y: 0 }, { x: 1, y: 0 }, { x: 2, y: 0 }, ], ]; computeHeights(heights, cells); expect(heights).toEqual([1]); }); it('takes into account rowSpan and wont over expand', function () { let heights = []; let cells = [ [mc(0, 0, 10, 2), mc(0, 1, 5), mc(0, 2, 2)], [mc(1, 1, 5), mc(1, 2, 2)], [mc(2, 0, 4), mc(2, 1, 2), mc(2, 2, 1)], ]; computeHeights(heights, cells); expect(heights).toEqual([5, 5, 4]); }); it('will expand rows involved in rowSpan in a balanced way', function () { let heights = []; let cells = [ [mc(0, 0, 13, 2), mc(0, 1, 5), mc(0, 2, 5)], [mc(1, 1, 5), mc(1, 2, 2)], [mc(2, 0, 4), mc(2, 1, 2), mc(2, 2, 1)], ]; computeHeights(heights, cells); expect(heights).toEqual([6, 6, 4]); }); it('expands across 3 rows', function () { let heights = []; let cells = [ [mc(0, 0, 25, 3), mc(0, 1, 5), mc(0, 2, 4)], [mc(1, 1, 5), mc(1, 2, 2)], [mc(2, 1, 2), mc(2, 2, 1)], ]; computeHeights(heights, cells); expect(heights).toEqual([9, 9, 5]); }); it('multiple spans in same table', function () { let heights = []; let cells = [[mc(0, 0, 25, 3), mc(0, 1, 30, 3), mc(0, 2, 4)], [mc(1, 2, 2)], [mc(2, 2, 1)]]; computeHeights(heights, cells); expect(heights).toEqual([11, 9, 8]); }); }); /** * Provides a shorthand for validating a table of cells. * To pass, both arrays must have the same dimensions, and each cell in `actualRows` must * satisfy the shorthand assertion of the corresponding location in `expectedRows`. * * Available Expectations Can Be: * * * A `String` - Must be a normal cell with contents equal to the String value. * * `null` - Must be a RowSpanCell * * Or an `Object` with any of the following properties (multiple properties allowed): * * rowSpan:Number - Must be a normal cell with the given rowSpan. * * colSpan:Number - Must be a normal cell with the given colSpan. * * content:String - Must be a normal cell with the given content. * * spannerFor:[row,col] - Must be a RowSpanCell delegating to the cell at the given coordinates. * * @param actualRows - the table of cells under test. * @param expectedRows - a table of shorthand assertions. */ function checkLayout(actualTable, expectedTable) { expectedTable.forEach(function (expectedRow, y) { expectedRow.forEach(function (expectedCell, x) { if (expectedCell !== null) { let actualCell = findCell(actualTable, x, y); checkExpectation(actualCell, expectedCell, x, y, actualTable); } }); }); } function findCell(table, x, y) { for (let i = 0; i < table.length; i++) { let row = table[i]; for (let j = 0; j < row.length; j++) { let cell = row[j]; if (cell.x === x && cell.y === y) { return cell; } } } } function checkExpectation(actualCell, expectedCell, x, y, actualTable) { if (typeof expectedCell === 'string') { expectedCell = { content: expectedCell }; } if (Object.prototype.hasOwnProperty.call(expectedCell, 'content')) { expect(actualCell).toBeInstanceOf(Cell); expect(actualCell.content).toEqual(expectedCell.content); } if (Object.prototype.hasOwnProperty.call(expectedCell, 'rowSpan')) { expect(actualCell).toBeInstanceOf(Cell); expect(actualCell.rowSpan).toEqual(expectedCell.rowSpan); } if (Object.prototype.hasOwnProperty.call(expectedCell, 'colSpan')) { expect(actualCell).toBeInstanceOf(Cell); expect(actualCell.colSpan).toEqual(expectedCell.colSpan); } if (Object.prototype.hasOwnProperty.call(expectedCell, 'spannerFor')) { expect(actualCell).toBeInstanceOf(Cell.RowSpanCell); expect(actualCell.originalCell).toBeInstanceOf(Cell); expect(actualCell.originalCell).toEqual( findCell(actualTable, expectedCell.spannerFor[1], expectedCell.spannerFor[0]) ); //TODO: retest here x,y coords } } }); cli-table3-0.6.1/test/table-test.js000066400000000000000000000054011416656160400170270ustar00rootroot00000000000000describe('@api Table ', function () { const Table = require('..'); const colors = require('colors/safe'); it('wordWrap with colored text', function () { let table = new Table({ style: { border: [], head: [] }, wordWrap: true, colWidths: [7, 9] }); table.push([colors.red('Hello how are you?'), colors.blue('I am fine thanks!')]); let expected = [ '┌───────┬─────────┐', '│ ' + colors.red('Hello') + ' │ ' + colors.blue('I am') + ' │', '│ ' + colors.red('how') + ' │ ' + colors.blue('fine') + ' │', '│ ' + colors.red('are') + ' │ ' + colors.blue('thanks!') + ' │', '│ ' + colors.red('you?') + ' │ │', '└───────┴─────────┘', ]; expect(table.toString()).toEqual(expected.join('\n')); }); it('allows numbers as `content` property of cells defined using object notation', function () { let table = new Table({ style: { border: [], head: [] } }); table.push([{ content: 12 }]); let expected = ['┌────┐', '│ 12 │', '└────┘']; expect(table.toString()).toEqual(expected.join('\n')); }); it('throws if content is not a string or number', function () { let table = new Table({ style: { border: [], head: [] } }); expect(function () { table.push([{ content: { a: 'b' } }]); table.toString(); }).toThrow(); }); it('works with CJK values', function () { let table = new Table({ style: { border: [], head: [] }, colWidths: [5, 10, 5] }); table.push( ['foobar', 'English test', 'baz'], ['foobar', '中文测试', 'baz'], ['foobar', '日本語テスト', 'baz'], ['foobar', '한국어테스트', 'baz'] ); let expected = [ '┌─────┬──────────┬─────┐', '│ fo… │ English… │ baz │', '├─────┼──────────┼─────┤', '│ fo… │ 中文测试 │ baz │', '├─────┼──────────┼─────┤', '│ fo… │ 日本語… │ baz │', '├─────┼──────────┼─────┤', '│ fo… │ 한국어… │ baz │', '└─────┴──────────┴─────┘', ]; expect(table.toString()).toEqual(expected.join('\n')); }); }); /* let expected = [ '┌──┬───┬──┬──┐' , '│ │ │ │ │' , '├──┼───┼──┼──┤' , '│ │ … │ │ │' , '├──┼───┼──┼──┤' , '│ │ … │ │ │' , '└──┴───┴──┴──┘' ]; */ cli-table3-0.6.1/test/utils-test.js000066400000000000000000000316651416656160400171130ustar00rootroot00000000000000describe('utils', function () { const colors = require('colors/safe'); const utils = require('../src/utils'); const { strlen, repeat, pad, truncate, mergeOptions, wordWrap } = utils; describe('strlen', function () { it('length of "hello" is 5', function () { expect(strlen('hello')).toEqual(5); }); it('length of "hi" is 2', function () { expect(strlen('hi')).toEqual(2); }); it('length of "hello" in red is 5', function () { expect(strlen(colors.red('hello'))).toEqual(5); }); it('length of "hello" in zebra is 5', function () { expect(strlen(colors.zebra('hello'))).toEqual(5); }); it('length of "hello\\nhi\\nheynow" is 6', function () { expect(strlen('hello\nhi\nheynow')).toEqual(6); }); it('length of "中文字符" is 8', function () { expect(strlen('中文字符')).toEqual(8); }); it('length of "日本語の文字" is 12', function () { expect(strlen('日本語の文字')).toEqual(12); }); it('length of "한글" is 4', function () { expect(strlen('한글')).toEqual(4); }); }); describe('repeat', function () { it('"-" x 3', function () { expect(repeat('-', 3)).toEqual('---'); }); it('"-" x 4', function () { expect(repeat('-', 4)).toEqual('----'); }); it('"=" x 4', function () { expect(repeat('=', 4)).toEqual('===='); }); }); describe('pad', function () { it("pad('hello',6,' ', right) == ' hello'", function () { expect(pad('hello', 6, ' ', 'right')).toEqual(' hello'); }); it("pad('hello',7,' ', left) == 'hello '", function () { expect(pad('hello', 7, ' ', 'left')).toEqual('hello '); }); it("pad('hello',8,' ', center) == ' hello '", function () { expect(pad('hello', 8, ' ', 'center')).toEqual(' hello '); }); it("pad('hello',9,' ', center) == ' hello '", function () { expect(pad('hello', 9, ' ', 'center')).toEqual(' hello '); }); it("pad('yo',4,' ', center) == ' yo '", function () { expect(pad('yo', 4, ' ', 'center')).toEqual(' yo '); }); it('pad red(hello)', function () { expect(pad(colors.red('hello'), 7, ' ', 'right')).toEqual(' ' + colors.red('hello')); }); it("pad('hello', 2, ' ', right) == 'hello'", function () { expect(pad('hello', 2, ' ', 'right')).toEqual('hello'); }); }); describe('truncate', function () { it('truncate("hello", 5) === "hello"', function () { expect(truncate('hello', 5)).toEqual('hello'); }); it('truncate("hello sir", 7, "…") == "hello …"', function () { expect(truncate('hello sir', 7, '…')).toEqual('hello …'); }); it('truncate("hello sir", 6, "…") == "hello…"', function () { expect(truncate('hello sir', 6, '…')).toEqual('hello…'); }); it('truncate("goodnight moon", 8, "…") == "goodnig…"', function () { expect(truncate('goodnight moon', 8, '…')).toEqual('goodnig…'); }); it('truncate(colors.zebra("goodnight moon"), 15, "…") == colors.zebra("goodnight moon")', function () { let original = colors.zebra('goodnight moon'); expect(truncate(original, 15, '…')).toEqual(original); }); it('truncate(colors.zebra("goodnight moon"), 8, "…") == colors.zebra("goodnig") + "…"', function () { let original = colors.zebra('goodnight moon'); let expected = colors.zebra('goodnig') + '…'; expect(truncate(original, 8, '…')).toEqual(expected); }); it('truncate(colors.zebra("goodnight moon"), 9, "…") == colors.zebra("goodnig") + "…"', function () { let original = colors.zebra('goodnight moon'); let expected = colors.zebra('goodnigh') + '…'; expect(truncate(original, 9, '…')).toEqual(expected); }); it('red(hello) + green(world) truncated to 9 chars', function () { let original = colors.red('hello') + colors.green(' world'); let expected = colors.red('hello') + colors.green(' wo') + '…'; expect(truncate(original, 9)).toEqual(expected); }); it('red-on-green(hello) + green-on-red(world) truncated to 9 chars', function () { let original = colors.red.bgGreen('hello') + colors.green.bgRed(' world'); let expected = colors.red.bgGreen('hello') + colors.green.bgRed(' wo') + '…'; expect(truncate(original, 9)).toEqual(expected); }); it('red-on-green(hello) + green-on-red(world) truncated to 10 chars - using inverse', function () { let original = colors.red.bgGreen('hello' + colors.inverse(' world')); let expected = colors.red.bgGreen('hello' + colors.inverse(' wor')) + '…'; expect(truncate(original, 10)).toEqual(expected); }); it('red-on-green( zebra (hello world) ) truncated to 11 chars', function () { let original = colors.red.bgGreen(colors.zebra('hello world')); let expected = colors.red.bgGreen(colors.zebra('hello world')); expect(truncate(original, 11)).toEqual(expected); }); it('red-on-green( zebra (hello world) ) truncated to 10 chars', function () { let original = colors.red.bgGreen(colors.zebra('hello world')); let expected = colors.red.bgGreen(colors.zebra('hello wor')) + '…'; expect(truncate(original, 10)).toEqual(expected); }); it('handles reset code', function () { let original = '\x1b[31mhello\x1b[0m world'; let expected = '\x1b[31mhello\x1b[0m wor…'; expect(truncate(original, 10)).toEqual(expected); }); it('handles reset code (EMPTY VERSION)', function () { let original = '\x1b[31mhello\x1b[0m world'; let expected = '\x1b[31mhello\x1b[0m wor…'; expect(truncate(original, 10)).toEqual(expected); }); it('truncateWidth("漢字テスト", 15) === "漢字テスト"', function () { expect(truncate('漢字テスト', 15)).toEqual('漢字テスト'); }); it('truncateWidth("漢字テスト", 6) === "漢字…"', function () { expect(truncate('漢字テスト', 6)).toEqual('漢字…'); }); it('truncateWidth("漢字テスト", 5) === "漢字…"', function () { expect(truncate('漢字テスト', 5)).toEqual('漢字…'); }); it('truncateWidth("漢字testてすと", 12) === "漢字testて…"', function () { expect(truncate('漢字testてすと', 12)).toEqual('漢字testて…'); }); it('handles color code with CJK chars', function () { let original = '漢字\x1b[31m漢字\x1b[0m漢字'; let expected = '漢字\x1b[31m漢字\x1b[0m漢…'; expect(truncate(original, 11)).toEqual(expected); }); }); function defaultOptions() { return { chars: { top: '─', 'top-mid': '┬', 'top-left': '┌', 'top-right': '┐', bottom: '─', 'bottom-mid': '┴', 'bottom-left': '└', 'bottom-right': '┘', left: '│', 'left-mid': '├', mid: '─', 'mid-mid': '┼', right: '│', 'right-mid': '┤', middle: '│', }, truncate: '…', colWidths: [], rowHeights: [], colAligns: [], rowAligns: [], style: { 'padding-left': 1, 'padding-right': 1, head: ['red'], border: ['grey'], compact: false, }, head: [], }; } describe('mergeOptions', function () { it('allows you to override chars', function () { expect(mergeOptions()).toEqual(defaultOptions()); }); it('chars will be merged deeply', function () { let expected = defaultOptions(); expected.chars.left = 'L'; expect(mergeOptions({ chars: { left: 'L' } })).toEqual(expected); }); it('style will be merged deeply', function () { let expected = defaultOptions(); expected.style['padding-left'] = 2; expect(mergeOptions({ style: { 'padding-left': 2 } })).toEqual(expected); }); it('head will be overwritten', function () { let expected = defaultOptions(); expected.style.head = []; //we can't use lodash's `merge()` in implementation because it would deeply copy array. expect(mergeOptions({ style: { head: [] } })).toEqual(expected); }); it('border will be overwritten', function () { let expected = defaultOptions(); expected.style.border = []; //we can't use lodash's `merge()` in implementation because it would deeply copy array. expect(mergeOptions({ style: { border: [] } })).toEqual(expected); }); }); describe('wordWrap', function () { it('length', function () { let input = 'Hello, how are you today? I am fine, thank you!'; let expected = 'Hello, how\nare you\ntoday? I\nam fine,\nthank you!'; expect(wordWrap(10, input).join('\n')).toEqual(expected); }); it.skip('length with colors', function () { let input = colors.red('Hello, how are') + colors.blue(' you today? I') + colors.green(' am fine, thank you!'); let expected = colors.red('Hello, how\nare') + colors.blue(' you\ntoday? I') + colors.green('\nam fine,\nthank you!'); expect(wordWrap(10, input).join('\n')).toEqual(expected); }); it('will not create an empty last line', function () { let input = 'Hello Hello '; let expected = 'Hello\nHello'; expect(wordWrap(5, input).join('\n')).toEqual(expected); }); it('will handle color reset code', function () { let input = '\x1b[31mHello\x1b[0m Hello '; let expected = '\x1b[31mHello\x1b[0m\nHello'; expect(wordWrap(5, input).join('\n')).toEqual(expected); }); it('will handle color reset code (EMPTY version)', function () { let input = '\x1b[31mHello\x1b[m Hello '; let expected = '\x1b[31mHello\x1b[m\nHello'; expect(wordWrap(5, input).join('\n')).toEqual(expected); }); it('words longer than limit will not create extra newlines', function () { let input = 'disestablishment is a multiplicity someotherlongword'; let expected = 'disestablishment\nis a\nmultiplicity\nsomeotherlongword'; expect(wordWrap(7, input).join('\n')).toEqual(expected); }); it('multiple line input', function () { let input = 'a\nb\nc d e d b duck\nm\nn\nr'; let expected = ['a', 'b', 'c d', 'e d', 'b', 'duck', 'm', 'n', 'r']; expect(wordWrap(4, input)).toEqual(expected); }); it('will not start a line with whitespace', function () { let input = 'ab cd ef gh ij kl'; let expected = ['ab cd', 'ef gh', 'ij kl']; expect(wordWrap(7, input)).toEqual(expected); }); it('wraps CJK chars', function () { let input = '漢字 漢\n字 漢字'; let expected = ['漢字 漢', '字 漢字']; expect(wordWrap(7, input)).toEqual(expected); }); it('wraps CJK chars with colors', function () { let input = '\x1b[31m漢字\x1b[0m\n 漢字'; let expected = ['\x1b[31m漢字\x1b[0m', ' 漢字']; expect(wordWrap(5, input)).toEqual(expected); }); }); describe('colorizeLines', function () { it('foreground colors continue on each line', function () { let input = colors.red('Hello\nHi').split('\n'); expect(utils.colorizeLines(input)).toEqual([colors.red('Hello'), colors.red('Hi')]); }); it('foreground colors continue on each line', function () { let input = colors.bgRed('Hello\nHi').split('\n'); expect(utils.colorizeLines(input)).toEqual([colors.bgRed('Hello'), colors.bgRed('Hi')]); }); it('styles will continue on each line', function () { let input = colors.underline('Hello\nHi').split('\n'); expect(utils.colorizeLines(input)).toEqual([colors.underline('Hello'), colors.underline('Hi')]); }); it('styles that end before the break will not be applied to the next line', function () { let input = (colors.underline('Hello') + '\nHi').split('\n'); expect(utils.colorizeLines(input)).toEqual([colors.underline('Hello'), 'Hi']); }); it('the reset code can be used to drop styles', function () { let input = '\x1b[31mHello\x1b[0m\nHi'.split('\n'); expect(utils.colorizeLines(input)).toEqual(['\x1b[31mHello\x1b[0m', 'Hi']); }); it('handles aixterm 16-color foreground', function () { let input = '\x1b[90mHello\nHi\x1b[0m'.split('\n'); expect(utils.colorizeLines(input)).toEqual(['\x1b[90mHello\x1b[39m', '\x1b[90mHi\x1b[0m']); }); it('handles aixterm 16-color background', function () { let input = '\x1b[100mHello\nHi\x1b[m\nHowdy'.split('\n'); expect(utils.colorizeLines(input)).toEqual(['\x1b[100mHello\x1b[49m', '\x1b[100mHi\x1b[m', 'Howdy']); }); it('handles aixterm 256-color foreground', function () { let input = '\x1b[48;5;8mHello\nHi\x1b[0m\nHowdy'.split('\n'); expect(utils.colorizeLines(input)).toEqual(['\x1b[48;5;8mHello\x1b[49m', '\x1b[48;5;8mHi\x1b[0m', 'Howdy']); }); it('handles CJK chars', function () { let input = colors.red('漢字\nテスト').split('\n'); expect(utils.colorizeLines(input)).toEqual([colors.red('漢字'), colors.red('テスト')]); }); }); }); cli-table3-0.6.1/test/verify-legacy-compatibility-test.js000066400000000000000000000115361416656160400233630ustar00rootroot00000000000000(function () { describe('verify original cli-table behavior', function () { commonTests(require('cli-table')); }); describe('@api cli-table2 matches verified behavior', function () { commonTests(require('../src/table')); }); function commonTests(Table) { const colors = require('colors/safe'); it('empty table has a width of 0', function () { let table = new Table(); expect(table.width).toEqual(0); expect(table.toString()).toEqual(''); }); it('header text will be colored according to style', function () { let table = new Table({ head: ['hello', 'goodbye'], style: { border: [], head: ['red', 'bgWhite'] } }); let expected = [ '┌───────┬─────────┐', '│' + colors.bgWhite.red(' hello ') + '│' + colors.bgWhite.red(' goodbye ') + '│', '└───────┴─────────┘', ]; expect(table.toString()).toEqual(expected.join('\n')); }); it('tables with one row of data will not be treated as headers', function () { let table = new Table({ style: { border: [], head: ['red'] } }); table.push(['hello', 'goodbye']); let expected = ['┌───────┬─────────┐', '│ hello │ goodbye │', '└───────┴─────────┘']; expect(table.toString()).toEqual(expected.join('\n')); }); it('table with headers and data headers', function () { let table = new Table({ head: ['hello', 'goodbye'], style: { border: [], head: ['red'] } }); table.push(['hola', 'adios']); let expected = [ '┌───────┬─────────┐', '│' + colors.red(' hello ') + '│' + colors.red(' goodbye ') + '│', '├───────┼─────────┤', '│ hola │ adios │', '└───────┴─────────┘', ]; expect(table.toString()).toEqual(expected.join('\n')); }); it('compact shorthand', function () { let table = new Table({ style: { compact: true, border: [], head: ['red'] } }); table.push(['hello', 'goodbye'], ['hola', 'adios']); let expected = ['┌───────┬─────────┐', '│ hello │ goodbye │', '│ hola │ adios │', '└───────┴─────────┘']; expect(table.toString()).toEqual(expected.join('\n')); }); it('compact shorthand - headers are still rendered with separator', function () { let table = new Table({ head: ['hello', 'goodbye'], style: { compact: true, border: [], head: [] } }); table.push(['hola', 'adios'], ['hi', 'bye']); let expected = [ '┌───────┬─────────┐', '│ hello │ goodbye │', '├───────┼─────────┤', '│ hola │ adios │', '│ hi │ bye │', '└───────┴─────────┘', ]; expect(table.toString()).toEqual(expected.join('\n')); }); it('compact longhand - headers are not rendered with separator', function () { let table = new Table({ chars: { mid: '', 'left-mid': '', 'mid-mid': '', 'right-mid': '', }, head: ['hello', 'goodbye'], style: { border: [], head: [] }, }); table.push(['hola', 'adios'], ['hi', 'bye']); let expected = [ '┌───────┬─────────┐', '│ hello │ goodbye │', '│ hola │ adios │', '│ hi │ bye │', '└───────┴─────────┘', ]; expect(table.toString()).toEqual(expected.join('\n')); }); it('compact longhand', function () { let table = new Table({ chars: { mid: '', 'left-mid': '', 'mid-mid': '', 'right-mid': '', }, style: { border: [], head: ['red'] }, }); table.push(['hello', 'goodbye'], ['hola', 'adios']); let expected = ['┌───────┬─────────┐', '│ hello │ goodbye │', '│ hola │ adios │', '└───────┴─────────┘']; expect(table.toString()).toEqual(expected.join('\n')); }); it('objects with multiple properties in a cross-table', function () { let table = new Table({ style: { border: [], head: [] } }); table.push( { a: ['b'], c: ['d'] } // value of property 'c' will be discarded ); let expected = ['┌───┬───┐', '│ a │ b │', '└───┴───┘']; expect(table.toString()).toEqual(expected.join('\n')); }); } })(); cli-table3-0.6.1/yarn.lock000066400000000000000000006005531416656160400153020ustar00rootroot00000000000000# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. # yarn lockfile v1 "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== dependencies: "@babel/highlight" "^7.8.3" "@babel/core@^7.1.0", "@babel/core@^7.7.5": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.9.0.tgz#ac977b538b77e132ff706f3b8a4dbad09c03c56e" integrity sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w== dependencies: "@babel/code-frame" "^7.8.3" "@babel/generator" "^7.9.0" "@babel/helper-module-transforms" "^7.9.0" "@babel/helpers" "^7.9.0" "@babel/parser" "^7.9.0" "@babel/template" "^7.8.6" "@babel/traverse" "^7.9.0" "@babel/types" "^7.9.0" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.1" json5 "^2.1.2" lodash "^4.17.13" resolve "^1.3.2" semver "^5.4.1" source-map "^0.5.0" "@babel/generator@^7.9.0": version "7.9.4" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.4.tgz#12441e90c3b3c4159cdecf312075bf1a8ce2dbce" integrity sha512-rjP8ahaDy/ouhrvCoU1E5mqaitWrxwuNGU+dy1EpaoK48jZay4MdkskKGIMHLZNewg8sAsqpGSREJwP0zH3YQA== dependencies: "@babel/types" "^7.9.0" jsesc "^2.5.1" lodash "^4.17.13" source-map "^0.5.0" "@babel/helper-function-name@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz#eeeb665a01b1f11068e9fb86ad56a1cb1a824cca" integrity sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA== dependencies: "@babel/helper-get-function-arity" "^7.8.3" "@babel/template" "^7.8.3" "@babel/types" "^7.8.3" "@babel/helper-get-function-arity@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" integrity sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA== dependencies: "@babel/types" "^7.8.3" "@babel/helper-member-expression-to-functions@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c" integrity sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA== dependencies: "@babel/types" "^7.8.3" "@babel/helper-module-imports@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498" integrity sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg== dependencies: "@babel/types" "^7.8.3" "@babel/helper-module-transforms@^7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz#43b34dfe15961918707d247327431388e9fe96e5" integrity sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA== dependencies: "@babel/helper-module-imports" "^7.8.3" "@babel/helper-replace-supers" "^7.8.6" "@babel/helper-simple-access" "^7.8.3" "@babel/helper-split-export-declaration" "^7.8.3" "@babel/template" "^7.8.6" "@babel/types" "^7.9.0" lodash "^4.17.13" "@babel/helper-optimise-call-expression@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz#7ed071813d09c75298ef4f208956006b6111ecb9" integrity sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ== dependencies: "@babel/types" "^7.8.3" "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670" integrity sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ== "@babel/helper-replace-supers@^7.8.6": version "7.8.6" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz#5ada744fd5ad73203bf1d67459a27dcba67effc8" integrity sha512-PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA== dependencies: "@babel/helper-member-expression-to-functions" "^7.8.3" "@babel/helper-optimise-call-expression" "^7.8.3" "@babel/traverse" "^7.8.6" "@babel/types" "^7.8.6" "@babel/helper-simple-access@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz#7f8109928b4dab4654076986af575231deb639ae" integrity sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw== dependencies: "@babel/template" "^7.8.3" "@babel/types" "^7.8.3" "@babel/helper-split-export-declaration@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" integrity sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA== dependencies: "@babel/types" "^7.8.3" "@babel/helper-validator-identifier@^7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.0.tgz#ad53562a7fc29b3b9a91bbf7d10397fd146346ed" integrity sha512-6G8bQKjOh+of4PV/ThDm/rRqlU7+IGoJuofpagU5GlEl29Vv0RGqqt86ZGRV8ZuSOY3o+8yXl5y782SMcG7SHw== "@babel/helper-validator-identifier@^7.9.5": version "7.9.5" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz#90977a8e6fbf6b431a7dc31752eee233bf052d80" integrity sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g== "@babel/helpers@^7.9.0": version "7.9.2" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.9.2.tgz#b42a81a811f1e7313b88cba8adc66b3d9ae6c09f" integrity sha512-JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA== dependencies: "@babel/template" "^7.8.3" "@babel/traverse" "^7.9.0" "@babel/types" "^7.9.0" "@babel/highlight@^7.8.3": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.9.0.tgz#4e9b45ccb82b79607271b2979ad82c7b68163079" integrity sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ== dependencies: "@babel/helper-validator-identifier" "^7.9.0" chalk "^2.0.0" js-tokens "^4.0.0" "@babel/parser@^7.1.0", "@babel/parser@^7.7.5", "@babel/parser@^7.8.6", "@babel/parser@^7.9.0": version "7.9.4" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.4.tgz#68a35e6b0319bbc014465be43828300113f2f2e8" integrity sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-bigint@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-class-properties@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.8.3.tgz#6cb933a8872c8d359bfde69bbeaae5162fd1e8f7" integrity sha512-UcAyQWg2bAN647Q+O811tG9MrJ38Z10jjhQdKNAL8fsyPzE3cCN/uT+f55cFVY4aGO4jqJAvmqsuY3GQDwAoXg== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-json-strings@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.8.3.tgz#3995d7d7ffff432f6ddc742b47e730c054599897" integrity sha512-Zpg2Sgc++37kuFl6ppq2Q7Awc6E6AIW671x5PY8E/f7MCIyPPGK/EoeZXvvY3P42exZ3Q4/t3YOzP/HiN79jDg== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-numeric-separator@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz#0e3fb63e09bea1b11e96467271c8308007e7c41f" integrity sha512-H7dCMAdN83PcCmqmkHB5dtp+Xa9a6LKSvA2hiFBC/5alSHxM5VgWZXFqDi0YFe8XNGT6iCa+z4V4zSt/PdZ7Dw== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-object-rest-spread@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-catch-binding@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-chaining@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/template@^7.3.3", "@babel/template@^7.7.4", "@babel/template@^7.8.3", "@babel/template@^7.8.6": version "7.8.6" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b" integrity sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg== dependencies: "@babel/code-frame" "^7.8.3" "@babel/parser" "^7.8.6" "@babel/types" "^7.8.6" "@babel/traverse@^7.1.0", "@babel/traverse@^7.7.4", "@babel/traverse@^7.8.6", "@babel/traverse@^7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.0.tgz#d3882c2830e513f4fe4cec9fe76ea1cc78747892" integrity sha512-jAZQj0+kn4WTHO5dUZkZKhbFrqZE7K5LAQ5JysMnmvGij+wOdr+8lWqPeW0BcF4wFwrEXXtdGO7wcV6YPJcf3w== dependencies: "@babel/code-frame" "^7.8.3" "@babel/generator" "^7.9.0" "@babel/helper-function-name" "^7.8.3" "@babel/helper-split-export-declaration" "^7.8.3" "@babel/parser" "^7.9.0" "@babel/types" "^7.9.0" debug "^4.1.0" globals "^11.1.0" lodash "^4.17.13" "@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.0.tgz#00b064c3df83ad32b2dbf5ff07312b15c7f1efb5" integrity sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng== dependencies: "@babel/helper-validator-identifier" "^7.9.0" lodash "^4.17.13" to-fast-properties "^2.0.0" "@babel/types@^7.3.3": version "7.9.5" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.5.tgz#89231f82915a8a566a703b3b20133f73da6b9444" integrity sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg== dependencies: "@babel/helper-validator-identifier" "^7.9.5" lodash "^4.17.13" to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== "@cnakazawa/watch@^1.0.3": version "1.0.4" resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== dependencies: exec-sh "^0.3.2" minimist "^1.2.0" "@istanbuljs/load-nyc-config@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.0.0.tgz#10602de5570baea82f8afbfa2630b24e7a8cfe5b" integrity sha512-ZR0rq/f/E4f4XcgnDvtMWXCUJpi8eO0rssVhmztsZqLIEFA9UUP9zmpE0VxlM+kv/E1ul2I876Fwil2ayptDVg== dependencies: camelcase "^5.3.1" find-up "^4.1.0" js-yaml "^3.13.1" resolve-from "^5.0.0" "@istanbuljs/schema@^0.1.2": version "0.1.2" resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== "@jest/console@^25.5.0": version "25.5.0" resolved "https://registry.yarnpkg.com/@jest/console/-/console-25.5.0.tgz#770800799d510f37329c508a9edd0b7b447d9abb" integrity sha512-T48kZa6MK1Y6k4b89sexwmSF4YLeZS/Udqg3Jj3jG/cHH+N/sLFCEoXEDMOKugJQ9FxPN1osxIknvKkxt6MKyw== dependencies: "@jest/types" "^25.5.0" chalk "^3.0.0" jest-message-util "^25.5.0" jest-util "^25.5.0" slash "^3.0.0" "@jest/core@^25.5.4": version "25.5.4" resolved "https://registry.yarnpkg.com/@jest/core/-/core-25.5.4.tgz#3ef7412f7339210f003cdf36646bbca786efe7b4" integrity sha512-3uSo7laYxF00Dg/DMgbn4xMJKmDdWvZnf89n8Xj/5/AeQ2dOQmn6b6Hkj/MleyzZWXpwv+WSdYWl4cLsy2JsoA== dependencies: "@jest/console" "^25.5.0" "@jest/reporters" "^25.5.1" "@jest/test-result" "^25.5.0" "@jest/transform" "^25.5.1" "@jest/types" "^25.5.0" ansi-escapes "^4.2.1" chalk "^3.0.0" exit "^0.1.2" graceful-fs "^4.2.4" jest-changed-files "^25.5.0" jest-config "^25.5.4" jest-haste-map "^25.5.1" jest-message-util "^25.5.0" jest-regex-util "^25.2.6" jest-resolve "^25.5.1" jest-resolve-dependencies "^25.5.4" jest-runner "^25.5.4" jest-runtime "^25.5.4" jest-snapshot "^25.5.1" jest-util "^25.5.0" jest-validate "^25.5.0" jest-watcher "^25.5.0" micromatch "^4.0.2" p-each-series "^2.1.0" realpath-native "^2.0.0" rimraf "^3.0.0" slash "^3.0.0" strip-ansi "^6.0.0" "@jest/environment@^25.5.0": version "25.5.0" resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-25.5.0.tgz#aa33b0c21a716c65686638e7ef816c0e3a0c7b37" integrity sha512-U2VXPEqL07E/V7pSZMSQCvV5Ea4lqOlT+0ZFijl/i316cRMHvZ4qC+jBdryd+lmRetjQo0YIQr6cVPNxxK87mA== dependencies: "@jest/fake-timers" "^25.5.0" "@jest/types" "^25.5.0" jest-mock "^25.5.0" "@jest/fake-timers@^25.5.0": version "25.5.0" resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-25.5.0.tgz#46352e00533c024c90c2bc2ad9f2959f7f114185" integrity sha512-9y2+uGnESw/oyOI3eww9yaxdZyHq7XvprfP/eeoCsjqKYts2yRlsHS/SgjPDV8FyMfn2nbMy8YzUk6nyvdLOpQ== dependencies: "@jest/types" "^25.5.0" jest-message-util "^25.5.0" jest-mock "^25.5.0" jest-util "^25.5.0" lolex "^5.0.0" "@jest/globals@^25.5.2": version "25.5.2" resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-25.5.2.tgz#5e45e9de8d228716af3257eeb3991cc2e162ca88" integrity sha512-AgAS/Ny7Q2RCIj5kZ+0MuKM1wbF0WMLxbCVl/GOMoCNbODRdJ541IxJ98xnZdVSZXivKpJlNPIWa3QmY0l4CXA== dependencies: "@jest/environment" "^25.5.0" "@jest/types" "^25.5.0" expect "^25.5.0" "@jest/reporters@^25.5.1": version "25.5.1" resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-25.5.1.tgz#cb686bcc680f664c2dbaf7ed873e93aa6811538b" integrity sha512-3jbd8pPDTuhYJ7vqiHXbSwTJQNavczPs+f1kRprRDxETeE3u6srJ+f0NPuwvOmk+lmunZzPkYWIFZDLHQPkviw== dependencies: "@bcoe/v8-coverage" "^0.2.3" "@jest/console" "^25.5.0" "@jest/test-result" "^25.5.0" "@jest/transform" "^25.5.1" "@jest/types" "^25.5.0" chalk "^3.0.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" glob "^7.1.2" graceful-fs "^4.2.4" istanbul-lib-coverage "^3.0.0" istanbul-lib-instrument "^4.0.0" istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.0.2" jest-haste-map "^25.5.1" jest-resolve "^25.5.1" jest-util "^25.5.0" jest-worker "^25.5.0" slash "^3.0.0" source-map "^0.6.0" string-length "^3.1.0" terminal-link "^2.0.0" v8-to-istanbul "^4.1.3" optionalDependencies: node-notifier "^6.0.0" "@jest/source-map@^25.5.0": version "25.5.0" resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-25.5.0.tgz#df5c20d6050aa292c2c6d3f0d2c7606af315bd1b" integrity sha512-eIGx0xN12yVpMcPaVpjXPnn3N30QGJCJQSkEDUt9x1fI1Gdvb07Ml6K5iN2hG7NmMP6FDmtPEssE3z6doOYUwQ== dependencies: callsites "^3.0.0" graceful-fs "^4.2.4" source-map "^0.6.0" "@jest/test-result@^25.5.0": version "25.5.0" resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-25.5.0.tgz#139a043230cdeffe9ba2d8341b27f2efc77ce87c" integrity sha512-oV+hPJgXN7IQf/fHWkcS99y0smKLU2czLBJ9WA0jHITLst58HpQMtzSYxzaBvYc6U5U6jfoMthqsUlUlbRXs0A== dependencies: "@jest/console" "^25.5.0" "@jest/types" "^25.5.0" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" "@jest/test-sequencer@^25.5.4": version "25.5.4" resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-25.5.4.tgz#9b4e685b36954c38d0f052e596d28161bdc8b737" integrity sha512-pTJGEkSeg1EkCO2YWq6hbFvKNXk8ejqlxiOg1jBNLnWrgXOkdY6UmqZpwGFXNnRt9B8nO1uWMzLLZ4eCmhkPNA== dependencies: "@jest/test-result" "^25.5.0" graceful-fs "^4.2.4" jest-haste-map "^25.5.1" jest-runner "^25.5.4" jest-runtime "^25.5.4" "@jest/transform@^25.5.1": version "25.5.1" resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-25.5.1.tgz#0469ddc17699dd2bf985db55fa0fb9309f5c2db3" integrity sha512-Y8CEoVwXb4QwA6Y/9uDkn0Xfz0finGkieuV0xkdF9UtZGJeLukD5nLkaVrVsODB1ojRWlaoD0AJZpVHCSnJEvg== dependencies: "@babel/core" "^7.1.0" "@jest/types" "^25.5.0" babel-plugin-istanbul "^6.0.0" chalk "^3.0.0" convert-source-map "^1.4.0" fast-json-stable-stringify "^2.0.0" graceful-fs "^4.2.4" jest-haste-map "^25.5.1" jest-regex-util "^25.2.6" jest-util "^25.5.0" micromatch "^4.0.2" pirates "^4.0.1" realpath-native "^2.0.0" slash "^3.0.0" source-map "^0.6.1" write-file-atomic "^3.0.0" "@jest/types@^25.5.0": version "25.5.0" resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d" integrity sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw== dependencies: "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^1.1.1" "@types/yargs" "^15.0.0" chalk "^3.0.0" "@sinonjs/commons@^1.7.0": version "1.7.1" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.7.1.tgz#da5fd19a5f71177a53778073978873964f49acf1" integrity sha512-Debi3Baff1Qu1Unc3mjJ96MgpbwTn43S1+9yJ0llWygPwDNu2aaWBD6yc9y/Z8XDRNhx7U+u2UDg2OGQXkclUQ== dependencies: type-detect "4.0.8" "@types/babel__core@^7.1.7": version "7.1.7" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.7.tgz#1dacad8840364a57c98d0dd4855c6dd3752c6b89" integrity sha512-RL62NqSFPCDK2FM1pSDH0scHpJvsXtZNiYlMB73DgPBaG1E38ZYVL+ei5EkWRbr+KC4YNiAUNBnRj+bgwpgjMw== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" "@types/babel__generator" "*" "@types/babel__template" "*" "@types/babel__traverse" "*" "@types/babel__generator@*": version "7.6.1" resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.1.tgz#4901767b397e8711aeb99df8d396d7ba7b7f0e04" integrity sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": version "7.0.2" resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307" integrity sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": version "7.0.9" resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.9.tgz#be82fab304b141c3eee81a4ce3b034d0eba1590a" integrity sha512-jEFQ8L1tuvPjOI8lnpaf73oCJe+aoxL6ygqSy6c8LcW98zaC+4mzWuQIRCEvKeCOu+lbqdXcg4Uqmm1S8AP1tw== dependencies: "@babel/types" "^7.3.0" "@types/color-name@^1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== "@types/graceful-fs@^4.1.2": version "4.1.3" resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.3.tgz#039af35fe26bec35003e8d86d2ee9c586354348f" integrity sha512-AiHRaEB50LQg0pZmm659vNBb9f4SJ0qrAnteuzhSeAUcJKxoYgEnprg/83kppCnc2zvtCKbdZry1a5pVY3lOTQ== dependencies: "@types/node" "*" "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.1" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff" integrity sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg== "@types/istanbul-lib-report@*": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz#7a8cbf6a406f36c8add871625b278eaf0b0d255a" integrity sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-lib-report" "*" "@types/node@*": version "13.13.4" resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.4.tgz#1581d6c16e3d4803eb079c87d4ac893ee7501c2c" integrity sha512-x26ur3dSXgv5AwKS0lNfbjpCakGIduWU1DU91Zz58ONRWrIKGunmZBNv4P7N+e27sJkiGDsw/3fT4AtsqQBrBA== "@types/normalize-package-data@^2.4.0": version "2.4.0" resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== "@types/prettier@^1.19.0": version "1.19.1" resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.19.1.tgz#33509849f8e679e4add158959fdb086440e9553f" integrity sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ== "@types/stack-utils@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== "@types/yargs-parser@*": version "15.0.0" resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== "@types/yargs@^15.0.0": version "15.0.4" resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.4.tgz#7e5d0f8ca25e9d5849f2ea443cf7c402decd8299" integrity sha512-9T1auFmbPZoxHz0enUFlUuKRy3it01R+hlggyVUMtnCTQRunsQYifnSGb8hET4Xo8yiC0o0r1paW3ud5+rbURg== dependencies: "@types/yargs-parser" "*" abab@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a" integrity sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg== acorn-globals@^4.3.2: version "4.3.4" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A== dependencies: acorn "^6.0.1" acorn-walk "^6.0.1" acorn-jsx@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== acorn-walk@^6.0.1: version "6.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== acorn@^6.0.1: version "6.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== acorn@^7.1.0, acorn@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf" integrity sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg== agent-base@5: version "5.1.1" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-5.1.1.tgz#e8fb3f242959db44d63be665db7a8e739537a32c" integrity sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g== agent-base@~4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== dependencies: es6-promisify "^5.0.0" agentkeepalive@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.1.0.tgz#a48e040ed16745dd29ce923675f60c9c90f39ee0" integrity sha512-CW/n1wxF8RpEuuiq6Vbn9S8m0VSYDMnZESqaJ6F2cWN9fY8rei2qaxweIaRgq+ek8TqfoFIsUjaGNKGGEHElSg== dependencies: debug "^4.1.0" depd "^1.1.2" humanize-ms "^1.2.1" aggregate-error@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0" integrity sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA== dependencies: clean-stack "^2.0.0" indent-string "^4.0.0" ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5: version "6.12.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.0.tgz#06d60b96d87b8454a5adaba86e7854da629db4b7" integrity sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw== dependencies: fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.4.1" uri-js "^4.2.2" ansi-256-colors@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/ansi-256-colors/-/ansi-256-colors-1.1.0.tgz#910de50efcc7c09e3d82f2f87abd6b700c18818a" integrity sha1-kQ3lDvzHwJ49gvL4er1rcAwYgYo= ansi-escapes@^4.2.1: version "4.3.1" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== dependencies: type-fest "^0.11.0" ansi-regex@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== ansi-regex@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== dependencies: "@types/color-name" "^1.1.1" color-convert "^2.0.1" any-promise@^1.0.0: version "1.3.0" resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== dependencies: micromatch "^3.1.4" normalize-path "^2.1.1" anymatch@^3.0.3: version "3.1.1" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== dependencies: sprintf-js "~1.0.2" arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= arr-flatten@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== arr-union@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= array-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= asn1@~0.2.3: version "0.2.4" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== dependencies: safer-buffer "~2.1.0" assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= astral-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= atob@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= aws4@^1.8.0: version "1.9.1" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e" integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug== babel-jest@^25.5.1: version "25.5.1" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-25.5.1.tgz#bc2e6101f849d6f6aec09720ffc7bc5332e62853" integrity sha512-9dA9+GmMjIzgPnYtkhBg73gOo/RHqPmLruP3BaGL4KEX3Dwz6pI8auSN8G8+iuEG90+GSswyKvslN+JYSaacaQ== dependencies: "@jest/transform" "^25.5.1" "@jest/types" "^25.5.0" "@types/babel__core" "^7.1.7" babel-plugin-istanbul "^6.0.0" babel-preset-jest "^25.5.0" chalk "^3.0.0" graceful-fs "^4.2.4" slash "^3.0.0" babel-plugin-istanbul@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@istanbuljs/load-nyc-config" "^1.0.0" "@istanbuljs/schema" "^0.1.2" istanbul-lib-instrument "^4.0.0" test-exclude "^6.0.0" babel-plugin-jest-hoist@^25.5.0: version "25.5.0" resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.5.0.tgz#129c80ba5c7fc75baf3a45b93e2e372d57ca2677" integrity sha512-u+/W+WAjMlvoocYGTwthAiQSxDcJAyHpQ6oWlHdFZaaN+Rlk8Q7iiwDPg2lN/FyJtAYnKjFxbn7xus4HCFkg5g== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" "@types/babel__traverse" "^7.0.6" babel-preset-current-node-syntax@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.2.tgz#fb4a4c51fe38ca60fede1dc74ab35eb843cb41d6" integrity sha512-u/8cS+dEiK1SFILbOC8/rUI3ml9lboKuuMvZ/4aQnQmhecQAgPw5ew066C1ObnEAUmlx7dv/s2z52psWEtLNiw== dependencies: "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-bigint" "^7.8.3" "@babel/plugin-syntax-class-properties" "^7.8.3" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" "@babel/plugin-syntax-numeric-separator" "^7.8.3" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" "@babel/plugin-syntax-optional-chaining" "^7.8.3" babel-preset-jest@^25.5.0: version "25.5.0" resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-25.5.0.tgz#c1d7f191829487a907764c65307faa0e66590b49" integrity sha512-8ZczygctQkBU+63DtSOKGh7tFL0CeCuz+1ieud9lJ1WPQ9O6A1a/r+LGn6Y705PA6whHQ3T1XuB/PmpfNYf8Fw== dependencies: babel-plugin-jest-hoist "^25.5.0" babel-preset-current-node-syntax "^0.1.2" balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= base@^0.11.1: version "0.11.2" resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== dependencies: cache-base "^1.0.1" class-utils "^0.3.5" component-emitter "^1.2.1" define-property "^1.0.0" isobject "^3.0.1" mixin-deep "^1.2.0" pascalcase "^0.1.1" bcrypt-pbkdf@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= dependencies: tweetnacl "^0.14.3" brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" concat-map "0.0.1" braces@^2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== dependencies: arr-flatten "^1.1.0" array-unique "^0.3.2" extend-shallow "^2.0.1" fill-range "^4.0.0" isobject "^3.0.1" repeat-element "^1.1.2" snapdragon "^0.8.1" snapdragon-node "^2.0.1" split-string "^3.0.2" to-regex "^3.0.1" braces@^3.0.1: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" browser-process-hrtime@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== browser-resolve@^1.11.3: version "1.11.3" resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== dependencies: resolve "1.1.7" bser@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== dependencies: node-int64 "^0.4.0" buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== cacache@^14.0.0: version "14.0.0" resolved "https://registry.yarnpkg.com/cacache/-/cacache-14.0.0.tgz#97c10fc87c4c7ee41d45e32631c26761c2687caa" integrity sha512-+Nr/BnA/tjAUXza9gH8F+FSP+1HvWqCKt4c95dQr4EDVJVafbzmPZpLKCkLYexs6vSd2B/1TOXrAoNnqVPfvRA== dependencies: chownr "^1.1.2" figgy-pudding "^3.5.1" fs-minipass "^2.0.0" glob "^7.1.4" graceful-fs "^4.2.2" infer-owner "^1.0.4" lru-cache "^5.1.1" minipass "^3.0.0" minipass-collect "^1.0.2" minipass-flush "^1.0.5" minipass-pipeline "^1.2.2" mkdirp "^1.0.3" move-concurrently "^1.0.1" p-map "^3.0.0" promise-inflight "^1.0.1" rimraf "^2.7.1" ssri "^7.0.0" tar "^6.0.0" unique-filename "^1.1.1" cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== dependencies: collection-visit "^1.0.0" component-emitter "^1.2.1" get-value "^2.0.6" has-value "^1.0.0" isobject "^3.0.1" set-value "^2.0.0" to-object-path "^0.3.0" union-value "^1.0.0" unset-value "^1.0.0" caller-callsite@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= dependencies: callsites "^2.0.0" caller-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= dependencies: caller-callsite "^2.0.0" callsites@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== capture-exit@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== dependencies: rsvp "^4.8.4" caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" escape-string-regexp "^1.0.5" supports-color "^5.3.0" chalk@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== chownr@^1.1.2, chownr@^1.1.3: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== dependencies: arr-union "^3.1.0" define-property "^0.2.5" isobject "^3.0.0" static-extend "^0.1.1" clean-stack@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== cli-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== dependencies: restore-cursor "^3.1.0" cli-highlight@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.4.tgz#098cb642cf17f42adc1c1145e07f960ec4d7522b" integrity sha512-s7Zofobm20qriqDoU9sXptQx0t2R9PEgac92mENNm7xaEe1hn71IIMsXMK+6encA6WRCWWxIGQbipr3q998tlQ== dependencies: chalk "^3.0.0" highlight.js "^9.6.0" mz "^2.4.0" parse5 "^5.1.1" parse5-htmlparser2-tree-adapter "^5.1.1" yargs "^15.0.0" cli-table@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23" integrity sha1-9TsFJmqLGguTSz0IIebi3FkUriM= dependencies: colors "1.0.3" cli-width@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= cliui@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== dependencies: string-width "^3.1.0" strip-ansi "^5.2.0" wrap-ansi "^5.1.0" cliui@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== dependencies: string-width "^4.2.0" strip-ansi "^6.0.0" wrap-ansi "^6.2.0" co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= collect-v8-coverage@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.0.tgz#150ee634ac3650b71d9c985eb7f608942334feb1" integrity sha512-VKIhJgvk8E1W28m5avZ2Gv2Ruv5YiF56ug2oclvaG9md69BuZImMG2sk9g7QNKLUbtYAKQjXjYxbYZVUlMMKmQ== collection-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= dependencies: map-visit "^1.0.0" object-visit "^1.0.0" color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-convert@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== colors@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" integrity sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs= colors@1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== combined-stream@^1.0.6, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" component-emitter@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== dependencies: safe-buffer "~5.1.1" copy-concurrently@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== dependencies: aproba "^1.1.1" fs-write-stream-atomic "^1.0.8" iferr "^0.1.5" mkdirp "^0.5.1" rimraf "^2.5.4" run-queue "^1.0.0" copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= cosmiconfig@^5.0.0: version "5.2.1" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== dependencies: import-fresh "^2.0.0" is-directory "^0.3.1" js-yaml "^3.13.1" parse-json "^4.0.0" create-jest-runner@^0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/create-jest-runner/-/create-jest-runner-0.5.3.tgz#1387e2ce70b08e4c989ae55f677005b64f9ba97b" integrity sha512-a9VY2doMBmzRollJB3Ft3/Y5fBceSWJ4gdyVsg4/d7nP1S4715VG939s2VnITDj79YBmRgKhjGjNRv1c+Kre1g== dependencies: chalk "^2.4.2" jest-worker "^24.0.0" throat "^4.1.0" cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== dependencies: nice-try "^1.0.4" path-key "^2.0.1" semver "^5.5.0" shebang-command "^1.2.0" which "^1.2.9" cross-spawn@^7.0.0: version "7.0.1" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.1.tgz#0ab56286e0f7c24e153d04cc2aa027e43a9a5d14" integrity sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg== dependencies: path-key "^3.1.0" shebang-command "^2.0.0" which "^2.0.1" cssom@^0.4.1: version "0.4.4" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== cssom@~0.3.6: version "0.3.8" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== cssstyle@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.2.0.tgz#e4c44debccd6b7911ed617a4395e5754bba59992" integrity sha512-sEb3XFPx3jNnCAMtqrXPDeSgQr+jojtCeNf8cvMNMh1cG970+lljssvQDzPq6lmmJu2Vhqood/gtEomBiHOGnA== dependencies: cssom "~0.3.6" dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= dependencies: assert-plus "^1.0.0" data-urls@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== dependencies: abab "^2.0.0" whatwg-mimetype "^2.2.0" whatwg-url "^7.0.0" debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== dependencies: ms "^2.1.1" debug@^2.2.0, debug@^2.3.3: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= deepmerge@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== define-property@^0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= dependencies: is-descriptor "^0.1.0" define-property@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= dependencies: is-descriptor "^1.0.0" define-property@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== dependencies: is-descriptor "^1.0.2" isobject "^3.0.1" delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= depd@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= detect-newline@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== diff-sequences@^25.2.6: version "25.2.6" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd" integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg== doctrine@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== dependencies: esutils "^2.0.2" domexception@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== dependencies: webidl-conversions "^4.0.2" ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= dependencies: jsbn "~0.1.0" safer-buffer "^2.1.0" emoji-regex@^7.0.1: version "7.0.3" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== encoding@^0.1.12: version "0.1.12" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= dependencies: iconv-lite "~0.4.13" end-of-stream@^1.1.0: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" err-code@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" es6-promise@^4.0.3: version "4.2.8" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== es6-promisify@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= dependencies: es6-promise "^4.0.3" escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= escodegen@^1.11.1: version "1.14.1" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.1.tgz#ba01d0c8278b5e95a9a45350142026659027a457" integrity sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ== dependencies: esprima "^4.0.1" estraverse "^4.2.0" esutils "^2.0.2" optionator "^0.8.1" optionalDependencies: source-map "~0.6.1" eslint-config-prettier@^6.0.0: version "6.15.0" resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz#7f93f6cb7d45a92f1537a70ecc06366e1ac6fed9" integrity sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw== dependencies: get-stdin "^6.0.0" eslint-plugin-prettier@^3.0.0: version "3.4.0" resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.0.tgz#cdbad3bf1dbd2b177e9825737fe63b476a08f0c7" integrity sha512-UDK6rJT6INSfcOo545jiaOwB701uAIt2/dR7WnFQoGCVl1/EMqdANBmwUaqqQ45aXprsTGzSa39LI1PyuRBxxw== dependencies: prettier-linter-helpers "^1.0.0" eslint-scope@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9" integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw== dependencies: esrecurse "^4.1.0" estraverse "^4.1.1" eslint-utils@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== dependencies: eslint-visitor-keys "^1.1.0" eslint-visitor-keys@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== "eslint@^4.0.0 || ^5.0.0 || ^6.0.0": version "6.8.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== dependencies: "@babel/code-frame" "^7.0.0" ajv "^6.10.0" chalk "^2.1.0" cross-spawn "^6.0.5" debug "^4.0.1" doctrine "^3.0.0" eslint-scope "^5.0.0" eslint-utils "^1.4.3" eslint-visitor-keys "^1.1.0" espree "^6.1.2" esquery "^1.0.1" esutils "^2.0.2" file-entry-cache "^5.0.1" functional-red-black-tree "^1.0.1" glob-parent "^5.0.0" globals "^12.1.0" ignore "^4.0.6" import-fresh "^3.0.0" imurmurhash "^0.1.4" inquirer "^7.0.0" is-glob "^4.0.0" js-yaml "^3.13.1" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.3.0" lodash "^4.17.14" minimatch "^3.0.4" mkdirp "^0.5.1" natural-compare "^1.4.0" optionator "^0.8.3" progress "^2.0.0" regexpp "^2.0.1" semver "^6.1.2" strip-ansi "^5.2.0" strip-json-comments "^3.0.1" table "^5.2.3" text-table "^0.2.0" v8-compile-cache "^2.0.3" espree@^6.1.2: version "6.2.1" resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw== dependencies: acorn "^7.1.1" acorn-jsx "^5.2.0" eslint-visitor-keys "^1.1.0" esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.0.1: version "1.2.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.2.0.tgz#a010a519c0288f2530b3404124bfb5f02e9797fe" integrity sha512-weltsSqdeWIX9G2qQZz7KlTRJdkkOCTPgLYJUz1Hacf48R4YOwGPHO3+ORfWedqJKbq5WQmsgK90n+pFLIKt/Q== dependencies: estraverse "^5.0.0" esrecurse@^4.1.0: version "4.2.1" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== dependencies: estraverse "^4.1.0" estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estraverse@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.0.0.tgz#ac81750b482c11cca26e4b07e83ed8f75fbcdc22" integrity sha512-j3acdrMzqrxmJTNj5dbr1YbjacrYgAxVMeF0gK16E3j494mOe7xygM/ZLIguEQ0ETwAg2hlJCtHRGav+y0Ny5A== esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== exec-sh@^0.3.2: version "0.3.4" resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5" integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A== execa@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== dependencies: cross-spawn "^6.0.0" get-stream "^4.0.0" is-stream "^1.1.0" npm-run-path "^2.0.0" p-finally "^1.0.0" signal-exit "^3.0.0" strip-eof "^1.0.0" execa@^3.2.0: version "3.4.0" resolved "https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89" integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g== dependencies: cross-spawn "^7.0.0" get-stream "^5.0.0" human-signals "^1.1.1" is-stream "^2.0.0" merge-stream "^2.0.0" npm-run-path "^4.0.0" onetime "^5.1.0" p-finally "^2.0.0" signal-exit "^3.0.2" strip-final-newline "^2.0.0" exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= dependencies: debug "^2.3.3" define-property "^0.2.5" extend-shallow "^2.0.1" posix-character-classes "^0.1.0" regex-not "^1.0.0" snapdragon "^0.8.1" to-regex "^3.0.1" expect@^25.5.0: version "25.5.0" resolved "https://registry.yarnpkg.com/expect/-/expect-25.5.0.tgz#f07f848712a2813bb59167da3fb828ca21f58bba" integrity sha512-w7KAXo0+6qqZZhovCaBVPSIqQp7/UTcx4M9uKt2m6pd2VB1voyC8JizLRqeEqud3AAVP02g+hbErDu5gu64tlA== dependencies: "@jest/types" "^25.5.0" ansi-styles "^4.0.0" jest-get-type "^25.2.6" jest-matcher-utils "^25.5.0" jest-message-util "^25.5.0" jest-regex-util "^25.2.6" extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= dependencies: is-extendable "^0.1.0" extend-shallow@^3.0.0, extend-shallow@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= dependencies: assign-symbols "^1.0.0" is-extendable "^1.0.1" extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== external-editor@^3.0.3: version "3.1.0" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== dependencies: chardet "^0.7.0" iconv-lite "^0.4.24" tmp "^0.0.33" extglob@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== dependencies: array-unique "^0.3.2" define-property "^1.0.0" expand-brackets "^2.1.4" extend-shallow "^2.0.1" fragment-cache "^0.2.1" regex-not "^1.0.0" snapdragon "^0.8.1" to-regex "^3.0.1" extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= extsprintf@^1.2.0: version "1.4.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= fast-deep-equal@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== fast-diff@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= fb-watchman@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== dependencies: bser "2.1.1" figgy-pudding@^3.5.1: version "3.5.2" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== figures@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== dependencies: escape-string-regexp "^1.0.5" file-entry-cache@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== dependencies: flat-cache "^2.0.1" fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= dependencies: extend-shallow "^2.0.1" is-number "^3.0.0" repeat-string "^1.6.1" to-regex-range "^2.1.0" fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: to-regex-range "^5.0.1" find-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== dependencies: locate-path "^3.0.0" find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== dependencies: locate-path "^5.0.0" path-exists "^4.0.0" flat-cache@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== dependencies: flatted "^2.0.0" rimraf "2.6.3" write "1.0.3" flatted@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= form-data@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== dependencies: asynckit "^0.4.0" combined-stream "^1.0.6" mime-types "^2.1.12" fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= dependencies: map-cache "^0.2.2" fs-minipass@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== dependencies: minipass "^3.0.0" fs-write-stream-atomic@^1.0.8: version "1.0.10" resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= dependencies: graceful-fs "^4.1.2" iferr "^0.1.5" imurmurhash "^0.1.4" readable-stream "1 || 2" fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= fsevents@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" integrity sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA== functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= gensync@^1.0.0-beta.1: version "1.0.0-beta.1" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== get-caller-file@^2.0.1: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== get-stdin@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== get-stream@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== dependencies: pump "^3.0.0" get-stream@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9" integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw== dependencies: pump "^3.0.0" get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= dependencies: assert-plus "^1.0.0" glob-parent@^5.0.0: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" minimatch "^3.0.4" once "^1.3.0" path-is-absolute "^1.0.0" globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^12.1.0: version "12.4.0" resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== dependencies: type-fest "^0.8.1" graceful-fs@^4.1.2, graceful-fs@^4.2.2: version "4.2.3" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== graceful-fs@^4.2.4: version "4.2.4" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= har-validator@~5.1.3: version "5.1.3" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== dependencies: ajv "^6.5.5" har-schema "^2.0.0" has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= has-flag@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= dependencies: get-value "^2.0.3" has-values "^0.1.4" isobject "^2.0.0" has-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= dependencies: get-value "^2.0.6" has-values "^1.0.0" isobject "^3.0.0" has-values@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= has-values@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= dependencies: is-number "^3.0.0" kind-of "^4.0.0" highlight.js@^9.6.0: version "9.18.5" resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.18.5.tgz#d18a359867f378c138d6819edfc2a8acd5f29825" integrity sha512-a5bFyofd/BHCX52/8i8uJkjr9DYwXIPnM/plwI6W7ezItLGqzt7X2G2nXuYSfsIJdkwwj/g9DG1LkcGJI/dDoA== hosted-git-info@^2.1.4: version "2.8.9" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== html-encoding-sniffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw== dependencies: whatwg-encoding "^1.0.1" html-escaper@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== http-cache-semantics@^4.0.3: version "4.1.0" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== http-proxy-agent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-3.0.0.tgz#598f42dc815949a11e2c6dbfdf24cd8a4c165327" integrity sha512-uGuJaBWQWDQCJI5ip0d/VTYZW0nRrlLWXA4A7P1jrsa+f77rW2yXz315oBt6zGCF6l8C2tlMxY7ffULCj+5FhA== dependencies: agent-base "5" debug "4" http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= dependencies: assert-plus "^1.0.0" jsprim "^1.2.2" sshpk "^1.7.0" https-proxy-agent@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz#702b71fb5520a132a66de1f67541d9e62154d82b" integrity sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg== dependencies: agent-base "5" debug "4" human-signals@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== humanize-ms@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= dependencies: ms "^2.0.0" iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@~0.4.13: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" iferr@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== import-fresh@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= dependencies: caller-path "^2.0.0" resolve-from "^3.0.0" import-fresh@^3.0.0: version "3.2.1" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== dependencies: parent-module "^1.0.0" resolve-from "^4.0.0" import-local@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== dependencies: pkg-dir "^4.2.0" resolve-cwd "^3.0.0" imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= indent-string@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== infer-owner@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= dependencies: once "^1.3.0" wrappy "1" inherits@2, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== inquirer@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.1.0.tgz#1298a01859883e17c7264b82870ae1034f92dd29" integrity sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg== dependencies: ansi-escapes "^4.2.1" chalk "^3.0.0" cli-cursor "^3.1.0" cli-width "^2.0.0" external-editor "^3.0.3" figures "^3.0.0" lodash "^4.17.15" mute-stream "0.0.8" run-async "^2.4.0" rxjs "^6.5.3" string-width "^4.1.0" strip-ansi "^6.0.0" through "^2.3.6" ip-regex@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= ip@1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= dependencies: kind-of "^3.0.2" is-accessor-descriptor@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== dependencies: kind-of "^6.0.0" is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== is-ci@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== dependencies: ci-info "^2.0.0" is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= dependencies: kind-of "^3.0.2" is-data-descriptor@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== dependencies: kind-of "^6.0.0" is-descriptor@^0.1.0: version "0.1.6" resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== dependencies: is-accessor-descriptor "^0.1.6" is-data-descriptor "^0.1.4" kind-of "^5.0.0" is-descriptor@^1.0.0, is-descriptor@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== dependencies: is-accessor-descriptor "^1.0.0" is-data-descriptor "^1.0.0" kind-of "^6.0.2" is-directory@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= is-extendable@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== dependencies: is-plain-object "^2.0.4" is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-generator-fn@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== is-glob@^4.0.0, is-glob@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== dependencies: is-extglob "^2.1.1" is-lambda@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" integrity sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU= is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= dependencies: kind-of "^3.0.2" is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: isobject "^3.0.1" is-promise@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= is-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== is-wsl@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.1.1.tgz#4a1c152d429df3d441669498e2486d3596ebaf1d" integrity sha512-umZHcSrwlDHo2TGMXv0DZ8dIUGunZ2Iv68YZnrmCiBPkZ4aaOhtv7pXJKeki9k3qJ3RJr0cDyitcl5wEH3AYog== isarray@1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= dependencies: isarray "1.0.0" isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= istanbul-lib-coverage@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== istanbul-lib-instrument@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.1.tgz#61f13ac2c96cfefb076fe7131156cc05907874e6" integrity sha512-imIchxnodll7pvQBYOqUu88EufLCU56LMeFPZZM/fJZ1irYcYdqroaV+ACK1Ila8ls09iEYArp+nqyC6lW1Vfg== dependencies: "@babel/core" "^7.7.5" "@babel/parser" "^7.7.5" "@babel/template" "^7.7.4" "@babel/traverse" "^7.7.4" "@istanbuljs/schema" "^0.1.2" istanbul-lib-coverage "^3.0.0" semver "^6.3.0" istanbul-lib-report@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== dependencies: istanbul-lib-coverage "^3.0.0" make-dir "^3.0.0" supports-color "^7.1.0" istanbul-lib-source-maps@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== dependencies: debug "^4.1.1" istanbul-lib-coverage "^3.0.0" source-map "^0.6.1" istanbul-reports@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b" integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" jest-changed-files@^25.5.0: version "25.5.0" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-25.5.0.tgz#141cc23567ceb3f534526f8614ba39421383634c" integrity sha512-EOw9QEqapsDT7mKF162m8HFzRPbmP8qJQny6ldVOdOVBz3ACgPm/1nAn5fPQ/NDaYhX/AHkrGwwkCncpAVSXcw== dependencies: "@jest/types" "^25.5.0" execa "^3.2.0" throat "^5.0.0" jest-cli@^25.5.4: version "25.5.4" resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-25.5.4.tgz#b9f1a84d1301a92c5c217684cb79840831db9f0d" integrity sha512-rG8uJkIiOUpnREh1768/N3n27Cm+xPFkSNFO91tgg+8o2rXeVLStz+vkXkGr4UtzH6t1SNbjwoiswd7p4AhHTw== dependencies: "@jest/core" "^25.5.4" "@jest/test-result" "^25.5.0" "@jest/types" "^25.5.0" chalk "^3.0.0" exit "^0.1.2" graceful-fs "^4.2.4" import-local "^3.0.2" is-ci "^2.0.0" jest-config "^25.5.4" jest-util "^25.5.0" jest-validate "^25.5.0" prompts "^2.0.1" realpath-native "^2.0.0" yargs "^15.3.1" jest-config@^25.5.4: version "25.5.4" resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-25.5.4.tgz#38e2057b3f976ef7309b2b2c8dcd2a708a67f02c" integrity sha512-SZwR91SwcdK6bz7Gco8qL7YY2sx8tFJYzvg216DLihTWf+LKY/DoJXpM9nTzYakSyfblbqeU48p/p7Jzy05Atg== dependencies: "@babel/core" "^7.1.0" "@jest/test-sequencer" "^25.5.4" "@jest/types" "^25.5.0" babel-jest "^25.5.1" chalk "^3.0.0" deepmerge "^4.2.2" glob "^7.1.1" graceful-fs "^4.2.4" jest-environment-jsdom "^25.5.0" jest-environment-node "^25.5.0" jest-get-type "^25.2.6" jest-jasmine2 "^25.5.4" jest-regex-util "^25.2.6" jest-resolve "^25.5.1" jest-util "^25.5.0" jest-validate "^25.5.0" micromatch "^4.0.2" pretty-format "^25.5.0" realpath-native "^2.0.0" jest-diff@^25.5.0: version "25.5.0" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.5.0.tgz#1dd26ed64f96667c068cef026b677dfa01afcfa9" integrity sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A== dependencies: chalk "^3.0.0" diff-sequences "^25.2.6" jest-get-type "^25.2.6" pretty-format "^25.5.0" jest-docblock@^25.3.0: version "25.3.0" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-25.3.0.tgz#8b777a27e3477cd77a168c05290c471a575623ef" integrity sha512-aktF0kCar8+zxRHxQZwxMy70stc9R1mOmrLsT5VO3pIT0uzGRSDAXxSlz4NqQWpuLjPpuMhPRl7H+5FRsvIQAg== dependencies: detect-newline "^3.0.0" jest-each@^25.5.0: version "25.5.0" resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-25.5.0.tgz#0c3c2797e8225cb7bec7e4d249dcd96b934be516" integrity sha512-QBogUxna3D8vtiItvn54xXde7+vuzqRrEeaw8r1s+1TG9eZLVJE5ZkKoSUlqFwRjnlaA4hyKGiu9OlkFIuKnjA== dependencies: "@jest/types" "^25.5.0" chalk "^3.0.0" jest-get-type "^25.2.6" jest-util "^25.5.0" pretty-format "^25.5.0" jest-environment-jsdom@^25.5.0: version "25.5.0" resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-25.5.0.tgz#dcbe4da2ea997707997040ecf6e2560aec4e9834" integrity sha512-7Jr02ydaq4jaWMZLY+Skn8wL5nVIYpWvmeatOHL3tOcV3Zw8sjnPpx+ZdeBfc457p8jCR9J6YCc+Lga0oIy62A== dependencies: "@jest/environment" "^25.5.0" "@jest/fake-timers" "^25.5.0" "@jest/types" "^25.5.0" jest-mock "^25.5.0" jest-util "^25.5.0" jsdom "^15.2.1" jest-environment-node@^25.5.0: version "25.5.0" resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-25.5.0.tgz#0f55270d94804902988e64adca37c6ce0f7d07a1" integrity sha512-iuxK6rQR2En9EID+2k+IBs5fCFd919gVVK5BeND82fYeLWPqvRcFNPKu9+gxTwfB5XwBGBvZ0HFQa+cHtIoslA== dependencies: "@jest/environment" "^25.5.0" "@jest/fake-timers" "^25.5.0" "@jest/types" "^25.5.0" jest-mock "^25.5.0" jest-util "^25.5.0" semver "^6.3.0" jest-get-type@^25.2.6: version "25.2.6" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.2.6.tgz#0b0a32fab8908b44d508be81681487dbabb8d877" integrity sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig== jest-haste-map@^25.5.1: version "25.5.1" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-25.5.1.tgz#1df10f716c1d94e60a1ebf7798c9fb3da2620943" integrity sha512-dddgh9UZjV7SCDQUrQ+5t9yy8iEgKc1AKqZR9YDww8xsVOtzPQSMVLDChc21+g29oTRexb9/B0bIlZL+sWmvAQ== dependencies: "@jest/types" "^25.5.0" "@types/graceful-fs" "^4.1.2" anymatch "^3.0.3" fb-watchman "^2.0.0" graceful-fs "^4.2.4" jest-serializer "^25.5.0" jest-util "^25.5.0" jest-worker "^25.5.0" micromatch "^4.0.2" sane "^4.0.3" walker "^1.0.7" which "^2.0.2" optionalDependencies: fsevents "^2.1.2" jest-jasmine2@^25.5.4: version "25.5.4" resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-25.5.4.tgz#66ca8b328fb1a3c5364816f8958f6970a8526968" integrity sha512-9acbWEfbmS8UpdcfqnDO+uBUgKa/9hcRh983IHdM+pKmJPL77G0sWAAK0V0kr5LK3a8cSBfkFSoncXwQlRZfkQ== dependencies: "@babel/traverse" "^7.1.0" "@jest/environment" "^25.5.0" "@jest/source-map" "^25.5.0" "@jest/test-result" "^25.5.0" "@jest/types" "^25.5.0" chalk "^3.0.0" co "^4.6.0" expect "^25.5.0" is-generator-fn "^2.0.0" jest-each "^25.5.0" jest-matcher-utils "^25.5.0" jest-message-util "^25.5.0" jest-runtime "^25.5.4" jest-snapshot "^25.5.1" jest-util "^25.5.0" pretty-format "^25.5.0" throat "^5.0.0" jest-leak-detector@^25.5.0: version "25.5.0" resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-25.5.0.tgz#2291c6294b0ce404241bb56fe60e2d0c3e34f0bb" integrity sha512-rV7JdLsanS8OkdDpZtgBf61L5xZ4NnYLBq72r6ldxahJWWczZjXawRsoHyXzibM5ed7C2QRjpp6ypgwGdKyoVA== dependencies: jest-get-type "^25.2.6" pretty-format "^25.5.0" jest-matcher-utils@^25.5.0: version "25.5.0" resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-25.5.0.tgz#fbc98a12d730e5d2453d7f1ed4a4d948e34b7867" integrity sha512-VWI269+9JS5cpndnpCwm7dy7JtGQT30UHfrnM3mXl22gHGt/b7NkjBqXfbhZ8V4B7ANUsjK18PlSBmG0YH7gjw== dependencies: chalk "^3.0.0" jest-diff "^25.5.0" jest-get-type "^25.2.6" pretty-format "^25.5.0" jest-message-util@^25.5.0: version "25.5.0" resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-25.5.0.tgz#ea11d93204cc7ae97456e1d8716251185b8880ea" integrity sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA== dependencies: "@babel/code-frame" "^7.0.0" "@jest/types" "^25.5.0" "@types/stack-utils" "^1.0.1" chalk "^3.0.0" graceful-fs "^4.2.4" micromatch "^4.0.2" slash "^3.0.0" stack-utils "^1.0.1" jest-mock@^25.5.0: version "25.5.0" resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-25.5.0.tgz#a91a54dabd14e37ecd61665d6b6e06360a55387a" integrity sha512-eXWuTV8mKzp/ovHc5+3USJMYsTBhyQ+5A1Mak35dey/RG8GlM4YWVylZuGgVXinaW6tpvk/RSecmF37FKUlpXA== dependencies: "@jest/types" "^25.5.0" jest-pnp-resolver@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz#ecdae604c077a7fbc70defb6d517c3c1c898923a" integrity sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ== jest-regex-util@^25.2.6: version "25.2.6" resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-25.2.6.tgz#d847d38ba15d2118d3b06390056028d0f2fd3964" integrity sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw== jest-resolve-dependencies@^25.5.4: version "25.5.4" resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-25.5.4.tgz#85501f53957c8e3be446e863a74777b5a17397a7" integrity sha512-yFmbPd+DAQjJQg88HveObcGBA32nqNZ02fjYmtL16t1xw9bAttSn5UGRRhzMHIQbsep7znWvAvnD4kDqOFM0Uw== dependencies: "@jest/types" "^25.5.0" jest-regex-util "^25.2.6" jest-snapshot "^25.5.1" jest-resolve@^25.5.1: version "25.5.1" resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-25.5.1.tgz#0e6fbcfa7c26d2a5fe8f456088dc332a79266829" integrity sha512-Hc09hYch5aWdtejsUZhA+vSzcotf7fajSlPA6EZPE1RmPBAD39XtJhvHWFStid58iit4IPDLI/Da4cwdDmAHiQ== dependencies: "@jest/types" "^25.5.0" browser-resolve "^1.11.3" chalk "^3.0.0" graceful-fs "^4.2.4" jest-pnp-resolver "^1.2.1" read-pkg-up "^7.0.1" realpath-native "^2.0.0" resolve "^1.17.0" slash "^3.0.0" jest-runner-eslint@^0.7.0: version "0.7.6" resolved "https://registry.yarnpkg.com/jest-runner-eslint/-/jest-runner-eslint-0.7.6.tgz#70df865939e03f4c9941a49826068e02c17c9906" integrity sha512-J3oonxiKlo8rY/pI5oH0pMkt7sAFQxx9qqBMFDmx6vsFpWKPJFVS6+qx2JX0uR482KaE6+12tDfMe/4wtdIBzQ== dependencies: chalk "^2.4.1" cosmiconfig "^5.0.0" create-jest-runner "^0.5.3" eslint "^4.0.0 || ^5.0.0 || ^6.0.0" jest-runner@^25.5.4: version "25.5.4" resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-25.5.4.tgz#ffec5df3875da5f5c878ae6d0a17b8e4ecd7c71d" integrity sha512-V/2R7fKZo6blP8E9BL9vJ8aTU4TH2beuqGNxHbxi6t14XzTb+x90B3FRgdvuHm41GY8ch4xxvf0ATH4hdpjTqg== dependencies: "@jest/console" "^25.5.0" "@jest/environment" "^25.5.0" "@jest/test-result" "^25.5.0" "@jest/types" "^25.5.0" chalk "^3.0.0" exit "^0.1.2" graceful-fs "^4.2.4" jest-config "^25.5.4" jest-docblock "^25.3.0" jest-haste-map "^25.5.1" jest-jasmine2 "^25.5.4" jest-leak-detector "^25.5.0" jest-message-util "^25.5.0" jest-resolve "^25.5.1" jest-runtime "^25.5.4" jest-util "^25.5.0" jest-worker "^25.5.0" source-map-support "^0.5.6" throat "^5.0.0" jest-runtime@^25.5.4: version "25.5.4" resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-25.5.4.tgz#dc981fe2cb2137abcd319e74ccae7f7eeffbfaab" integrity sha512-RWTt8LeWh3GvjYtASH2eezkc8AehVoWKK20udV6n3/gC87wlTbE1kIA+opCvNWyyPeBs6ptYsc6nyHUb1GlUVQ== dependencies: "@jest/console" "^25.5.0" "@jest/environment" "^25.5.0" "@jest/globals" "^25.5.2" "@jest/source-map" "^25.5.0" "@jest/test-result" "^25.5.0" "@jest/transform" "^25.5.1" "@jest/types" "^25.5.0" "@types/yargs" "^15.0.0" chalk "^3.0.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" glob "^7.1.3" graceful-fs "^4.2.4" jest-config "^25.5.4" jest-haste-map "^25.5.1" jest-message-util "^25.5.0" jest-mock "^25.5.0" jest-regex-util "^25.2.6" jest-resolve "^25.5.1" jest-snapshot "^25.5.1" jest-util "^25.5.0" jest-validate "^25.5.0" realpath-native "^2.0.0" slash "^3.0.0" strip-bom "^4.0.0" yargs "^15.3.1" jest-serializer@^25.5.0: version "25.5.0" resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-25.5.0.tgz#a993f484e769b4ed54e70e0efdb74007f503072b" integrity sha512-LxD8fY1lByomEPflwur9o4e2a5twSQ7TaVNLlFUuToIdoJuBt8tzHfCsZ42Ok6LkKXWzFWf3AGmheuLAA7LcCA== dependencies: graceful-fs "^4.2.4" jest-snapshot@^25.5.1: version "25.5.1" resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-25.5.1.tgz#1a2a576491f9961eb8d00c2e5fd479bc28e5ff7f" integrity sha512-C02JE1TUe64p2v1auUJ2ze5vcuv32tkv9PyhEb318e8XOKF7MOyXdJ7kdjbvrp3ChPLU2usI7Rjxs97Dj5P0uQ== dependencies: "@babel/types" "^7.0.0" "@jest/types" "^25.5.0" "@types/prettier" "^1.19.0" chalk "^3.0.0" expect "^25.5.0" graceful-fs "^4.2.4" jest-diff "^25.5.0" jest-get-type "^25.2.6" jest-matcher-utils "^25.5.0" jest-message-util "^25.5.0" jest-resolve "^25.5.1" make-dir "^3.0.0" natural-compare "^1.4.0" pretty-format "^25.5.0" semver "^6.3.0" jest-util@^25.5.0: version "25.5.0" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-25.5.0.tgz#31c63b5d6e901274d264a4fec849230aa3fa35b0" integrity sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA== dependencies: "@jest/types" "^25.5.0" chalk "^3.0.0" graceful-fs "^4.2.4" is-ci "^2.0.0" make-dir "^3.0.0" jest-validate@^25.5.0: version "25.5.0" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-25.5.0.tgz#fb4c93f332c2e4cf70151a628e58a35e459a413a" integrity sha512-okUFKqhZIpo3jDdtUXUZ2LxGUZJIlfdYBvZb1aczzxrlyMlqdnnws9MOxezoLGhSaFc2XYaHNReNQfj5zPIWyQ== dependencies: "@jest/types" "^25.5.0" camelcase "^5.3.1" chalk "^3.0.0" jest-get-type "^25.2.6" leven "^3.1.0" pretty-format "^25.5.0" jest-watcher@^25.5.0: version "25.5.0" resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-25.5.0.tgz#d6110d101df98badebe435003956fd4a465e8456" integrity sha512-XrSfJnVASEl+5+bb51V0Q7WQx65dTSk7NL4yDdVjPnRNpM0hG+ncFmDYJo9O8jaSRcAitVbuVawyXCRoxGrT5Q== dependencies: "@jest/test-result" "^25.5.0" "@jest/types" "^25.5.0" ansi-escapes "^4.2.1" chalk "^3.0.0" jest-util "^25.5.0" string-length "^3.1.0" jest-worker@^24.0.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== dependencies: merge-stream "^2.0.0" supports-color "^6.1.0" jest-worker@^25.5.0: version "25.5.0" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.5.0.tgz#2611d071b79cea0f43ee57a3d118593ac1547db1" integrity sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw== dependencies: merge-stream "^2.0.0" supports-color "^7.0.0" jest@^25.2.4: version "25.5.4" resolved "https://registry.yarnpkg.com/jest/-/jest-25.5.4.tgz#f21107b6489cfe32b076ce2adcadee3587acb9db" integrity sha512-hHFJROBTqZahnO+X+PMtT6G2/ztqAZJveGqz//FnWWHurizkD05PQGzRZOhF3XP6z7SJmL+5tCfW8qV06JypwQ== dependencies: "@jest/core" "^25.5.4" import-local "^3.0.2" jest-cli "^25.5.4" js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^3.13.1: version "3.13.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== dependencies: argparse "^1.0.7" esprima "^4.0.0" jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= jsdom@^15.2.1: version "15.2.1" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-15.2.1.tgz#d2feb1aef7183f86be521b8c6833ff5296d07ec5" integrity sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g== dependencies: abab "^2.0.0" acorn "^7.1.0" acorn-globals "^4.3.2" array-equal "^1.0.0" cssom "^0.4.1" cssstyle "^2.0.0" data-urls "^1.1.0" domexception "^1.0.1" escodegen "^1.11.1" html-encoding-sniffer "^1.0.2" nwsapi "^2.2.0" parse5 "5.1.0" pn "^1.1.0" request "^2.88.0" request-promise-native "^1.0.7" saxes "^3.1.9" symbol-tree "^3.2.2" tough-cookie "^3.0.1" w3c-hr-time "^1.0.1" w3c-xmlserializer "^1.1.2" webidl-conversions "^4.0.2" whatwg-encoding "^1.0.5" whatwg-mimetype "^2.3.0" whatwg-url "^7.0.0" ws "^7.0.0" xml-name-validator "^3.0.0" jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== json-parse-better-errors@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= json5@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.2.tgz#43ef1f0af9835dd624751a6b7fa48874fb2d608e" integrity sha512-MoUOQ4WdiN3yxhm7NEVJSJrieAo5hNSLQ5sj05OTRHPL9HOBy8u4Bu88jsC1jvqAdN+E1bJmsUcZH+1HQxliqQ== dependencies: minimist "^1.2.5" jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= dependencies: assert-plus "1.0.0" extsprintf "1.3.0" json-schema "0.2.3" verror "1.10.0" kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= dependencies: is-buffer "^1.1.5" kind-of@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= dependencies: is-buffer "^1.1.5" kind-of@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== kind-of@^6.0.0, kind-of@^6.0.2: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== kleur@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== lerna-changelog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/lerna-changelog/-/lerna-changelog-1.0.1.tgz#53090ab7f047730ec88d32087762164626269d3a" integrity sha512-E7ewsfQknBmQcUspCqd5b8Hbbp5SX768y6vEiIdXXui9pPhZS1WlrKtiAUPs0CeGd8Pv4gtIC/h3wSWIZuvqaA== dependencies: chalk "^2.4.1" cli-highlight "^2.1.4" execa "^1.0.0" make-fetch-happen "^7.1.1" normalize-git-url "^3.0.2" p-map "^3.0.0" progress "^2.0.0" yargs "^13.0.0" leven@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== levn@^0.3.0, levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= dependencies: prelude-ls "~1.1.2" type-check "~0.3.2" lines-and-columns@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= locate-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== dependencies: p-locate "^3.0.0" path-exists "^3.0.0" locate-path@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== dependencies: p-locate "^4.1.0" lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== lolex@^5.0.0: version "5.1.2" resolved "https://registry.yarnpkg.com/lolex/-/lolex-5.1.2.tgz#953694d098ce7c07bc5ed6d0e42bc6c0c6d5a367" integrity sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A== dependencies: "@sinonjs/commons" "^1.7.0" lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== dependencies: yallist "^3.0.2" make-dir@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.2.tgz#04a1acbf22221e1d6ef43559f43e05a90dbb4392" integrity sha512-rYKABKutXa6vXTXhoV18cBE7PaewPXHe/Bdq4v+ZLMhxbWApkFFplT0LcbMW+6BbjnQXzZ/sAvSE/JdguApG5w== dependencies: semver "^6.0.0" make-fetch-happen@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-7.1.1.tgz#89ac8112eaa9d4361541deb591329e9238a531b1" integrity sha512-7fNjiOXNZhNGQzG5P15nU97aZQtzPU2GVgVd7pnqnl5gnpLzMAD8bAe5YG4iW2s0PTqaZy9xGv4Wfqe872kRNQ== dependencies: agentkeepalive "^4.1.0" cacache "^14.0.0" http-cache-semantics "^4.0.3" http-proxy-agent "^3.0.0" https-proxy-agent "^4.0.0" is-lambda "^1.0.1" lru-cache "^5.1.1" minipass "^3.0.0" minipass-collect "^1.0.2" minipass-fetch "^1.1.2" minipass-flush "^1.0.5" minipass-pipeline "^1.2.2" promise-retry "^1.1.1" socks-proxy-agent "^4.0.0" ssri "^7.0.1" makeerror@1.0.x: version "1.0.11" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= dependencies: tmpl "1.0.x" map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= dependencies: object-visit "^1.0.0" merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== dependencies: arr-diff "^4.0.0" array-unique "^0.3.2" braces "^2.3.1" define-property "^2.0.2" extend-shallow "^3.0.2" extglob "^2.0.4" fragment-cache "^0.2.1" kind-of "^6.0.2" nanomatch "^1.2.9" object.pick "^1.3.0" regex-not "^1.0.0" snapdragon "^0.8.1" to-regex "^3.0.2" micromatch@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== dependencies: braces "^3.0.1" picomatch "^2.0.5" mime-db@1.43.0: version "1.43.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ== mime-types@^2.1.12, mime-types@~2.1.19: version "2.1.26" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ== dependencies: mime-db "1.43.0" mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== minipass-collect@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== dependencies: minipass "^3.0.0" minipass-fetch@^1.1.2: version "1.2.1" resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.2.1.tgz#1b97ecb559be56b09812d45b2e9509f1f59ece2f" integrity sha512-ssHt0dkljEDaKmTgQ04DQgx2ag6G2gMPxA5hpcsoeTbfDgRf2fC2gNSRc6kISjD7ckCpHwwQvXxuTBK8402fXg== dependencies: minipass "^3.1.0" minipass-pipeline "^1.2.2" minipass-sized "^1.0.3" minizlib "^2.0.0" optionalDependencies: encoding "^0.1.12" minipass-flush@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== dependencies: minipass "^3.0.0" minipass-pipeline@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.2.tgz#3dcb6bb4a546e32969c7ad710f2c79a86abba93a" integrity sha512-3JS5A2DKhD2g0Gg8x3yamO0pj7YeKGwVlDS90pF++kxptwx/F+B//roxf9SqYil5tQo65bijy+dAuAFZmYOouA== dependencies: minipass "^3.0.0" minipass-sized@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== dependencies: minipass "^3.0.0" minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.1.tgz#7607ce778472a185ad6d89082aa2070f79cedcd5" integrity sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w== dependencies: yallist "^4.0.0" minizlib@^2.0.0, minizlib@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.0.tgz#fd52c645301ef09a63a2c209697c294c6ce02cf3" integrity sha512-EzTZN/fjSvifSX0SlqUERCN39o6T40AMarPbv0MrarSFtIITCBh7bi+dU8nxGFHuqs9jdIAeoYoKuQAAASsPPA== dependencies: minipass "^3.0.0" yallist "^4.0.0" mixin-deep@^1.2.0: version "1.3.2" resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== dependencies: for-in "^1.0.2" is-extendable "^1.0.1" mkdirp@^0.5.1: version "0.5.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.4.tgz#fd01504a6797ec5c9be81ff43d204961ed64a512" integrity sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw== dependencies: minimist "^1.2.5" mkdirp@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.3.tgz#4cf2e30ad45959dddea53ad97d518b6c8205e1ea" integrity sha512-6uCP4Qc0sWsgMLy1EOqqS/3rjDHOEnsStVr/4vtAIK2Y5i2kA7lFFejYrpIyiN9w0pYf4ckeCYT9f1r1P9KX5g== move-concurrently@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= dependencies: aproba "^1.1.1" copy-concurrently "^1.0.0" fs-write-stream-atomic "^1.0.8" mkdirp "^0.5.1" rimraf "^2.5.4" run-queue "^1.0.3" ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= ms@^2.0.0, ms@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== mute-stream@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== mz@^2.4.0: version "2.7.0" resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== dependencies: any-promise "^1.0.0" object-assign "^4.0.1" thenify-all "^1.0.0" nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== dependencies: arr-diff "^4.0.0" array-unique "^0.3.2" define-property "^2.0.2" extend-shallow "^3.0.2" fragment-cache "^0.2.1" is-windows "^1.0.2" kind-of "^6.0.2" object.pick "^1.3.0" regex-not "^1.0.0" snapdragon "^0.8.1" to-regex "^3.0.1" natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= node-modules-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= node-notifier@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-6.0.0.tgz#cea319e06baa16deec8ce5cd7f133c4a46b68e12" integrity sha512-SVfQ/wMw+DesunOm5cKqr6yDcvUTDl/yc97ybGHMrteNEY6oekXpNpS3lZwgLlwz0FLgHoiW28ZpmBHUDg37cw== dependencies: growly "^1.3.0" is-wsl "^2.1.1" semver "^6.3.0" shellwords "^0.1.1" which "^1.3.1" normalize-git-url@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/normalize-git-url/-/normalize-git-url-3.0.2.tgz#8e5f14be0bdaedb73e07200310aa416c27350fc4" integrity sha1-jl8Uvgva7bc+ByADEKpBbCc1D8Q= normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== dependencies: hosted-git-info "^2.1.4" resolve "^1.10.0" semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= dependencies: remove-trailing-separator "^1.0.1" normalize-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= dependencies: path-key "^2.0.0" npm-run-path@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: path-key "^3.0.0" nwsapi@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== oauth-sign@~0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== object-assign@^4.0.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= object-copy@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= dependencies: copy-descriptor "^0.1.0" define-property "^0.2.5" kind-of "^3.0.3" object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= dependencies: isobject "^3.0.0" object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= dependencies: isobject "^3.0.1" once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= dependencies: wrappy "1" onetime@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== dependencies: mimic-fn "^2.1.0" optionator@^0.8.1, optionator@^0.8.3: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== dependencies: deep-is "~0.1.3" fast-levenshtein "~2.0.6" levn "~0.3.0" prelude-ls "~1.1.2" type-check "~0.3.2" word-wrap "~1.2.3" os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= p-each-series@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.1.0.tgz#961c8dd3f195ea96c747e636b262b800a6b1af48" integrity sha512-ZuRs1miPT4HrjFa+9fRfOFXxGJfORgelKV9f9nNOWw2gl6gVsRaVDOQP0+MI0G0wGKns1Yacsu0GjOFbTK0JFQ== p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= p-finally@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== p-limit@^2.0.0, p-limit@^2.2.0: version "2.2.2" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.2.tgz#61279b67721f5287aa1c13a9a7fbbc48c9291b1e" integrity sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ== dependencies: p-try "^2.0.0" p-locate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== dependencies: p-limit "^2.0.0" p-locate@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== dependencies: p-limit "^2.2.0" p-map@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== dependencies: aggregate-error "^3.0.0" p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: callsites "^3.0.0" parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= dependencies: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" parse-json@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.0.0.tgz#73e5114c986d143efa3712d4ea24db9a4266f60f" integrity sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw== dependencies: "@babel/code-frame" "^7.0.0" error-ex "^1.3.1" json-parse-better-errors "^1.0.1" lines-and-columns "^1.1.6" parse5-htmlparser2-tree-adapter@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-5.1.1.tgz#e8c743d4e92194d5293ecde2b08be31e67461cbc" integrity sha512-CF+TKjXqoqyDwHqBhFQ+3l5t83xYi6fVT1tQNg+Ye0JRLnTxWvIroCjEp1A0k4lneHNBGnICUf0cfYVYGEazqw== dependencies: parse5 "^5.1.1" parse5@5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ== parse5@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= path-exists@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= picomatch@^2.0.4, picomatch@^2.0.5: version "2.2.2" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== pirates@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== dependencies: node-modules-regexp "^1.0.0" pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: find-up "^4.0.0" pn@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= prettier-linter-helpers@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== dependencies: fast-diff "^1.1.2" prettier@2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.2.tgz#ef280a05ec253712e486233db5c6f23441e7342d" integrity sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ== pretty-format@^25.5.0: version "25.5.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a" integrity sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ== dependencies: "@jest/types" "^25.5.0" ansi-regex "^5.0.0" ansi-styles "^4.0.0" react-is "^16.12.0" process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== progress@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= promise-retry@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" integrity sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0= dependencies: err-code "^1.0.0" retry "^0.10.0" prompts@^2.0.1: version "2.3.2" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.2.tgz#480572d89ecf39566d2bd3fe2c9fccb7c4c0b068" integrity sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA== dependencies: kleur "^3.0.3" sisteransi "^1.0.4" psl@^1.1.28: version "1.8.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== pump@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== dependencies: end-of-stream "^1.1.0" once "^1.3.1" punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== qs@~6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== react-is@^16.12.0: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== read-pkg-up@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== dependencies: find-up "^4.1.0" read-pkg "^5.2.0" type-fest "^0.8.1" read-pkg@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== dependencies: "@types/normalize-package-data" "^2.4.0" normalize-package-data "^2.5.0" parse-json "^5.0.0" type-fest "^0.6.0" "readable-stream@1 || 2": version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" isarray "~1.0.0" process-nextick-args "~2.0.0" safe-buffer "~5.1.1" string_decoder "~1.1.1" util-deprecate "~1.0.1" realpath-native@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-2.0.0.tgz#7377ac429b6e1fd599dc38d08ed942d0d7beb866" integrity sha512-v1SEYUOXXdbBZK8ZuNgO4TBjamPsiSgcFr0aP+tEKpQZK8vooEUqV6nm6Cv502mX4NF2EfsnVqtNAHG+/6Ur1Q== regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== dependencies: extend-shallow "^3.0.2" safe-regex "^1.1.0" regexpp@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= repeat-element@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= request-promise-core@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.3.tgz#e9a3c081b51380dfea677336061fea879a829ee9" integrity sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ== dependencies: lodash "^4.17.15" request-promise-native@^1.0.7: version "1.0.8" resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.8.tgz#a455b960b826e44e2bf8999af64dff2bfe58cb36" integrity sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ== dependencies: request-promise-core "1.1.3" stealthy-require "^1.1.1" tough-cookie "^2.3.3" request@^2.88.0: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== dependencies: aws-sign2 "~0.7.0" aws4 "^1.8.0" caseless "~0.12.0" combined-stream "~1.0.6" extend "~3.0.2" forever-agent "~0.6.1" form-data "~2.3.2" har-validator "~5.1.3" http-signature "~1.2.0" is-typedarray "~1.0.0" isstream "~0.1.2" json-stringify-safe "~5.0.1" mime-types "~2.1.19" oauth-sign "~0.9.0" performance-now "^2.1.0" qs "~6.5.2" safe-buffer "^5.1.2" tough-cookie "~2.5.0" tunnel-agent "^0.6.0" uuid "^3.3.2" require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= require-main-filename@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== dependencies: resolve-from "^5.0.0" resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" integrity sha1-six699nWiBvItuZTM17rywoYh0g= resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== resolve-from@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= resolve@1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= resolve@^1.10.0: version "1.16.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.16.1.tgz#49fac5d8bacf1fd53f200fa51247ae736175832c" integrity sha512-rmAglCSqWWMrrBv/XM6sW0NuRFiKViw/W4d9EbC4pt+49H8JwHy+mcGmALTEg504AUDcLTvb1T2q3E9AnmY+ig== dependencies: path-parse "^1.0.6" resolve@^1.17.0: version "1.17.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== dependencies: path-parse "^1.0.6" resolve@^1.3.2: version "1.15.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== dependencies: path-parse "^1.0.6" restore-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== dependencies: onetime "^5.1.0" signal-exit "^3.0.2" ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== retry@^0.10.0: version "0.10.1" resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= rimraf@2.6.3: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== dependencies: glob "^7.1.3" rimraf@^2.5.4, rimraf@^2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== dependencies: glob "^7.1.3" rimraf@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" rsvp@^4.8.4: version "4.8.5" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== run-async@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.0.tgz#e59054a5b86876cfae07f431d18cbaddc594f1e8" integrity sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg== dependencies: is-promise "^2.1.0" run-queue@^1.0.0, run-queue@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= dependencies: aproba "^1.1.1" rxjs@^6.5.3: version "6.5.4" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.4.tgz#e0777fe0d184cec7872df147f303572d414e211c" integrity sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q== dependencies: tslib "^1.9.0" safe-buffer@^5.0.1, safe-buffer@^5.1.2: version "5.2.0" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= dependencies: ret "~0.1.10" "safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== sane@^4.0.3: version "4.1.0" resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== dependencies: "@cnakazawa/watch" "^1.0.3" anymatch "^2.0.0" capture-exit "^2.0.0" exec-sh "^0.3.2" execa "^1.0.0" fb-watchman "^2.0.0" micromatch "^3.1.4" minimist "^1.1.1" walker "~1.0.5" saxes@^3.1.9: version "3.1.11" resolved "https://registry.yarnpkg.com/saxes/-/saxes-3.1.11.tgz#d59d1fd332ec92ad98a2e0b2ee644702384b1c5b" integrity sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g== dependencies: xmlchars "^2.1.1" "semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== semver@^6.0.0, semver@^6.1.2, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= set-value@^2.0.0, set-value@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== dependencies: extend-shallow "^2.0.1" is-extendable "^0.1.1" is-plain-object "^2.0.3" split-string "^3.0.1" shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= dependencies: shebang-regex "^1.0.0" shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= shebang-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== shellwords@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== sisteransi@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== slice-ansi@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== dependencies: ansi-styles "^3.2.0" astral-regex "^1.0.0" is-fullwidth-code-point "^2.0.0" smart-buffer@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw== snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== dependencies: define-property "^1.0.0" isobject "^3.0.0" snapdragon-util "^3.0.1" snapdragon-util@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== dependencies: kind-of "^3.2.0" snapdragon@^0.8.1: version "0.8.2" resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== dependencies: base "^0.11.1" debug "^2.2.0" define-property "^0.2.5" extend-shallow "^2.0.1" map-cache "^0.2.2" source-map "^0.5.6" source-map-resolve "^0.5.0" use "^3.1.0" socks-proxy-agent@^4.0.0: version "4.0.2" resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386" integrity sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg== dependencies: agent-base "~4.2.1" socks "~2.3.2" socks@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" integrity sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA== dependencies: ip "1.1.5" smart-buffer "^4.1.0" source-map-resolve@^0.5.0: version "0.5.3" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== dependencies: atob "^2.1.2" decode-uri-component "^0.2.0" resolve-url "^0.2.1" source-map-url "^0.4.0" urix "^0.1.0" source-map-support@^0.5.6: version "0.5.16" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" source-map-url@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= source-map@^0.5.0, source-map@^0.5.6: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== source-map@^0.7.3: version "0.7.3" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== spdx-correct@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== spdx-expression-parse@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== dependencies: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: version "3.0.5" resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== dependencies: extend-shallow "^3.0.0" sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= sshpk@^1.7.0: version "1.16.1" resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" bcrypt-pbkdf "^1.0.0" dashdash "^1.12.0" ecc-jsbn "~0.1.1" getpass "^0.1.1" jsbn "~0.1.0" safer-buffer "^2.0.2" tweetnacl "~0.14.0" ssri@^7.0.0, ssri@^7.0.1: version "7.1.0" resolved "https://registry.yarnpkg.com/ssri/-/ssri-7.1.0.tgz#92c241bf6de82365b5c7fb4bd76e975522e1294d" integrity sha512-77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g== dependencies: figgy-pudding "^3.5.1" minipass "^3.1.1" stack-utils@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA== static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= dependencies: define-property "^0.2.5" object-copy "^0.1.0" stealthy-require@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= string-length@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string-length/-/string-length-3.1.0.tgz#107ef8c23456e187a8abd4a61162ff4ac6e25837" integrity sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA== dependencies: astral-regex "^1.0.0" strip-ansi "^5.2.0" string-width@^3.0.0, string-width@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== dependencies: emoji-regex "^7.0.1" is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" string-width@^4.1.0, string-width@^4.2.0: version "4.2.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== dependencies: emoji-regex "^8.0.0" is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== dependencies: safe-buffer "~5.1.0" strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== dependencies: ansi-regex "^4.1.0" strip-ansi@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== dependencies: ansi-regex "^5.0.0" strip-bom@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= strip-final-newline@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== strip-json-comments@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" supports-color@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== dependencies: has-flag "^3.0.0" supports-color@^7.0.0, supports-color@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== dependencies: has-flag "^4.0.0" supports-hyperlinks@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47" integrity sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA== dependencies: has-flag "^4.0.0" supports-color "^7.0.0" symbol-tree@^3.2.2: version "3.2.4" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== table@^5.2.3: version "5.4.6" resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== dependencies: ajv "^6.10.2" lodash "^4.17.14" slice-ansi "^2.1.0" string-width "^3.0.0" tar@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/tar/-/tar-6.0.1.tgz#7b3bd6c313cb6e0153770108f8d70ac298607efa" integrity sha512-bKhKrrz2FJJj5s7wynxy/fyxpE0CmCjmOQ1KV4KkgXFWOgoIT/NbTMnB1n+LFNrNk0SSBVGGxcK5AGsyC+pW5Q== dependencies: chownr "^1.1.3" fs-minipass "^2.0.0" minipass "^3.0.0" minizlib "^2.1.0" mkdirp "^1.0.3" yallist "^4.0.0" terminal-link@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== dependencies: ansi-escapes "^4.2.1" supports-hyperlinks "^2.0.0" test-exclude@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== dependencies: "@istanbuljs/schema" "^0.1.2" glob "^7.1.4" minimatch "^3.0.4" text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= thenify-all@^1.0.0: version "1.6.0" resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= dependencies: thenify ">= 3.1.0 < 4" "thenify@>= 3.1.0 < 4": version "3.3.0" resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.0.tgz#e69e38a1babe969b0108207978b9f62b88604839" integrity sha1-5p44obq+lpsBCCB5eLn2K4hgSDk= dependencies: any-promise "^1.0.0" throat@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= throat@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== through@^2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== dependencies: os-tmpdir "~1.0.2" tmpl@1.0.x: version "1.0.4" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= to-object-path@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= dependencies: kind-of "^3.0.2" to-regex-range@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= dependencies: is-number "^3.0.0" repeat-string "^1.6.1" to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" to-regex@^3.0.1, to-regex@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== dependencies: define-property "^2.0.2" extend-shallow "^3.0.2" regex-not "^1.0.2" safe-regex "^1.1.0" tough-cookie@^2.3.3, tough-cookie@~2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== dependencies: psl "^1.1.28" punycode "^2.1.1" tough-cookie@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2" integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg== dependencies: ip-regex "^2.1.0" psl "^1.1.28" punycode "^2.1.1" tr46@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= dependencies: punycode "^2.1.0" tslib@^1.9.0: version "1.11.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35" integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA== tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= dependencies: safe-buffer "^5.0.1" tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= dependencies: prelude-ls "~1.1.2" type-detect@4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== type-fest@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== type-fest@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== type-fest@^0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== dependencies: is-typedarray "^1.0.0" union-value@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== dependencies: arr-union "^3.1.0" get-value "^2.0.6" is-extendable "^0.1.1" set-value "^2.0.1" unique-filename@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== dependencies: unique-slug "^2.0.0" unique-slug@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== dependencies: imurmurhash "^0.1.4" unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= dependencies: has-value "^0.3.1" isobject "^3.0.0" uri-js@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== dependencies: punycode "^2.1.0" urix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= uuid@^3.3.2: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== v8-compile-cache@^2.0.3: version "2.1.0" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e" integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g== v8-to-istanbul@^4.1.3: version "4.1.3" resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-4.1.3.tgz#22fe35709a64955f49a08a7c7c959f6520ad6f20" integrity sha512-sAjOC+Kki6aJVbUOXJbcR0MnbfjvBzwKZazEJymA2IX49uoOdEdk+4fBq5cXgYgiyKtAyrrJNtBZdOeDIF+Fng== dependencies: "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^1.6.0" source-map "^0.7.3" validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== dependencies: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= dependencies: assert-plus "^1.0.0" core-util-is "1.0.2" extsprintf "^1.2.0" w3c-hr-time@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== dependencies: browser-process-hrtime "^1.0.0" w3c-xmlserializer@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz#30485ca7d70a6fd052420a3d12fd90e6339ce794" integrity sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg== dependencies: domexception "^1.0.1" webidl-conversions "^4.0.2" xml-name-validator "^3.0.0" walker@^1.0.7, walker@~1.0.5: version "1.0.7" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= dependencies: makeerror "1.0.x" webidl-conversions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== dependencies: iconv-lite "0.4.24" whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== whatwg-url@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== dependencies: lodash.sortby "^4.7.0" tr46 "^1.0.1" webidl-conversions "^4.0.2" which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= which@^1.2.9, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" which@^2.0.1, which@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== wrap-ansi@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== dependencies: ansi-styles "^3.2.0" string-width "^3.0.0" strip-ansi "^5.0.0" wrap-ansi@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== dependencies: ansi-styles "^4.0.0" string-width "^4.1.0" strip-ansi "^6.0.0" wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= write-file-atomic@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== dependencies: imurmurhash "^0.1.4" is-typedarray "^1.0.0" signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" write@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== dependencies: mkdirp "^0.5.1" ws@^7.0.0: version "7.2.3" resolved "https://registry.yarnpkg.com/ws/-/ws-7.2.3.tgz#a5411e1fb04d5ed0efee76d26d5c46d830c39b46" integrity sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ== xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== xmlchars@^2.1.1: version "2.2.0" resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== y18n@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== yallist@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yargs-parser@^13.1.2: version "13.1.2" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== dependencies: camelcase "^5.0.0" decamelize "^1.2.0" yargs-parser@^18.1.1: version "18.1.2" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.2.tgz#2f482bea2136dbde0861683abea7756d30b504f1" integrity sha512-hlIPNR3IzC1YuL1c2UwwDKpXlNFBqD1Fswwh1khz5+d8Cq/8yc/Mn0i+rQXduu8hcrFKvO7Eryk+09NecTQAAQ== dependencies: camelcase "^5.0.0" decamelize "^1.2.0" yargs@^13.0.0: version "13.3.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== dependencies: cliui "^5.0.0" find-up "^3.0.0" get-caller-file "^2.0.1" require-directory "^2.1.1" require-main-filename "^2.0.0" set-blocking "^2.0.0" string-width "^3.0.0" which-module "^2.0.0" y18n "^4.0.0" yargs-parser "^13.1.2" yargs@^15.0.0, yargs@^15.3.1: version "15.3.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.3.1.tgz#9505b472763963e54afe60148ad27a330818e98b" integrity sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA== dependencies: cliui "^6.0.0" decamelize "^1.2.0" find-up "^4.1.0" get-caller-file "^2.0.1" require-directory "^2.1.1" require-main-filename "^2.0.0" set-blocking "^2.0.0" string-width "^4.2.0" which-module "^2.0.0" y18n "^4.0.0" yargs-parser "^18.1.1"