├── .nvmrc ├── .gitignore ├── examples ├── simple.js ├── history-read.js ├── loop.js ├── history-loop.js └── autocomplete.js ├── .travis.yml ├── .editorconfig ├── lib ├── history.js ├── parser.js └── autocomplete.js ├── tests ├── util │ └── inout.js └── tests.js ├── LICENSE ├── package.json ├── README.md ├── index.js └── yarn.lock /.nvmrc: -------------------------------------------------------------------------------- 1 | 14 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /examples/simple.js: -------------------------------------------------------------------------------- 1 | 2 | require('../index').read(function(err, args) { 3 | console.log('Arguments: %s', JSON.stringify(args)) 4 | }); 5 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - 12 4 | - 14 5 | 6 | branches: 7 | only: 8 | - master 9 | 10 | notifications: 11 | email: 12 | - mrvisser@gmail.com 13 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | ; EditorConfig is awesome: http://EditorConfig.org 2 | 3 | ; top-most EditorConfig file 4 | root = true 5 | 6 | [*] 7 | end_of_line = lf 8 | insert_final_newline = true 9 | charset = utf-8 10 | trim_trailing_whitespace = true 11 | indent_style = space 12 | indent_size = 4 13 | -------------------------------------------------------------------------------- /examples/history-read.js: -------------------------------------------------------------------------------- 1 | 2 | var readcommand = require('../index'); 3 | 4 | readcommand.read({'history': ['cd', 'ls', 'curl', 'ps -aux | grep node', 'netstat -r']}, function(err, args, str) { 5 | console.log('args: %s', JSON.stringify(args)); 6 | console.log('str: %s', JSON.stringify(str)); 7 | }); 8 | -------------------------------------------------------------------------------- /examples/loop.js: -------------------------------------------------------------------------------- 1 | 2 | var readcommand = require('../index'); 3 | 4 | var sigints = 0; 5 | 6 | readcommand.loop(null, function(err, args, str, next) { 7 | if (err && err.code !== 'SIGINT') { 8 | throw err; 9 | } else if (err) { 10 | if (sigints === 1) { 11 | process.exit(0); 12 | } else { 13 | sigints++; 14 | console.log('Press ^C again to exit.'); 15 | return next(); 16 | } 17 | } else { 18 | sigints = 0; 19 | } 20 | 21 | console.log('args: %s', JSON.stringify(args)); 22 | console.log('str: %s', JSON.stringify(str)); 23 | return next(); 24 | }); 25 | -------------------------------------------------------------------------------- /lib/history.js: -------------------------------------------------------------------------------- 1 | 2 | var CommandHistory = module.exports = function(history) { 3 | this._history = history || []; 4 | this._index = -1; 5 | }; 6 | 7 | CommandHistory.prototype.prev = function() { 8 | if (this._index === this._history.length - 1) { 9 | return null; 10 | } 11 | 12 | this._index++; 13 | return this._history[this._history.length - this._index - 1]; 14 | }; 15 | 16 | CommandHistory.prototype.next = function() { 17 | if (this._index === 0) { 18 | this._index--; 19 | return ''; 20 | } else if (this._index === -1) { 21 | return null; 22 | } 23 | 24 | this._index--; 25 | return this._history[this._history.length - this._index - 1]; 26 | }; 27 | -------------------------------------------------------------------------------- /examples/history-loop.js: -------------------------------------------------------------------------------- 1 | 2 | var readcommand = require('../index'); 3 | 4 | var sigints = 0; 5 | 6 | readcommand.loop({'history': ['cd', 'ls', 'curl', 'ps -aux | grep node', 'netstat -r']}, function(err, args, str, next) { 7 | if (err && err.code !== 'SIGINT') { 8 | throw err; 9 | } else if (err) { 10 | if (sigints === 1) { 11 | process.exit(0); 12 | } else { 13 | sigints++; 14 | console.log('Press ^C again to exit.'); 15 | return next(); 16 | } 17 | } else { 18 | sigints = 0; 19 | } 20 | 21 | console.log('args: %s', JSON.stringify(args)); 22 | console.log('str: %s', JSON.stringify(str)); 23 | return next(); 24 | }); 25 | -------------------------------------------------------------------------------- /tests/util/inout.js: -------------------------------------------------------------------------------- 1 | 2 | var events = require('events'); 3 | var stream = require('stream'); 4 | var util = require('util'); 5 | 6 | var InOut = module.exports = function() { 7 | var self = this; 8 | 9 | self._input = new stream.PassThrough(); 10 | self._output = new stream.PassThrough(); 11 | 12 | // Pipe output to the consumer 13 | self._output.on('data', function(data) { 14 | self.emit('data', data); 15 | }); 16 | }; 17 | util.inherits(InOut, events.EventEmitter); 18 | 19 | InOut.prototype.input = function() { 20 | return this._input; 21 | }; 22 | 23 | InOut.prototype.output = function() { 24 | return this._output; 25 | }; 26 | 27 | InOut.prototype.write = function(data) { 28 | this._input.write(data); 29 | }; 30 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2014 Branden Visser 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "readcommand", 3 | "description": "An extension to readline that reads and parses a multi-line shell command", 4 | "version": "0.4.0", 5 | "homepage": "https://github.com/mrvisser/node-readcommand", 6 | "keywords": [ 7 | "arguments", 8 | "argv", 9 | "command", 10 | "commands", 11 | "parse", 12 | "shell" 13 | ], 14 | "author": { 15 | "name": "Branden Visser", 16 | "email": "mrvisser@gmail.com" 17 | }, 18 | "license": "MIT", 19 | "repository": { 20 | "type": "git", 21 | "url": "git://github.com/mrvisser/node-readcommand.git" 22 | }, 23 | "bugs": { 24 | "url": "https://github.com/mrvisser/node-readcommand/issues" 25 | }, 26 | "main": "./index.js", 27 | "dependencies": { 28 | "underscore": "1.13.1" 29 | }, 30 | "devDependencies": { 31 | "mocha": "^9.0.1", 32 | "release-it": "^14.10.0" 33 | }, 34 | "scripts": { 35 | "release": "release-it", 36 | "test": "mocha tests/**.js" 37 | }, 38 | "engines": { 39 | "node": ">=0.8" 40 | }, 41 | "publishConfig": { 42 | "registry": "https://registry.npmjs.org/" 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /examples/autocomplete.js: -------------------------------------------------------------------------------- 1 | 2 | var _ = require('underscore'); 3 | var readcommand = require('../index'); 4 | 5 | var possibleArguments = [ 6 | '--verbose', 7 | '--log-level' 8 | ]; 9 | 10 | var possibleLogLevels = [ 11 | 'trace', 12 | 'debug', 13 | 'info', 14 | 'warn', 15 | 'error' 16 | ]; 17 | 18 | readcommand.loop({'autocomplete': _autocomplete}, function(err, args, str, next) { 19 | if (err) { 20 | return; 21 | } 22 | 23 | console.log('executed: %s', JSON.stringify(args)); 24 | return next(); 25 | }); 26 | 27 | function _autocomplete(args, callback) { 28 | if (_.isEmpty(args)) { 29 | return callback(null, possibleArguments); 30 | } 31 | 32 | var replacements = []; 33 | var lastArg = _.last(args); 34 | if (args.length === 1) { 35 | // If there is only one argument, we just try and auto complete one of the possible flags 36 | replacements = _.filter(possibleArguments, function(possibleArgument) { 37 | return (possibleArgument.indexOf(lastArg) === 0); 38 | }); 39 | } else { 40 | var secondLastArg = args[args.length - 2]; 41 | if (secondLastArg === '--log-level') { 42 | // If we are choosing a log level, we offer up potential log levels for the value 43 | replacements = _.filter(possibleLogLevels, function(possibleLogLevel) { 44 | return (possibleLogLevel.indexOf(lastArg) === 0); 45 | }); 46 | } else { 47 | // We are not giving a flag value, so offer up another flag 48 | replacements = _.filter(possibleArguments, function(possibleArgument) { 49 | return (possibleArgument.indexOf(lastArg) === 0); 50 | }); 51 | } 52 | } 53 | 54 | return callback(null, replacements); 55 | } 56 | -------------------------------------------------------------------------------- /lib/parser.js: -------------------------------------------------------------------------------- 1 | 2 | var _ = require('underscore'); 3 | 4 | /*! 5 | * Indicates that the parser was left open due to a lingering escape 6 | */ 7 | var OPEN_ESCAPE = module.exports.OPEN_ESCAPE = 'escape'; 8 | 9 | /*! 10 | * Indicates that the parser was left open due to a lingering quote 11 | */ 12 | var OPEN_QUOTE = module.exports.OPEN_QUOTE = 'quote'; 13 | 14 | /** 15 | * Parses an input string as a shell command. Outputs an object that indicates the current state of 16 | * the command string: 17 | * 18 | * result.open : String that determines how, if at all the command has been left open for more 19 | * input (e.g., unbalanced quotes, ended with a back-slash). If doing multi-line 20 | * parsing, this flag indicates if you should proceed to a new line and continue 21 | * taking input. The possible values are `parser.OPEN_ESCAPE` and 22 | * `parser.OPEN_QUOTE`. If this is `false`y, then the command is complete 23 | * 24 | * result.str : A sanitized command string. If doing multi-line parsing, you can use this as 25 | * the current command-in-progress. Takes care of concerns such as end-of-line 26 | * back-slash, which should not result in a new-line in the final command string 27 | * 28 | * result.args : Represents either the parsed command-in-progress if `result.open` is not 29 | * `false`y, or the full command. In situations where there were open quotes or 30 | * a final backslash, the command is simply force-closed in this arguments array 31 | */ 32 | var parse = module.exports.parse = function(str) { 33 | var state = { 34 | 'CURR_ARG': {'str': ''}, 35 | 'SINGLE_QUOTE': false, 36 | 'DOUBLE_QUOTE': false, 37 | 'ESCAPE_NEXT': false 38 | }; 39 | 40 | var args = []; 41 | _.each(str, function(c, i) { 42 | if (state.ESCAPE_NEXT) { 43 | // If we are currently escaping the next character (previous character was a \), then we 44 | // put this character in verbatim (except for new line) and reset the escape status. If 45 | // the character is a new-line, we simply scrub it from the argument, it's a special 46 | // case 47 | if (c !== '\n') { 48 | state.CURR_ARG.str += c; 49 | } 50 | 51 | state.ESCAPE_NEXT = false; 52 | } else if (c === '\\') { 53 | // We are not escaping this character and we have received the backslash, signal an 54 | // escape for the next character 55 | state.ESCAPE_NEXT = true; 56 | } else if (state.DOUBLE_QUOTE) { 57 | if (c === '"') { 58 | // We are currently double-quoted and we've hit a double-quote, simply unflag 59 | // double-quotes 60 | state.DOUBLE_QUOTE = false; 61 | } else { 62 | // We are currently double-quoting, take this character in verbatim 63 | state.CURR_ARG.str += c; 64 | } 65 | } else if (state.SINGLE_QUOTE) { 66 | if (c === '\'') { 67 | // We are currently single-quoted and we've hit a single-quote, simply unflag 68 | // single-quotes 69 | state.SINGLE_QUOTE = false; 70 | } else { 71 | // We are currently single-quoting, take this character in verbatim 72 | state.CURR_ARG.str += c; 73 | } 74 | } else if (c === ' ' || c === '\n') { 75 | // Any space or new-line character will terminate the argument so long as it isn't 76 | // escaped or in quotes 77 | args.push(state.CURR_ARG); 78 | state.CURR_ARG = {'str': ''}; 79 | } else if (c === '"') { 80 | // This argument is starting new. Record where and how it began 81 | if (!_.isNumber(state.CURR_ARG.i)) { 82 | state.CURR_ARG.i = i; 83 | state.CURR_ARG.quoted = '"'; 84 | } 85 | 86 | // Start the double-quote flag 87 | state.DOUBLE_QUOTE = true; 88 | } else if (c === '\'') { 89 | // This argument is starting new. Record where it began 90 | if (!_.isNumber(state.CURR_ARG.i)) { 91 | state.CURR_ARG.i = i; 92 | state.CURR_ARG.quoted = '\''; 93 | } 94 | 95 | // Start the single-quote flag 96 | state.SINGLE_QUOTE = true; 97 | } else { 98 | // This argument is starting new. Record where it began 99 | if (!_.isNumber(state.CURR_ARG.i)) { 100 | state.CURR_ARG.i = i; 101 | } 102 | 103 | // Regular character under regular conditions, simply add it to the current argument 104 | state.CURR_ARG.str += c; 105 | } 106 | }); 107 | 108 | // Push the final argument onto the arguments array 109 | args.push(state.CURR_ARG); 110 | 111 | if (state.ESCAPE_NEXT) { 112 | // If we finished with an escape, we indicate that we did so which helps in determining how 113 | // to handle the new line if any 114 | return { 115 | 'args': args, 116 | 'open': OPEN_ESCAPE, 117 | 'str': str 118 | }; 119 | } else if (state.DOUBLE_QUOTE || state.SINGLE_QUOTE) { 120 | // When we finished while quoting, we have not finished the command, so we return the 121 | // input string as-is so far with the arguments we've parsed 122 | return { 123 | 'args': args, 124 | 'open': OPEN_QUOTE, 125 | 'str': str 126 | }; 127 | } else { 128 | // We are finishing without any lingering state, so we can close off the command 129 | return { 130 | 'args': args, 131 | 'str': str 132 | }; 133 | } 134 | }; 135 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | ## ReadCommand 3 | 4 | [![Build Status](https://travis-ci.org/mrvisser/node-readcommand.png?branch=master)](https://travis-ci.org/mrvisser/node-readcommand) 5 | 6 | A utility that wraps the built-in node.js `readline` functionality to parse multi-line shell commands. This module was extracted from work that was bloating in [node-corporal](https://github.com/mrvisser/node-corporal), a utility that makes building CLI apps FUN. 7 | 8 | ## Features 9 | 10 | * Argument parsing from the user's input 11 | * Multi-line command input 12 | * Command history navigation using `up` and `down` arrow keys 13 | * Auto-complete hook for argument auto-completion 14 | 15 | ## API 16 | 17 | * [readcommand.read(options, callback)](https://github.com/mrvisser/node-readcommand/blob/master/index.js#L54-L80) 18 | * Read a single command from the user 19 | 20 | * [readcommand.loop(options, callback)](https://github.com/mrvisser/node-readcommand/blob/master/index.js#L10-L39) 21 | * Read commands from the user in an interactive loop 22 | 23 | ## Examples 24 | 25 | ### Read a single command 26 | 27 | This is the most simple example, reading a command from a user in your interactive shell, and parsing it into an arguments array like `process.argv`, then printing it to the console. 28 | 29 | ```javascript 30 | require('readcommand').read(function(err, args) { 31 | console.log('Arguments: %s', JSON.stringify(args)) 32 | }); 33 | ``` 34 | 35 | Example usage: 36 | 37 | ``` 38 | $ node simple.js 39 | > mycommand --arg1 val1 --arg2 val2 40 | Arguments: ["mycommand","--arg1","val1","--arg2","val2"] 41 | ``` 42 | 43 | And multi-line goodness! 44 | 45 | ``` 46 | $ node simple.js 47 | > mycommand \ 48 | > --arg1 val1 \ 49 | > --arg2 val2 50 | Arguments: ["mycommand","--arg1","val1","--arg2","val2"] 51 | ``` 52 | 53 | ### Read a single command with history 54 | 55 | Provide a history array for the user to toggle through using up/down keys. 56 | 57 | ```javascript 58 | require('readcommand').read({'history': ['cd', 'ls', 'curl', 'ps -aux | grep node', 'netstat -r']}, function(err, args) { 59 | console.log('Arguments: %s', JSON.stringify(args)) 60 | }); 61 | ``` 62 | 63 | ### Start a command loop 64 | 65 | This example starts an interactive command prompt, where each command is provided to the callback function. After 2 SIGINT invocations by the user, the loop terminates. After each command, it prints the parsed arguments. The command history is maintained within the command loop. 66 | 67 | ```javascript 68 | var readcommand = require('readcommand'); 69 | 70 | var sigints = 0; 71 | 72 | readcommand.loop(function(err, args, str, next) { 73 | if (err && err.code !== 'SIGINT') { 74 | throw err; 75 | } else if (err) { 76 | if (sigints === 1) { 77 | process.exit(0); 78 | } else { 79 | sigints++; 80 | console.log('Press ^C again to exit.'); 81 | return next(); 82 | } 83 | } else { 84 | sigints = 0; 85 | } 86 | 87 | console.log('Received args: %s', JSON.stringify(args)); 88 | return next(); 89 | }); 90 | ``` 91 | 92 | ### Auto-complete 93 | 94 | The auto-complete functionality wraps `readline`'s autocomplete functionality, providing an API that works with high-level parsed argument replacement instead of low-level loose string replacement. 95 | 96 | The following example provides replacements for either argument keys or argument values depending on context: 97 | 98 | ```javascript 99 | var _ = require('underscore'); 100 | var readcommand = require('readcommand'); 101 | 102 | var possibleArguments = [ 103 | '--verbose', 104 | '--log-level' 105 | ]; 106 | 107 | var possibleLogLevels = [ 108 | 'trace', 109 | 'debug', 110 | 'info', 111 | 'warn', 112 | 'error' 113 | ]; 114 | 115 | readcommand.loop({'autocomplete': _autocomplete}, function(err, args, str, next) { 116 | if (err) { 117 | return; 118 | } 119 | 120 | console.log('executed: %s', JSON.stringify(args)); 121 | return next(); 122 | }); 123 | 124 | function _autocomplete(args, callback) { 125 | if (_.isEmpty(args)) { 126 | return callback(null, possibleArguments); 127 | } 128 | 129 | var replacements = []; 130 | var lastArg = _.last(args); 131 | if (args.length === 1) { 132 | // If there is only one argument, we just try and auto complete one of the possible flags 133 | replacements = _.filter(possibleArguments, function(possibleArgument) { 134 | return (possibleArgument.indexOf(lastArg) === 0); 135 | }); 136 | } else { 137 | var secondLastArg = args[args.length - 2]; 138 | if (secondLastArg === '--log-level') { 139 | // If we are choosing a log level, we offer up potential log levels for the value 140 | replacements = _.filter(possibleLogLevels, function(possibleLogLevel) { 141 | return (possibleLogLevel.indexOf(lastArg) === 0); 142 | }); 143 | } else { 144 | // We are not giving a flag value, so offer up another flag 145 | replacements = _.filter(possibleArguments, function(possibleArgument) { 146 | return (possibleArgument.indexOf(lastArg) === 0); 147 | }); 148 | } 149 | } 150 | 151 | return callback(null, replacements); 152 | } 153 | ``` 154 | 155 | ## License 156 | 157 | Copyright (c) 2014 Branden Visser 158 | 159 | 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: 160 | 161 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 162 | 163 | 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. 164 | -------------------------------------------------------------------------------- /lib/autocomplete.js: -------------------------------------------------------------------------------- 1 | 2 | var _ = require('underscore'); 3 | var util = require('util'); 4 | 5 | var CommandParser = require('./parser'); 6 | 7 | /** 8 | * Get the arguments to send to an autocomplete handler implemented by a readcommand consumer. This 9 | * function will also determine if auto-complete should be handled at all. 10 | * 11 | * @param {String} currentCommand The current command string, not including what is in the 12 | * current line buffer 13 | * @param {String} currentLine The contents of the current line buffer 14 | * @param {Function} callback Invoked when complete 15 | * @param {Boolean} callback.abort Whether or not auto-complete should be passed to the 16 | * caller. `true`thy indicates it should not, `false`y 17 | * indicates it should not 18 | * @param {String[]} callback.args The arguments array to send to the caller. This will not 19 | * be specified if `callback.abort` is `true`thy 20 | */ 21 | module.exports.getAutocompleteArguments = function(currentCommand, currentLine, callback) { 22 | currentCommand = currentCommand || ''; 23 | currentLine = currentLine || ''; 24 | 25 | /*! 26 | * Parse the full command to see if we are in a state where we can reasonably do an auto- 27 | * complete 28 | */ 29 | var fullCommandStr = currentCommand + currentLine; 30 | var fullCommandParsed = _parseForAutocomplete(fullCommandStr); 31 | 32 | // The last argument of the current command string is the only thing that can be auto-completed 33 | var lastArg = _.last(fullCommandParsed.args); 34 | 35 | if (fullCommandParsed.open === CommandParser.OPEN_ESCAPE) { 36 | // We can't complete on an escape sequence, it doesn't really make sense I don't think 37 | return callback(true); 38 | } else if (fullCommandStr.slice(lastArg.i).indexOf('\n') !== -1) { 39 | // We can't complete if the last argument spans a new line. This would imply we need to do a 40 | // replacement on data that has already been accepted which is not possible 41 | return callback(true); 42 | } 43 | 44 | // Hand just the string arguments (not parsed metadata) to the autocomplete caller 45 | return callback(false, _.pluck(_filterAutocompleteArguments(fullCommandParsed.args), 'str')); 46 | }; 47 | 48 | /** 49 | * Get the replacement values and replacement substring given the array of potential replacements 50 | * provided by the autocomplete implementation. 51 | * 52 | * @param {String} currentCommand The current command string, not including what is in 53 | * the current line buffer 54 | * @param {String} currentLine The contents of the current line buffer 55 | * @param {Function} callback Invoked when complete 56 | * @param {String[]} callback.replacements The potential replacements 57 | * @param {String} callback.toReplace The replacement substring of the `currentLine` of 58 | * user input 59 | */ 60 | module.exports.getAutocompleteReplacements = function(currentCommand, currentLine, replacementsArray, callback) { 61 | if (_.isEmpty(replacementsArray)) { 62 | return callback([], currentLine); 63 | } 64 | 65 | currentCommand = currentCommand || ''; 66 | currentLine = currentLine || ''; 67 | 68 | var fullCommandStr = currentCommand + currentLine; 69 | var fullCommandParsed = _parseForAutocomplete(fullCommandStr); 70 | 71 | // The last argument of the current command string is the only thing that can be auto-completed 72 | var lastArg = _.last(fullCommandParsed.args); 73 | 74 | // The replacement string is always from where the last argument began on the current line until 75 | // the end 76 | var distanceIndex = _getDistanceFromLastNewline(fullCommandStr, lastArg.i); 77 | var toReplaceStr = currentLine.slice(distanceIndex); 78 | 79 | replacementsArray = _.map(replacementsArray, function(replacement) { 80 | if (lastArg.quoted || replacement.indexOf(' ') !== -1 || replacement.indexOf('\n') !== -1) { 81 | var quote = lastArg.quoted || '"'; 82 | 83 | // If the last argument was quoted, reconstruct the quotes around the potential 84 | // replacements 85 | replacement = util.format('%s%s%s', quote, replacement, quote); 86 | } 87 | 88 | // Add a space to the end of all replacements 89 | return util.format('%s ', replacement); 90 | }); 91 | 92 | return callback(replacementsArray, toReplaceStr); 93 | }; 94 | 95 | /*! 96 | * Parse the given command string, handling the scenario where there is an unstarted command at the 97 | * end and assigning it an index. This is a requirement specific for auto-complete, so it is not 98 | * done by the parser itself. 99 | */ 100 | function _parseForAutocomplete(fullCommandStr) { 101 | var fullCommandParsed = CommandParser.parse(fullCommandStr); 102 | var lastArg = _.last(fullCommandParsed.args); 103 | 104 | // If the last argument does not have an index, it means it's a cliff hanger (e.g., a space at 105 | // the end of the command string). Therefore, we'll assign it an index at the end of the input 106 | // string 107 | if (!_.isNumber(lastArg.i)) { 108 | lastArg.i = fullCommandStr.length; 109 | } 110 | 111 | return fullCommandParsed; 112 | } 113 | 114 | /*! 115 | * Clear empty arguments out of the arguments array except for the last one. 116 | * 117 | * When giving the args array to the caller, we need to indicate if the cursor position is beginning 118 | * a new argument, or if it is in progress on a current argument. The parser will strip that 119 | * information in its sanitized `str` representation of the arguments. For example: 120 | * 121 | * `"--log-level"` will look example the same as `"--log-level "` (trailing space) 122 | * 123 | * ... but for doing auto-complete on either argument keys or argument values, it is an important 124 | * distinction to make. So if the state is the latter, we maintain the empty string at the end of 125 | * the args array. 126 | */ 127 | function _filterAutocompleteArguments(args) { 128 | args = _.filter(args, function(arg, i) { 129 | return (i === (args.length - 1) || arg.quote || arg.str !== ''); 130 | }); 131 | 132 | // If there is only one argument and its unintentially empty, don't bother including it 133 | if (args.length === 1 && !args[0].quote && args[0].str === '') { 134 | return []; 135 | } else { 136 | return args; 137 | } 138 | } 139 | 140 | /*! 141 | * Given a string that might contain new-lines, the number of characters `i` is away from the last 142 | * new-line in the string. If the string does not contain a new-line, the result is just `i` 143 | */ 144 | function _getDistanceFromLastNewline(str, i) { 145 | var distance = i; 146 | var lastNewlineIndex = str.lastIndexOf('\n'); 147 | if (lastNewlineIndex !== -1) { 148 | distance = (i - lastNewlineIndex - 1); 149 | } 150 | 151 | return distance; 152 | } 153 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | 2 | var _ = require('underscore'); 3 | var readline = require('readline'); 4 | var util = require('util'); 5 | 6 | var CommandAutocomplete = require('./lib/autocomplete'); 7 | var CommandHistory = require('./lib/history'); 8 | var CommandParser = require('./lib/parser'); 9 | 10 | /** 11 | * Start a command prompt loop. 12 | * 13 | * @param {Object} [options={}] Optional read arguments 14 | * @param {Stream} [options.input=process.stdin] The input stream to read a command from 15 | * @param {Stream} [options.output=process.stdout] The output stream to display prompts to 16 | * @param {Function} [options.ps1="> "] A function to retrieve the ps1 prompt on 17 | * each command iteration 18 | * @param {Function} [options.ps2="> "] A function to retrieve the ps2 prompt on 19 | * each command iteration 20 | * @param {Function} [options.autocomplete] The autocomplete function to use 21 | * @param {String[]} [options.autocomplete.args] The args that are being autocompleted, 22 | * similar to `readline` docs for `completer` 23 | * @param {Function} [options.autocomplete.callback] Invoke with an `err` parameter (if any) 24 | * followed by an array of potential 25 | * replacements (if any) 26 | * @param {String[]} [options.history=[]] The command history to use for toggling 27 | * command output with up and down 28 | * @param {Function} onCommand Invoked each time the user has input a 29 | * command 30 | * @param {Error} onCommand.err An error occurred receiving the command, if 31 | * any 32 | * @param {String} onCommand.err.code The type of error. Known codes: "SIGINT" The 33 | * user pressed CTRL+C 34 | * @param {String[]} onCommand.args The parsed command arguments from the user 35 | * @param {String} onCommand.str The raw input string from the user 36 | * @param {Function} onCommand.next Invoke this function to get the next 37 | * command. If you want to exit the loop, 38 | * simply don't invoke this, everything is 39 | * already cleaned up 40 | */ 41 | var loop = module.exports.loop = function(options, onCommand) { 42 | if (_.isFunction(options) && !onCommand) { 43 | onCommand = options; 44 | options = null; 45 | } 46 | 47 | options = options || {}; 48 | options.input = options.input || process.stdin; 49 | options.output = options.output || process.stdout; 50 | options.ps1 = _psToFunction(options.ps1); 51 | options.ps2 = _psToFunction(options.ps2); 52 | 53 | return _loop(options, onCommand, options.history); 54 | }; 55 | 56 | /** 57 | * Read a single multi-line command from the user. 58 | * 59 | * @param {Object} [options={}] Optional read arguments 60 | * @param {Stream} [options.input=process.stdin] The input stream to read a command from 61 | * @param {Stream} [options.output=process.stdout] The output stream to display prompts to 62 | * @param {String} [options.ps1="> "] The PS1 prompt label for the first line of 63 | * the command 64 | * @param {String} [options.ps2="> "] The PS2 prompt label for subsequent lines of 65 | * the command 66 | * @param {String[]} [options.history=[]] The command history to use for toggling 67 | * command output with up and down 68 | * @param {Function} [options.autocomplete] The autocomplete function to use 69 | * @param {String[]} [options.autocomplete.args] The args that are being autocompleted, 70 | * similar to `readline` docs for `completer` 71 | * @param {Function} [options.autocomplete.callback] Invoke with an `err` parameter (if any) 72 | * followed by an array of potential 73 | * replacements (if any) 74 | * @param {Function} callback Invoked when a command has been read by the 75 | * user 76 | * @param {Error} callback.err An error that occurred, if any 77 | * @param {String} callback.err.code The type of error. Known codes: "SIGINT" The 78 | * user pressed CTRL+C 79 | * @param {String[]} callback.args The parsed command arguments 80 | * @param {String} callback.str The raw input string from the user 81 | */ 82 | var read = module.exports.read = function(options, callback) { 83 | if (_.isFunction(options) && !callback) { 84 | callback = options; 85 | options = null; 86 | } 87 | 88 | options = options || {}; 89 | options.input = options.input || process.stdin; 90 | options.output = options.output || process.stdout; 91 | options.ps1 = options.ps1 || '> '; 92 | options.ps2 = options.ps2 || '> '; 93 | options.history = options.history || []; 94 | callback = callback || function() {}; 95 | 96 | var state = { 97 | 'input': options.input, 98 | 'output': options.output, 99 | 'rl': null, 100 | 'ps1': options.ps1, 101 | 'ps2': options.ps2, 102 | 'history': new CommandHistory(options.history), 103 | 'autocomplete': options.autocomplete, 104 | 'callback': callback, 105 | 106 | 'currentCommand': '', 107 | 'currentLine': '', 108 | 'onFirstLine': true 109 | }; 110 | 111 | // Create the readline instance and set it up for cool things! 112 | _resetReadLine(state); 113 | 114 | // This isn't done in _resetReadLineAndRead because it binds to the input, not the readline 115 | // instance 116 | _bindKeypress(state); 117 | 118 | return _read(state); 119 | }; 120 | 121 | /*! 122 | * Do the heavy lifting of looping, asking for commands and managing the command history. 123 | */ 124 | function _loop(options, onCommand, _history) { 125 | _history = _history || []; 126 | 127 | var readOptions = _.extend({}, options, { 128 | 'ps1': options.ps1(), 129 | 'ps2': options.ps2(), 130 | 'history': _history 131 | }); 132 | 133 | read(readOptions, function(err, args, str) { 134 | // If the user entered an actual command, put the string in the command history 135 | if (str) { 136 | _history.push(str.split('\n').shift()); 137 | } 138 | 139 | // Provide the args to the caller 140 | onCommand(err, args, str, function() { 141 | // Recursively ask for the next command 142 | return _loop(options, onCommand, _history); 143 | }); 144 | }); 145 | } 146 | 147 | /*! 148 | * Perform the heavy lifting for reading the first and subsequent command lines 149 | */ 150 | function _read(state) { 151 | var ps = (state.onFirstLine) ? state.ps1 : state.ps2; 152 | state.rl.question(ps, function(str) { 153 | // Append this input to the current full command string that we'll try and parse 154 | var commandToParse = state.currentCommand + str; 155 | 156 | // Parse the current full command 157 | var result = CommandParser.parse(commandToParse); 158 | if (!result.open) { 159 | // The multi-line command is completed. Send the result to the caller 160 | return _sendResult(state, null, result.args, result.str); 161 | } 162 | 163 | // We didn't close out the command. We should use the processed string that the command 164 | // parser wants us to continue with, so append that to the parser with the new-line the 165 | // user input, as that will now be a part of the command string 166 | state.currentCommand = result.str + '\n'; 167 | 168 | // Read a second line of input 169 | state.onFirstLine = false; 170 | return _read(state); 171 | }); 172 | 173 | // If we started with a line, clear it so subsequent reads don't start with this. `currentLine` 174 | // is necessary for up-down history replacement 175 | if (state.currentLine) { 176 | state.rl.write(state.currentLine); 177 | state.currentLine = ''; 178 | } 179 | } 180 | 181 | /*! 182 | * Reset the state of the readline instance to get a new prompt 183 | */ 184 | function _resetReadLine(state) { 185 | if (state.rl) { 186 | state.rl.close(); 187 | } 188 | 189 | state.rl = readline.createInterface({ 190 | 'input': state.input, 191 | 'output': state.output, 192 | 'completer': function(line, callback) { 193 | if (!_.isFunction(state.autocomplete)) { 194 | // No autocomplete was provided, do nothing 195 | return callback(null, [[], line]); 196 | } 197 | 198 | CommandAutocomplete.getAutocompleteArguments(state.currentCommand, line, function(abort, args) { 199 | if (abort) { 200 | return callback(null, [[], line]); 201 | } 202 | 203 | state.autocomplete(args, function(err, replacements) { 204 | if (err) { 205 | return callback(err); 206 | } 207 | 208 | CommandAutocomplete.getAutocompleteReplacements(state.currentCommand, line, replacements, function(replacements, toReplace) { 209 | // Convert the arguments into what node-readline expects 210 | return callback(null, [replacements, toReplace]); 211 | }); 212 | }); 213 | }); 214 | } 215 | }); 216 | 217 | /*! 218 | * Monkey-patch the setPrompt method to properly calculate the string length when colors are 219 | * used. :( 220 | * 221 | * http://stackoverflow.com/questions/12075396/adding-colors-to-terminal-prompt-results-in-large-white-space 222 | */ 223 | var rl = state.rl; 224 | rl._setPrompt = rl.setPrompt; 225 | rl.setPrompt = function(prompt, length) { 226 | var strippedLength = null; 227 | if (length) { 228 | strippedLength = length; 229 | } else { 230 | var stripped = prompt.split(/[\r\n]/).pop().stripColors; 231 | if (stripped) { 232 | strippedLength = stripped.length; 233 | } 234 | } 235 | 236 | rl._setPrompt(prompt, strippedLength); 237 | }; 238 | 239 | _bindSigint(state); 240 | } 241 | 242 | /*! 243 | * Bind the SIGINT handling to the readline instance, which effectively returns with an empty 244 | * command. 245 | */ 246 | function _bindSigint(state) { 247 | state.rl.once('SIGINT', function() { 248 | // Mock a new-line and send an empty result 249 | state.output.write('\n'); 250 | return _sendResult(state, _.extend(new Error('User pressed CTRL+C'), {'code': 'SIGINT'})); 251 | }); 252 | } 253 | 254 | /*! 255 | * Bind the keypress handling to the input stream to handle navigating command history 256 | */ 257 | function _bindKeypress(state) { 258 | state.onKeypress = function(ch, key) { 259 | if (!key || !state.onFirstLine) { 260 | // Ignore the up/down history searcing when we've extended to a new line 261 | return; 262 | } 263 | 264 | var replace = null; 265 | if (_keyIs(key, 'up')) { 266 | replace = state.history.prev(); 267 | } else if (_keyIs(key, 'down')) { 268 | replace = state.history.next(); 269 | } 270 | 271 | if (_.isString(replace)) { 272 | // This will close the current prompt, so we can safely get a new one by re-invoking 273 | // `_read` 274 | _resetReadLine(state); 275 | state.currentLine = replace; 276 | return _read(state); 277 | } 278 | }; 279 | 280 | state.input.on('keypress', state.onKeypress); 281 | } 282 | 283 | /*! 284 | * Unbind the keypress handler from the input stream 285 | */ 286 | function _unbindKeypress(state) { 287 | state.input.removeListener('keypress', state.onKeypress); 288 | } 289 | 290 | /*! 291 | * Send the arguments result to the caller and clean up after ourselves 292 | */ 293 | function _sendResult(state, err, args, str) { 294 | _unbindKeypress(state); 295 | state.rl.close(); 296 | 297 | // At this point, we should be able to parse a closed command. If not, something is not right 298 | return state.callback(err, _.pluck(_getFinalArguments(args), 'str'), str); 299 | } 300 | 301 | /*! 302 | * Clean vestigial arguments out of the arguments array so that it may be sent to the caller 303 | * as a completed command 304 | */ 305 | function _getFinalArguments(args) { 306 | return _.filter(args, function(arg) { 307 | // We filter out empty arguments, but only if they weren't explicitly specified with 308 | // quotes. E.g., "--verbose ''" will retain the empty string, while "--verbose " will have 309 | // it stripped 310 | return (arg.quote || arg.str !== ''); 311 | }); 312 | } 313 | 314 | /*! 315 | * Convenience function to convert a potential string or undefined ps string to a function that 316 | * returns the same string. 317 | */ 318 | function _psToFunction(ps) { 319 | var result = null; 320 | if (_.isString(ps)) { 321 | result = function() { 322 | return ps; 323 | }; 324 | } else if (_.isFunction(ps)) { 325 | result = ps; 326 | } else { 327 | result = function() { 328 | return '> '; 329 | }; 330 | } 331 | 332 | return result; 333 | } 334 | 335 | /*! 336 | * Convenience method to determine if the provided keypress key is a verbatim key. Returns false if 337 | * it's not the specified key name or it has been executed with shift, ctrl or a meta key 338 | */ 339 | function _keyIs(key, name) { 340 | return (key.name === name && !key.ctrl && !key.shift && !key.meta); 341 | } 342 | -------------------------------------------------------------------------------- /tests/tests.js: -------------------------------------------------------------------------------- 1 | 2 | var assert = require('assert'); 3 | var readcommand = require('../index'); 4 | 5 | var CommandAutocomplete = require('../lib/autocomplete'); 6 | var InOut = require('./util/inout'); 7 | 8 | describe('Read', function() { 9 | 10 | it('returns a simple single-line command', function(callback) { 11 | var inout = new InOut(); 12 | readcommand.read({'input': inout.input(), 'output': inout.output()}, function(err, args, str) { 13 | assert.strictEqual(args.length, 3); 14 | assert.strictEqual(args[0], 'curl'); 15 | assert.strictEqual(args[1], 'https://www.google.ca'); 16 | assert.strictEqual(args[2], '--insecure'); 17 | assert.strictEqual(str, 'curl https://www.google.ca --insecure'); 18 | return callback(); 19 | }); 20 | inout.write('curl https://www.google.ca --insecure\n'); 21 | }); 22 | 23 | it('parses double-quotes with single-quotes properly in a single-line command', function(callback) { 24 | var inout = new InOut(); 25 | readcommand.read({'input': inout.input(), 'output': inout.output()}, function(err, args, str) { 26 | assert.strictEqual(args.length, 2); 27 | assert.strictEqual(args[0], 'with \' single quote'); 28 | assert.strictEqual(args[1], 'with " double quote'); 29 | assert.strictEqual(str, '"with \' single quote" \'with " double quote\''); 30 | return callback(); 31 | }); 32 | inout.write('"with \' single quote" \'with " double quote\'\n'); 33 | }); 34 | 35 | it('reads escaped quotes and back-slashes as verbatim input', function(callback) { 36 | var inout = new InOut(); 37 | readcommand.read({'input': inout.input(), 'output': inout.output()}, function(err, args, str) { 38 | assert.strictEqual(args.length, 3); 39 | assert.strictEqual(args[0], '\''); 40 | assert.strictEqual(args[1], '"'); 41 | assert.strictEqual(args[2], '\\'); 42 | assert.strictEqual(str, '\\\' \\" \\\\'); 43 | return callback(); 44 | }); 45 | inout.write('\\\' \\" \\\\\n'); 46 | }); 47 | 48 | it('spans to new line when newline is escaped', function(callback) { 49 | var inout = new InOut(); 50 | 51 | // Receive first prompt 52 | inout.once('data', function(data) { 53 | assert.strictEqual(data.toString(), '> '); 54 | 55 | // Write first line and wait for second prompt 56 | inout.write('firstline \\\n'); 57 | inout.once('data', function(data) { 58 | assert.strictEqual(data.toString(), '> '); 59 | 60 | // Write second line. This will invoke the readcommand.read callback and we finish 61 | // the test there 62 | inout.write('secondline\n'); 63 | }); 64 | }); 65 | 66 | readcommand.read({'input': inout.input(), 'output': inout.output()}, function(err, args, str) { 67 | assert.strictEqual(args.length, 2); 68 | assert.strictEqual(args[0], 'firstline'); 69 | assert.strictEqual(args[1], 'secondline'); 70 | return callback(); 71 | }); 72 | }); 73 | 74 | it('consumes new line when there is an open double-quote', function(callback) { 75 | var inout = new InOut(); 76 | 77 | // Receive first prompt 78 | inout.once('data', function(data) { 79 | assert.strictEqual(data.toString(), '> '); 80 | 81 | // Write first line and wait for second prompt 82 | inout.write('this line is "constrained by\n'); 83 | inout.once('data', function(data) { 84 | assert.strictEqual(data.toString(), '> '); 85 | 86 | // Write second line, which still doesn't close, wait for third prompt 87 | inout.write('a double-\'\n'); 88 | inout.once('data', function(data) { 89 | assert.strictEqual(data.toString(), '> '); 90 | 91 | // Finish the last line. Test will finish in the readcommand.read callback 92 | inout.write('and now we finish" it\n'); 93 | }); 94 | }); 95 | }); 96 | 97 | readcommand.read({'input': inout.input(), 'output': inout.output()}, function(err, args, str) { 98 | assert.strictEqual(args.length, 5); 99 | assert.strictEqual(args[0], 'this'); 100 | assert.strictEqual(args[1], 'line'); 101 | assert.strictEqual(args[2], 'is'); 102 | assert.strictEqual(args[3], 'constrained by\na double-\'\nand now we finish'); 103 | assert.strictEqual(args[4], 'it'); 104 | assert.strictEqual(str, 'this line is "constrained by\na double-\'\nand now we finish" it'); 105 | return callback(); 106 | }); 107 | }); 108 | 109 | it('consumes new line when there is an open single-quote', function(callback) { 110 | var inout = new InOut(); 111 | 112 | // Receive first prompt 113 | inout.once('data', function(data) { 114 | assert.strictEqual(data.toString(), '> '); 115 | 116 | // Write first line and wait for second prompt 117 | inout.write('this line is \'constrained by\n'); 118 | inout.once('data', function(data) { 119 | assert.strictEqual(data.toString(), '> '); 120 | 121 | // Write second line, which still doesn't close, wait for third prompt 122 | inout.write('a single-\\\'\n'); 123 | inout.once('data', function(data) { 124 | assert.strictEqual(data.toString(), '> '); 125 | 126 | // Finish the last line. Test will finish in the readcommand.read callback 127 | inout.write('and now we finish\' it\n'); 128 | }); 129 | }); 130 | }); 131 | 132 | readcommand.read({'input': inout.input(), 'output': inout.output()}, function(err, args, str) { 133 | assert.strictEqual(args.length, 5); 134 | assert.strictEqual(args[0], 'this'); 135 | assert.strictEqual(args[1], 'line'); 136 | assert.strictEqual(args[2], 'is'); 137 | assert.strictEqual(args[3], 'constrained by\na single-\'\nand now we finish'); 138 | assert.strictEqual(args[4], 'it'); 139 | assert.strictEqual(str, 'this line is \'constrained by\na single-\\\'\nand now we finish\' it'); 140 | return callback(); 141 | }); 142 | }); 143 | 144 | it('shows custom prompts', function(callback) { 145 | var inout = new InOut(); 146 | 147 | // Receive first prompt 148 | inout.once('data', function(data) { 149 | // Ensure the prompt is the custom "ps1" prompt 150 | assert.strictEqual(data.toString(), 'ps1'); 151 | 152 | // Write first line and wait for second prompt 153 | inout.write('firstline \\\n'); 154 | inout.once('data', function(data) { 155 | // Ensure the prompt is the custom "ps2" prompt 156 | assert.strictEqual(data.toString(), 'ps2'); 157 | 158 | // Write second line. This will invoke the readcommand.read callback and we finish 159 | // the test there 160 | inout.write('secondline\n'); 161 | }); 162 | }); 163 | 164 | readcommand.read({'input': inout.input(), 'output': inout.output(), 'ps1': 'ps1', 'ps2': 'ps2'}, function(err, args, str) { 165 | assert.strictEqual(args.length, 2); 166 | assert.strictEqual(args[0], 'firstline'); 167 | assert.strictEqual(args[1], 'secondline'); 168 | return callback(); 169 | }); 170 | }); 171 | }); 172 | 173 | describe('Loop', function() { 174 | 175 | it('reads a series of commands from the input', function(callback) { 176 | var inout = new InOut(); 177 | 178 | var one = false; 179 | var two = false; 180 | var three = false; 181 | 182 | // Kick off the first prompt 183 | inout.once('data', function(data) { 184 | assert.strictEqual(data.toString(), '> '); 185 | inout.write('one\n'); 186 | }); 187 | 188 | readcommand.loop({'input': inout.input(), 'output': inout.output()}, function(err, args, str, next) { 189 | // Receive the "one" command 190 | if (args[0] === 'one') { 191 | one = true; 192 | assert.strictEqual(two, false); 193 | assert.strictEqual(three, false); 194 | next(); 195 | 196 | inout.once('data', function(data) { 197 | assert.strictEqual(data.toString(), '> '); 198 | inout.write('two\n'); 199 | }); 200 | } else if (args[0] === 'two') { 201 | two = true; 202 | assert.strictEqual(one, true); 203 | assert.strictEqual(three, false); 204 | next(); 205 | 206 | inout.once('data', function(data) { 207 | assert.strictEqual(data.toString(), '> '); 208 | inout.write('three\n'); 209 | }); 210 | } else if (args[0] === 'three') { 211 | three = true; 212 | assert.strictEqual(one, true); 213 | assert.strictEqual(two, true); 214 | return callback(); 215 | } else { 216 | assert.fail(); 217 | } 218 | }); 219 | }); 220 | }); 221 | 222 | describe('Auto-complete', function() { 223 | 224 | describe('#getAutocompleteArguments', function() { 225 | 226 | it('returns an empty args array with an empty string', function(callback) { 227 | CommandAutocomplete.getAutocompleteArguments(null, null, function(abort, args) { 228 | assert.ok(!abort); 229 | assert.strictEqual(args.length, 0); 230 | return callback(); 231 | }); 232 | }); 233 | 234 | it('aborts when input string ends in an escape sequence', function(callback) { 235 | CommandAutocomplete.getAutocompleteArguments(null, '\\', function(abort, args) { 236 | assert.ok(abort); 237 | return callback(); 238 | }); 239 | }); 240 | 241 | it('aborts when input string spans two lines due to escape sequence', function(callback) { 242 | CommandAutocomplete.getAutocompleteArguments('my args\\\n', 'are', function(abort, args) { 243 | assert.ok(abort); 244 | return callback(); 245 | }); 246 | }); 247 | 248 | it('aborts when input string spans two lines due to double-quote', function(callback) { 249 | CommandAutocomplete.getAutocompleteArguments('my "args\n', 'are', function(abort, args) { 250 | assert.ok(abort); 251 | return callback(); 252 | }); 253 | }); 254 | 255 | it('aborts when input string spans two lines due to single-quote', function(callback) { 256 | CommandAutocomplete.getAutocompleteArguments('my \'args\n', 'are', function(abort, args) { 257 | assert.ok(abort); 258 | return callback(); 259 | }); 260 | }); 261 | 262 | it('does not abort when empty argument spans to second line with escape sequence', function(callback) { 263 | CommandAutocomplete.getAutocompleteArguments('my args \\\n', '', function(abort, args) { 264 | assert.ok(!abort); 265 | assert.strictEqual(args.length, 3); 266 | assert.strictEqual(args[0], 'my'); 267 | assert.strictEqual(args[1], 'args'); 268 | assert.strictEqual(args[2], ''); 269 | return callback(); 270 | }); 271 | }); 272 | 273 | it('provides unquoted arguments', function(callback) { 274 | CommandAutocomplete.getAutocompleteArguments(null, 'my commands are', function(abort, args) { 275 | assert.ok(!abort); 276 | assert.strictEqual(args.length, 3); 277 | assert.strictEqual(args[0], 'my'); 278 | assert.strictEqual(args[1], 'commands'); 279 | assert.strictEqual(args[2], 'are'); 280 | return callback(); 281 | }); 282 | }); 283 | 284 | it('provides double-quote arguments that are unclosed at the end', function(callback) { 285 | CommandAutocomplete.getAutocompleteArguments(null, 'my commands "are so', function(abort, args) { 286 | assert.ok(!abort); 287 | assert.strictEqual(args.length, 3); 288 | assert.strictEqual(args[0], 'my'); 289 | assert.strictEqual(args[1], 'commands'); 290 | assert.strictEqual(args[2], 'are so'); 291 | return callback(); 292 | }); 293 | }); 294 | 295 | it('provides single-quote arguments that are unclosed at the end', function(callback) { 296 | CommandAutocomplete.getAutocompleteArguments(null, 'my commands \'are so', function(abort, args) { 297 | assert.ok(!abort); 298 | assert.strictEqual(args.length, 3); 299 | assert.strictEqual(args[0], 'my'); 300 | assert.strictEqual(args[1], 'commands'); 301 | assert.strictEqual(args[2], 'are so'); 302 | return callback(); 303 | }); 304 | }); 305 | 306 | it('provides double-quote arguments that are closed at the end', function(callback) { 307 | CommandAutocomplete.getAutocompleteArguments(null, 'my commands "are so"', function(abort, args) { 308 | assert.ok(!abort); 309 | assert.strictEqual(args.length, 3); 310 | assert.strictEqual(args[0], 'my'); 311 | assert.strictEqual(args[1], 'commands'); 312 | assert.strictEqual(args[2], 'are so'); 313 | return callback(); 314 | }); 315 | }); 316 | 317 | it('provides single-quote arguments that are closed at the end', function(callback) { 318 | CommandAutocomplete.getAutocompleteArguments(null, 'my commands \'are so\'', function(abort, args) { 319 | assert.ok(!abort); 320 | assert.strictEqual(args.length, 3); 321 | assert.strictEqual(args[0], 'my'); 322 | assert.strictEqual(args[1], 'commands'); 323 | assert.strictEqual(args[2], 'are so'); 324 | return callback(); 325 | }); 326 | }); 327 | 328 | it('filters empty arguments except for the last one', function(callback) { 329 | CommandAutocomplete.getAutocompleteArguments(null, ' my commands are ', function(abort, args) { 330 | assert.ok(!abort); 331 | assert.strictEqual(args.length, 4); 332 | assert.strictEqual(args[0], 'my'); 333 | assert.strictEqual(args[1], 'commands'); 334 | assert.strictEqual(args[2], 'are'); 335 | assert.strictEqual(args[3], ''); 336 | return callback(); 337 | }); 338 | }); 339 | 340 | it('does not abort when final argument is fully in buffer due to escape sequence', function(callback) { 341 | CommandAutocomplete.getAutocompleteArguments('first line wi\\\n', 'th args', function(abort, args) { 342 | assert.ok(!abort); 343 | assert.strictEqual(args.length, 4); 344 | assert.strictEqual(args[0], 'first'); 345 | assert.strictEqual(args[1], 'line'); 346 | assert.strictEqual(args[2], 'with'); 347 | assert.strictEqual(args[3], 'args'); 348 | return callback(); 349 | }); 350 | }); 351 | 352 | it('does not abort when final argument is full in buffer due to double-quote', function(callback) { 353 | CommandAutocomplete.getAutocompleteArguments('first line "wi\n', 'th" args', function(abort, args) { 354 | assert.ok(!abort); 355 | assert.strictEqual(args.length, 4); 356 | assert.strictEqual(args[0], 'first'); 357 | assert.strictEqual(args[1], 'line'); 358 | assert.strictEqual(args[2], 'wi\nth'); 359 | assert.strictEqual(args[3], 'args'); 360 | return callback(); 361 | }); 362 | }); 363 | 364 | it('does not abort when final argument is full in buffer due to single-quote', function(callback) { 365 | CommandAutocomplete.getAutocompleteArguments('first line \'wi\n', 'th\' args', function(abort, args) { 366 | assert.ok(!abort); 367 | assert.strictEqual(args.length, 4); 368 | assert.strictEqual(args[0], 'first'); 369 | assert.strictEqual(args[1], 'line'); 370 | assert.strictEqual(args[2], 'wi\nth'); 371 | assert.strictEqual(args[3], 'args'); 372 | return callback(); 373 | }); 374 | }); 375 | 376 | it('does not abort when quoted arguments starts immediately on new line', function(callback) { 377 | CommandAutocomplete.getAutocompleteArguments('first line \\\n', '"my argument"', function(abort, args) { 378 | assert.ok(!abort); 379 | assert.strictEqual(args.length, 3); 380 | assert.strictEqual(args[0], 'first'); 381 | assert.strictEqual(args[1], 'line'); 382 | assert.strictEqual(args[2], 'my argument'); 383 | return callback(); 384 | }); 385 | }); 386 | }); 387 | 388 | describe('#getAutocompleteReplacements', function() { 389 | 390 | it('replaces single line command at very start of line', function(callback) { 391 | CommandAutocomplete.getAutocompleteReplacements(null, 'my', ['mycommandisbad'], function(replacements, toReplace) { 392 | assert.strictEqual(replacements.length, 1); 393 | assert.strictEqual(replacements[0], 'mycommandisbad '); 394 | assert.strictEqual(toReplace, 'my'); 395 | return callback(); 396 | }); 397 | }); 398 | 399 | it('replaces single line command without quotes', function(callback) { 400 | CommandAutocomplete.getAutocompleteReplacements(null, 'my command is good', ['bad'], function(replacements, toReplace) { 401 | assert.strictEqual(replacements.length, 1); 402 | assert.strictEqual(replacements[0], 'bad '); 403 | assert.strictEqual(toReplace, 'good'); 404 | return callback(); 405 | }); 406 | }); 407 | 408 | it('replaces single line command with double-quotes', function(callback) { 409 | CommandAutocomplete.getAutocompleteReplacements(null, 'my command is "good yes', ['good no'], function(replacements, toReplace) { 410 | assert.strictEqual(replacements.length, 1); 411 | assert.strictEqual(replacements[0], '"good no" '); 412 | assert.strictEqual(toReplace, '"good yes'); 413 | return callback(); 414 | }); 415 | }); 416 | 417 | it('replaces single line command with single-quotes', function(callback) { 418 | CommandAutocomplete.getAutocompleteReplacements(null, 'my command is \'good yes', ['good no'], function(replacements, toReplace) { 419 | assert.strictEqual(replacements.length, 1); 420 | assert.strictEqual(replacements[0], '\'good no\' '); 421 | assert.strictEqual(toReplace, '\'good yes'); 422 | return callback(); 423 | }); 424 | }); 425 | 426 | it('replaces escaped multi-line command without quotes', function(callback) { 427 | CommandAutocomplete.getAutocompleteReplacements('my command i\\\n', 's good', ['bad'], function(replacements, toReplace) { 428 | assert.strictEqual(replacements.length, 1); 429 | assert.strictEqual(replacements[0], 'bad '); 430 | assert.strictEqual(toReplace, 'good'); 431 | return callback(); 432 | }); 433 | }); 434 | 435 | it('replaces escaped multi-line commands with double-quotes', function(callback) { 436 | CommandAutocomplete.getAutocompleteReplacements('my command i\\\n', 's "good yes', ['good no'], function(replacements, toReplace) { 437 | assert.strictEqual(replacements.length, 1); 438 | assert.strictEqual(replacements[0], '"good no" '); 439 | assert.strictEqual(toReplace, '"good yes'); 440 | return callback(); 441 | }); 442 | }); 443 | 444 | it('replaces escaped multi-line commands with single-quotes', function(callback) { 445 | CommandAutocomplete.getAutocompleteReplacements('my command i\\\n', 's \'good yes', ['good no'], function(replacements, toReplace) { 446 | assert.strictEqual(replacements.length, 1); 447 | assert.strictEqual(replacements[0], '\'good no\' '); 448 | assert.strictEqual(toReplace, '\'good yes'); 449 | return callback(); 450 | }); 451 | }); 452 | 453 | it('replaces double-quoted multi-line command without quotes', function(callback) { 454 | CommandAutocomplete.getAutocompleteReplacements('my command "i\n', 's" good', ['bad'], function(replacements, toReplace) { 455 | assert.strictEqual(replacements.length, 1); 456 | assert.strictEqual(replacements[0], 'bad '); 457 | assert.strictEqual(toReplace, 'good'); 458 | return callback(); 459 | }); 460 | }); 461 | 462 | it('replaces double-quoted multi-line commands with double-quotes', function(callback) { 463 | CommandAutocomplete.getAutocompleteReplacements('my command "i\n', 's" "good yes', ['good no'], function(replacements, toReplace) { 464 | assert.strictEqual(replacements.length, 1); 465 | assert.strictEqual(replacements[0], '"good no" '); 466 | assert.strictEqual(toReplace, '"good yes'); 467 | return callback(); 468 | }); 469 | }); 470 | 471 | it('replaces double-quoted multi-line commands with single-quotes', function(callback) { 472 | CommandAutocomplete.getAutocompleteReplacements('my command "i\n', 's" \'good yes', ['good no'], function(replacements, toReplace) { 473 | assert.strictEqual(replacements.length, 1); 474 | assert.strictEqual(replacements[0], '\'good no\' '); 475 | assert.strictEqual(toReplace, '\'good yes'); 476 | return callback(); 477 | }); 478 | }); 479 | 480 | it('replaces single-quoted multi-line command without quotes', function(callback) { 481 | CommandAutocomplete.getAutocompleteReplacements('my command \'i\n', 's\' good', ['bad'], function(replacements, toReplace) { 482 | assert.strictEqual(replacements.length, 1); 483 | assert.strictEqual(replacements[0], 'bad '); 484 | assert.strictEqual(toReplace, 'good'); 485 | return callback(); 486 | }); 487 | }); 488 | 489 | it('replaces single-quoted multi-line commands with double-quotes', function(callback) { 490 | CommandAutocomplete.getAutocompleteReplacements('my command \'i\n', 's\' "good yes', ['good no'], function(replacements, toReplace) { 491 | assert.strictEqual(replacements.length, 1); 492 | assert.strictEqual(replacements[0], '"good no" '); 493 | assert.strictEqual(toReplace, '"good yes'); 494 | return callback(); 495 | }); 496 | }); 497 | 498 | it('replaces single-quoted multi-line commands with single-quotes', function(callback) { 499 | CommandAutocomplete.getAutocompleteReplacements('my command \'i\n', 's\' \'good yes', ['good no'], function(replacements, toReplace) { 500 | assert.strictEqual(replacements.length, 1); 501 | assert.strictEqual(replacements[0], '\'good no\' '); 502 | assert.strictEqual(toReplace, '\'good yes'); 503 | return callback(); 504 | }); 505 | }); 506 | 507 | it('replaces multi-line command at very start of line', function(callback) { 508 | CommandAutocomplete.getAutocompleteReplacements('my command \\\n', 'is', ['isbad'], function(replacements, toReplace) { 509 | assert.strictEqual(replacements.length, 1); 510 | assert.strictEqual(replacements[0], 'isbad '); 511 | assert.strictEqual(toReplace, 'is'); 512 | return callback(); 513 | }); 514 | }); 515 | 516 | it('quotes replacements that contain spaces', function(callback) { 517 | CommandAutocomplete.getAutocompleteReplacements(null, 'my', ['command is bad'], function(replacements, toReplace) { 518 | assert.strictEqual(replacements.length, 1); 519 | assert.strictEqual(replacements[0], '"command is bad" '); 520 | assert.strictEqual(toReplace, 'my'); 521 | return callback(); 522 | }); 523 | }); 524 | 525 | it('appends replacements to the command string when command ends with single white-space', function(callback) { 526 | CommandAutocomplete.getAutocompleteReplacements(null, 'number ', ['123456789'], function(replacements, toReplace) { 527 | assert.strictEqual(replacements.length, 1); 528 | assert.strictEqual(replacements[0], '123456789 '); 529 | assert.strictEqual(toReplace, ''); 530 | return callback(); 531 | }); 532 | }); 533 | 534 | it('appends replacements to the command string when command ends with multiple white-space', function(callback) { 535 | CommandAutocomplete.getAutocompleteReplacements(null, 'number ', ['123456789'], function(replacements, toReplace) { 536 | assert.strictEqual(replacements.length, 1); 537 | assert.strictEqual(replacements[0], '123456789 '); 538 | assert.strictEqual(toReplace, ''); 539 | return callback(); 540 | }); 541 | }); 542 | 543 | it('appends replacements to the command string when command ends with all white-space then a new line', function(callback) { 544 | CommandAutocomplete.getAutocompleteReplacements('number \\\n', null, ['123456789'], function(replacements, toReplace) { 545 | assert.strictEqual(replacements.length, 1); 546 | assert.strictEqual(replacements[0], '123456789 '); 547 | assert.strictEqual(toReplace, ''); 548 | return callback(); 549 | }); 550 | }); 551 | 552 | it('appends replacements to the command string when command ends with all white-space then a new line and more white-space', function(callback) { 553 | CommandAutocomplete.getAutocompleteReplacements('number \\\n', ' ', ['123456789'], function(replacements, toReplace) { 554 | assert.strictEqual(replacements.length, 1); 555 | assert.strictEqual(replacements[0], '123456789 '); 556 | assert.strictEqual(toReplace, ''); 557 | return callback(); 558 | }); 559 | }); 560 | }); 561 | }); 562 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@^7.0.0": 6 | version "7.14.5" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" 8 | integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw== 9 | dependencies: 10 | "@babel/highlight" "^7.14.5" 11 | 12 | "@babel/helper-validator-identifier@^7.14.5": 13 | version "7.14.5" 14 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz#d0f0e277c512e0c938277faa85a3968c9a44c0e8" 15 | integrity sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg== 16 | 17 | "@babel/highlight@^7.14.5": 18 | version "7.14.5" 19 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" 20 | integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== 21 | dependencies: 22 | "@babel/helper-validator-identifier" "^7.14.5" 23 | chalk "^2.0.0" 24 | js-tokens "^4.0.0" 25 | 26 | "@iarna/toml@2.2.5": 27 | version "2.2.5" 28 | resolved "https://registry.yarnpkg.com/@iarna/toml/-/toml-2.2.5.tgz#b32366c89b43c6f8cefbdefac778b9c828e3ba8c" 29 | integrity sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg== 30 | 31 | "@nodelib/fs.scandir@2.1.5": 32 | version "2.1.5" 33 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" 34 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 35 | dependencies: 36 | "@nodelib/fs.stat" "2.0.5" 37 | run-parallel "^1.1.9" 38 | 39 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": 40 | version "2.0.5" 41 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" 42 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 43 | 44 | "@nodelib/fs.walk@^1.2.3": 45 | version "1.2.7" 46 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz#94c23db18ee4653e129abd26fb06f870ac9e1ee2" 47 | integrity sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA== 48 | dependencies: 49 | "@nodelib/fs.scandir" "2.1.5" 50 | fastq "^1.6.0" 51 | 52 | "@octokit/auth-token@^2.4.4": 53 | version "2.4.5" 54 | resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.4.5.tgz#568ccfb8cb46f36441fac094ce34f7a875b197f3" 55 | integrity sha512-BpGYsPgJt05M7/L/5FoE1PiAbdxXFZkX/3kDYcsvd1v6UhlnE5e96dTDr0ezX/EFwciQxf3cNV0loipsURU+WA== 56 | dependencies: 57 | "@octokit/types" "^6.0.3" 58 | 59 | "@octokit/core@^3.5.0": 60 | version "3.5.1" 61 | resolved "https://registry.yarnpkg.com/@octokit/core/-/core-3.5.1.tgz#8601ceeb1ec0e1b1b8217b960a413ed8e947809b" 62 | integrity sha512-omncwpLVxMP+GLpLPgeGJBF6IWJFjXDS5flY5VbppePYX9XehevbDykRH9PdCdvqt9TS5AOTiDide7h0qrkHjw== 63 | dependencies: 64 | "@octokit/auth-token" "^2.4.4" 65 | "@octokit/graphql" "^4.5.8" 66 | "@octokit/request" "^5.6.0" 67 | "@octokit/request-error" "^2.0.5" 68 | "@octokit/types" "^6.0.3" 69 | before-after-hook "^2.2.0" 70 | universal-user-agent "^6.0.0" 71 | 72 | "@octokit/endpoint@^6.0.1": 73 | version "6.0.12" 74 | resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.12.tgz#3b4d47a4b0e79b1027fb8d75d4221928b2d05658" 75 | integrity sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA== 76 | dependencies: 77 | "@octokit/types" "^6.0.3" 78 | is-plain-object "^5.0.0" 79 | universal-user-agent "^6.0.0" 80 | 81 | "@octokit/graphql@^4.5.8": 82 | version "4.6.4" 83 | resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-4.6.4.tgz#0c3f5bed440822182e972317122acb65d311a5ed" 84 | integrity sha512-SWTdXsVheRmlotWNjKzPOb6Js6tjSqA2a8z9+glDJng0Aqjzti8MEWOtuT8ZSu6wHnci7LZNuarE87+WJBG4vg== 85 | dependencies: 86 | "@octokit/request" "^5.6.0" 87 | "@octokit/types" "^6.0.3" 88 | universal-user-agent "^6.0.0" 89 | 90 | "@octokit/openapi-types@^7.3.2": 91 | version "7.3.2" 92 | resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-7.3.2.tgz#065ce49b338043ec7f741316ce06afd4d459d944" 93 | integrity sha512-oJhK/yhl9Gt430OrZOzAl2wJqR0No9445vmZ9Ey8GjUZUpwuu/vmEFP0TDhDXdpGDoxD6/EIFHJEcY8nHXpDTA== 94 | 95 | "@octokit/plugin-paginate-rest@^2.6.2": 96 | version "2.13.5" 97 | resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.13.5.tgz#e459f9b5dccbe0a53f039a355d5b80c0a2b0dc57" 98 | integrity sha512-3WSAKBLa1RaR/7GG+LQR/tAZ9fp9H9waE9aPXallidyci9oZsfgsLn5M836d3LuDC6Fcym+2idRTBpssHZePVg== 99 | dependencies: 100 | "@octokit/types" "^6.13.0" 101 | 102 | "@octokit/plugin-request-log@^1.0.2": 103 | version "1.0.4" 104 | resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85" 105 | integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== 106 | 107 | "@octokit/plugin-rest-endpoint-methods@5.3.1": 108 | version "5.3.1" 109 | resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.3.1.tgz#deddce769b4ec3179170709ab42e4e9e6195aaa9" 110 | integrity sha512-3B2iguGmkh6bQQaVOtCsS0gixrz8Lg0v4JuXPqBcFqLKuJtxAUf3K88RxMEf/naDOI73spD+goJ/o7Ie7Cvdjg== 111 | dependencies: 112 | "@octokit/types" "^6.16.2" 113 | deprecation "^2.3.1" 114 | 115 | "@octokit/request-error@^2.0.5", "@octokit/request-error@^2.1.0": 116 | version "2.1.0" 117 | resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.1.0.tgz#9e150357831bfc788d13a4fd4b1913d60c74d677" 118 | integrity sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg== 119 | dependencies: 120 | "@octokit/types" "^6.0.3" 121 | deprecation "^2.0.0" 122 | once "^1.4.0" 123 | 124 | "@octokit/request@^5.6.0": 125 | version "5.6.0" 126 | resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.6.0.tgz#6084861b6e4fa21dc40c8e2a739ec5eff597e672" 127 | integrity sha512-4cPp/N+NqmaGQwbh3vUsYqokQIzt7VjsgTYVXiwpUP2pxd5YiZB2XuTedbb0SPtv9XS7nzAKjAuQxmY8/aZkiA== 128 | dependencies: 129 | "@octokit/endpoint" "^6.0.1" 130 | "@octokit/request-error" "^2.1.0" 131 | "@octokit/types" "^6.16.1" 132 | is-plain-object "^5.0.0" 133 | node-fetch "^2.6.1" 134 | universal-user-agent "^6.0.0" 135 | 136 | "@octokit/rest@18.6.0": 137 | version "18.6.0" 138 | resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-18.6.0.tgz#9a8457374c78c2773d3ab3f50aaffc62f3ed4f76" 139 | integrity sha512-MdHuXHDJM7e5sUBe3K9tt7th0cs4csKU5Bb52LRi2oHAeIMrMZ4XqaTrEv660HoUPoM1iDlnj27Ab/Nh3MtwlA== 140 | dependencies: 141 | "@octokit/core" "^3.5.0" 142 | "@octokit/plugin-paginate-rest" "^2.6.2" 143 | "@octokit/plugin-request-log" "^1.0.2" 144 | "@octokit/plugin-rest-endpoint-methods" "5.3.1" 145 | 146 | "@octokit/types@^6.0.3", "@octokit/types@^6.13.0", "@octokit/types@^6.16.1", "@octokit/types@^6.16.2": 147 | version "6.16.4" 148 | resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.16.4.tgz#d24f5e1bacd2fe96d61854b5bda0e88cf8288dfe" 149 | integrity sha512-UxhWCdSzloULfUyamfOg4dJxV9B+XjgrIZscI0VCbp4eNrjmorGEw+4qdwcpTsu6DIrm9tQsFQS2pK5QkqQ04A== 150 | dependencies: 151 | "@octokit/openapi-types" "^7.3.2" 152 | 153 | "@sindresorhus/is@^0.14.0": 154 | version "0.14.0" 155 | resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" 156 | integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== 157 | 158 | "@sindresorhus/is@^4.0.0": 159 | version "4.0.1" 160 | resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.0.1.tgz#d26729db850fa327b7cacc5522252194404226f5" 161 | integrity sha512-Qm9hBEBu18wt1PO2flE7LPb30BHMQt1eQgbV76YntdNk73XZGpn3izvGTYxbGgzXKgbCjiia0uxTd3aTNQrY/g== 162 | 163 | "@szmarczak/http-timer@^1.1.2": 164 | version "1.1.2" 165 | resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" 166 | integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== 167 | dependencies: 168 | defer-to-connect "^1.0.1" 169 | 170 | "@szmarczak/http-timer@^4.0.5": 171 | version "4.0.5" 172 | resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.5.tgz#bfbd50211e9dfa51ba07da58a14cdfd333205152" 173 | integrity sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ== 174 | dependencies: 175 | defer-to-connect "^2.0.0" 176 | 177 | "@types/cacheable-request@^6.0.1": 178 | version "6.0.1" 179 | resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.1.tgz#5d22f3dded1fd3a84c0bbeb5039a7419c2c91976" 180 | integrity sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ== 181 | dependencies: 182 | "@types/http-cache-semantics" "*" 183 | "@types/keyv" "*" 184 | "@types/node" "*" 185 | "@types/responselike" "*" 186 | 187 | "@types/http-cache-semantics@*": 188 | version "4.0.0" 189 | resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz#9140779736aa2655635ee756e2467d787cfe8a2a" 190 | integrity sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A== 191 | 192 | "@types/keyv@*": 193 | version "3.1.1" 194 | resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.1.tgz#e45a45324fca9dab716ab1230ee249c9fb52cfa7" 195 | integrity sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw== 196 | dependencies: 197 | "@types/node" "*" 198 | 199 | "@types/node@*": 200 | version "15.12.4" 201 | resolved "https://registry.yarnpkg.com/@types/node/-/node-15.12.4.tgz#e1cf817d70a1e118e81922c4ff6683ce9d422e26" 202 | integrity sha512-zrNj1+yqYF4WskCMOHwN+w9iuD12+dGm0rQ35HLl9/Ouuq52cEtd0CH9qMgrdNmi5ejC1/V7vKEXYubB+65DkA== 203 | 204 | "@types/parse-json@^4.0.0": 205 | version "4.0.0" 206 | resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" 207 | integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== 208 | 209 | "@types/responselike@*", "@types/responselike@^1.0.0": 210 | version "1.0.0" 211 | resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" 212 | integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== 213 | dependencies: 214 | "@types/node" "*" 215 | 216 | "@ungap/promise-all-settled@1.1.2": 217 | version "1.1.2" 218 | resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" 219 | integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== 220 | 221 | ansi-align@^3.0.0: 222 | version "3.0.0" 223 | resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" 224 | integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== 225 | dependencies: 226 | string-width "^3.0.0" 227 | 228 | ansi-colors@4.1.1: 229 | version "4.1.1" 230 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" 231 | integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== 232 | 233 | ansi-escapes@^4.2.1: 234 | version "4.3.2" 235 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" 236 | integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== 237 | dependencies: 238 | type-fest "^0.21.3" 239 | 240 | ansi-regex@^3.0.0: 241 | version "3.0.0" 242 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 243 | integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= 244 | 245 | ansi-regex@^4.1.0: 246 | version "4.1.0" 247 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" 248 | integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== 249 | 250 | ansi-regex@^5.0.0: 251 | version "5.0.0" 252 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" 253 | integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== 254 | 255 | ansi-styles@^3.2.1: 256 | version "3.2.1" 257 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 258 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 259 | dependencies: 260 | color-convert "^1.9.0" 261 | 262 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 263 | version "4.3.0" 264 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 265 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 266 | dependencies: 267 | color-convert "^2.0.1" 268 | 269 | anymatch@~3.1.1: 270 | version "3.1.2" 271 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" 272 | integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== 273 | dependencies: 274 | normalize-path "^3.0.0" 275 | picomatch "^2.0.4" 276 | 277 | argparse@^2.0.1: 278 | version "2.0.1" 279 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 280 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 281 | 282 | array-union@^2.1.0: 283 | version "2.1.0" 284 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" 285 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 286 | 287 | async-retry@1.3.1: 288 | version "1.3.1" 289 | resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.3.1.tgz#139f31f8ddce50c0870b0ba558a6079684aaed55" 290 | integrity sha512-aiieFW/7h3hY0Bq5d+ktDBejxuwR78vRu9hDUdR8rNhSaQ29VzPL4AoIRG7D/c7tdenwOcKvgPM6tIxB3cB6HA== 291 | dependencies: 292 | retry "0.12.0" 293 | 294 | asynckit@^0.4.0: 295 | version "0.4.0" 296 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 297 | integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= 298 | 299 | balanced-match@^1.0.0: 300 | version "1.0.2" 301 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 302 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 303 | 304 | base64-js@^1.3.1: 305 | version "1.5.1" 306 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" 307 | integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== 308 | 309 | before-after-hook@^2.2.0: 310 | version "2.2.2" 311 | resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.2.tgz#a6e8ca41028d90ee2c24222f201c90956091613e" 312 | integrity sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ== 313 | 314 | binary-extensions@^2.0.0: 315 | version "2.2.0" 316 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 317 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 318 | 319 | bl@^4.1.0: 320 | version "4.1.0" 321 | resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" 322 | integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== 323 | dependencies: 324 | buffer "^5.5.0" 325 | inherits "^2.0.4" 326 | readable-stream "^3.4.0" 327 | 328 | boxen@^5.0.0: 329 | version "5.0.1" 330 | resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.0.1.tgz#657528bdd3f59a772b8279b831f27ec2c744664b" 331 | integrity sha512-49VBlw+PrWEF51aCmy7QIteYPIFZxSpvqBdP/2itCPPlJ49kj9zg/XPRFrdkne2W+CfwXUls8exMvu1RysZpKA== 332 | dependencies: 333 | ansi-align "^3.0.0" 334 | camelcase "^6.2.0" 335 | chalk "^4.1.0" 336 | cli-boxes "^2.2.1" 337 | string-width "^4.2.0" 338 | type-fest "^0.20.2" 339 | widest-line "^3.1.0" 340 | wrap-ansi "^7.0.0" 341 | 342 | brace-expansion@^1.1.7: 343 | version "1.1.11" 344 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 345 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 346 | dependencies: 347 | balanced-match "^1.0.0" 348 | concat-map "0.0.1" 349 | 350 | braces@^3.0.1, braces@~3.0.2: 351 | version "3.0.2" 352 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 353 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 354 | dependencies: 355 | fill-range "^7.0.1" 356 | 357 | browser-stdout@1.3.1: 358 | version "1.3.1" 359 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" 360 | integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== 361 | 362 | buffer@^5.5.0: 363 | version "5.7.1" 364 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" 365 | integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== 366 | dependencies: 367 | base64-js "^1.3.1" 368 | ieee754 "^1.1.13" 369 | 370 | cacheable-lookup@^5.0.3: 371 | version "5.0.4" 372 | resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" 373 | integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== 374 | 375 | cacheable-request@^6.0.0: 376 | version "6.1.0" 377 | resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" 378 | integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== 379 | dependencies: 380 | clone-response "^1.0.2" 381 | get-stream "^5.1.0" 382 | http-cache-semantics "^4.0.0" 383 | keyv "^3.0.0" 384 | lowercase-keys "^2.0.0" 385 | normalize-url "^4.1.0" 386 | responselike "^1.0.2" 387 | 388 | cacheable-request@^7.0.1: 389 | version "7.0.2" 390 | resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27" 391 | integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== 392 | dependencies: 393 | clone-response "^1.0.2" 394 | get-stream "^5.1.0" 395 | http-cache-semantics "^4.0.0" 396 | keyv "^4.0.0" 397 | lowercase-keys "^2.0.0" 398 | normalize-url "^6.0.1" 399 | responselike "^2.0.0" 400 | 401 | call-bind@^1.0.0: 402 | version "1.0.2" 403 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" 404 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== 405 | dependencies: 406 | function-bind "^1.1.1" 407 | get-intrinsic "^1.0.2" 408 | 409 | callsites@^3.0.0: 410 | version "3.1.0" 411 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 412 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 413 | 414 | camelcase@^6.0.0, camelcase@^6.2.0: 415 | version "6.2.0" 416 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" 417 | integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== 418 | 419 | chalk@4.1.1, chalk@^4.1.0, chalk@^4.1.1: 420 | version "4.1.1" 421 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" 422 | integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== 423 | dependencies: 424 | ansi-styles "^4.1.0" 425 | supports-color "^7.1.0" 426 | 427 | chalk@^2.0.0: 428 | version "2.4.2" 429 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 430 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 431 | dependencies: 432 | ansi-styles "^3.2.1" 433 | escape-string-regexp "^1.0.5" 434 | supports-color "^5.3.0" 435 | 436 | chardet@^0.7.0: 437 | version "0.7.0" 438 | resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" 439 | integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== 440 | 441 | chokidar@3.5.1: 442 | version "3.5.1" 443 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" 444 | integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== 445 | dependencies: 446 | anymatch "~3.1.1" 447 | braces "~3.0.2" 448 | glob-parent "~5.1.0" 449 | is-binary-path "~2.1.0" 450 | is-glob "~4.0.1" 451 | normalize-path "~3.0.0" 452 | readdirp "~3.5.0" 453 | optionalDependencies: 454 | fsevents "~2.3.1" 455 | 456 | ci-info@^2.0.0: 457 | version "2.0.0" 458 | resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" 459 | integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== 460 | 461 | ci-info@^3.1.1: 462 | version "3.2.0" 463 | resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.2.0.tgz#2876cb948a498797b5236f0095bc057d0dca38b6" 464 | integrity sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A== 465 | 466 | cli-boxes@^2.2.1: 467 | version "2.2.1" 468 | resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" 469 | integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== 470 | 471 | cli-cursor@^3.1.0: 472 | version "3.1.0" 473 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" 474 | integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== 475 | dependencies: 476 | restore-cursor "^3.1.0" 477 | 478 | cli-spinners@^2.5.0: 479 | version "2.6.0" 480 | resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.0.tgz#36c7dc98fb6a9a76bd6238ec3f77e2425627e939" 481 | integrity sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q== 482 | 483 | cli-width@^3.0.0: 484 | version "3.0.0" 485 | resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" 486 | integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== 487 | 488 | cliui@^7.0.2: 489 | version "7.0.4" 490 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" 491 | integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== 492 | dependencies: 493 | string-width "^4.2.0" 494 | strip-ansi "^6.0.0" 495 | wrap-ansi "^7.0.0" 496 | 497 | clone-response@^1.0.2: 498 | version "1.0.2" 499 | resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" 500 | integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= 501 | dependencies: 502 | mimic-response "^1.0.0" 503 | 504 | clone@^1.0.2: 505 | version "1.0.4" 506 | resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" 507 | integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= 508 | 509 | color-convert@^1.9.0: 510 | version "1.9.3" 511 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 512 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 513 | dependencies: 514 | color-name "1.1.3" 515 | 516 | color-convert@^2.0.1: 517 | version "2.0.1" 518 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 519 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 520 | dependencies: 521 | color-name "~1.1.4" 522 | 523 | color-name@1.1.3: 524 | version "1.1.3" 525 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 526 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 527 | 528 | color-name@~1.1.4: 529 | version "1.1.4" 530 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 531 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 532 | 533 | combined-stream@^1.0.8: 534 | version "1.0.8" 535 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 536 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 537 | dependencies: 538 | delayed-stream "~1.0.0" 539 | 540 | concat-map@0.0.1: 541 | version "0.0.1" 542 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 543 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 544 | 545 | configstore@^5.0.1: 546 | version "5.0.1" 547 | resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" 548 | integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== 549 | dependencies: 550 | dot-prop "^5.2.0" 551 | graceful-fs "^4.1.2" 552 | make-dir "^3.0.0" 553 | unique-string "^2.0.0" 554 | write-file-atomic "^3.0.0" 555 | xdg-basedir "^4.0.0" 556 | 557 | cosmiconfig@7.0.0: 558 | version "7.0.0" 559 | resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3" 560 | integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA== 561 | dependencies: 562 | "@types/parse-json" "^4.0.0" 563 | import-fresh "^3.2.1" 564 | parse-json "^5.0.0" 565 | path-type "^4.0.0" 566 | yaml "^1.10.0" 567 | 568 | cross-spawn@^7.0.0, cross-spawn@^7.0.3: 569 | version "7.0.3" 570 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 571 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 572 | dependencies: 573 | path-key "^3.1.0" 574 | shebang-command "^2.0.0" 575 | which "^2.0.1" 576 | 577 | crypto-random-string@^2.0.0: 578 | version "2.0.0" 579 | resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" 580 | integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== 581 | 582 | debug@4.3.1: 583 | version "4.3.1" 584 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" 585 | integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== 586 | dependencies: 587 | ms "2.1.2" 588 | 589 | decamelize@^4.0.0: 590 | version "4.0.0" 591 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" 592 | integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== 593 | 594 | decode-uri-component@^0.2.0: 595 | version "0.2.0" 596 | resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" 597 | integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= 598 | 599 | decompress-response@^3.3.0: 600 | version "3.3.0" 601 | resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" 602 | integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= 603 | dependencies: 604 | mimic-response "^1.0.0" 605 | 606 | decompress-response@^6.0.0: 607 | version "6.0.0" 608 | resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" 609 | integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== 610 | dependencies: 611 | mimic-response "^3.1.0" 612 | 613 | deep-extend@^0.6.0: 614 | version "0.6.0" 615 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" 616 | integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== 617 | 618 | defaults@^1.0.3: 619 | version "1.0.3" 620 | resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" 621 | integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= 622 | dependencies: 623 | clone "^1.0.2" 624 | 625 | defer-to-connect@^1.0.1: 626 | version "1.1.3" 627 | resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" 628 | integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== 629 | 630 | defer-to-connect@^2.0.0: 631 | version "2.0.1" 632 | resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" 633 | integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== 634 | 635 | delayed-stream@~1.0.0: 636 | version "1.0.0" 637 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 638 | integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= 639 | 640 | deprecated-obj@2.0.0: 641 | version "2.0.0" 642 | resolved "https://registry.yarnpkg.com/deprecated-obj/-/deprecated-obj-2.0.0.tgz#e6ba93a3989f6ed18d685e7d99fb8d469b4beffc" 643 | integrity sha512-CkdywZC2rJ8RGh+y3MM1fw1EJ4oO/oNExGbRFv0AQoMS+faTd3nO7slYjkj/6t8OnIMUE+wxh6G97YHhK1ytrw== 644 | dependencies: 645 | flat "^5.0.2" 646 | lodash "^4.17.20" 647 | 648 | deprecation@^2.0.0, deprecation@^2.3.1: 649 | version "2.3.1" 650 | resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" 651 | integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== 652 | 653 | diff@5.0.0: 654 | version "5.0.0" 655 | resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" 656 | integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== 657 | 658 | dir-glob@^3.0.1: 659 | version "3.0.1" 660 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" 661 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 662 | dependencies: 663 | path-type "^4.0.0" 664 | 665 | dot-prop@^5.2.0: 666 | version "5.3.0" 667 | resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" 668 | integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== 669 | dependencies: 670 | is-obj "^2.0.0" 671 | 672 | duplexer3@^0.1.4: 673 | version "0.1.4" 674 | resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" 675 | integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= 676 | 677 | emoji-regex@^7.0.1: 678 | version "7.0.3" 679 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" 680 | integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== 681 | 682 | emoji-regex@^8.0.0: 683 | version "8.0.0" 684 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 685 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 686 | 687 | end-of-stream@^1.1.0: 688 | version "1.4.4" 689 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" 690 | integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== 691 | dependencies: 692 | once "^1.4.0" 693 | 694 | error-ex@^1.3.1: 695 | version "1.3.2" 696 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 697 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== 698 | dependencies: 699 | is-arrayish "^0.2.1" 700 | 701 | escalade@^3.1.1: 702 | version "3.1.1" 703 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 704 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 705 | 706 | escape-goat@^2.0.0: 707 | version "2.1.1" 708 | resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" 709 | integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== 710 | 711 | escape-string-regexp@4.0.0: 712 | version "4.0.0" 713 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 714 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 715 | 716 | escape-string-regexp@^1.0.5: 717 | version "1.0.5" 718 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 719 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 720 | 721 | execa@5.1.1: 722 | version "5.1.1" 723 | resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" 724 | integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== 725 | dependencies: 726 | cross-spawn "^7.0.3" 727 | get-stream "^6.0.0" 728 | human-signals "^2.1.0" 729 | is-stream "^2.0.0" 730 | merge-stream "^2.0.0" 731 | npm-run-path "^4.0.1" 732 | onetime "^5.1.2" 733 | signal-exit "^3.0.3" 734 | strip-final-newline "^2.0.0" 735 | 736 | execa@^4.0.2: 737 | version "4.1.0" 738 | resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" 739 | integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== 740 | dependencies: 741 | cross-spawn "^7.0.0" 742 | get-stream "^5.0.0" 743 | human-signals "^1.1.1" 744 | is-stream "^2.0.0" 745 | merge-stream "^2.0.0" 746 | npm-run-path "^4.0.0" 747 | onetime "^5.1.0" 748 | signal-exit "^3.0.2" 749 | strip-final-newline "^2.0.0" 750 | 751 | external-editor@^3.0.3: 752 | version "3.1.0" 753 | resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" 754 | integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== 755 | dependencies: 756 | chardet "^0.7.0" 757 | iconv-lite "^0.4.24" 758 | tmp "^0.0.33" 759 | 760 | fast-glob@^3.1.1: 761 | version "3.2.5" 762 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" 763 | integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== 764 | dependencies: 765 | "@nodelib/fs.stat" "^2.0.2" 766 | "@nodelib/fs.walk" "^1.2.3" 767 | glob-parent "^5.1.0" 768 | merge2 "^1.3.0" 769 | micromatch "^4.0.2" 770 | picomatch "^2.2.1" 771 | 772 | fastq@^1.6.0: 773 | version "1.11.0" 774 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858" 775 | integrity sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g== 776 | dependencies: 777 | reusify "^1.0.4" 778 | 779 | figures@^3.0.0: 780 | version "3.2.0" 781 | resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" 782 | integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== 783 | dependencies: 784 | escape-string-regexp "^1.0.5" 785 | 786 | fill-range@^7.0.1: 787 | version "7.0.1" 788 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 789 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 790 | dependencies: 791 | to-regex-range "^5.0.1" 792 | 793 | filter-obj@^1.1.0: 794 | version "1.1.0" 795 | resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b" 796 | integrity sha1-mzERErxsYSehbgFsbF1/GeCAXFs= 797 | 798 | find-up@5.0.0: 799 | version "5.0.0" 800 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" 801 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 802 | dependencies: 803 | locate-path "^6.0.0" 804 | path-exists "^4.0.0" 805 | 806 | flat@^5.0.2: 807 | version "5.0.2" 808 | resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" 809 | integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== 810 | 811 | form-data@4.0.0: 812 | version "4.0.0" 813 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" 814 | integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== 815 | dependencies: 816 | asynckit "^0.4.0" 817 | combined-stream "^1.0.8" 818 | mime-types "^2.1.12" 819 | 820 | fs.realpath@^1.0.0: 821 | version "1.0.0" 822 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 823 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 824 | 825 | fsevents@~2.3.1: 826 | version "2.3.2" 827 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 828 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 829 | 830 | function-bind@^1.1.1: 831 | version "1.1.1" 832 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 833 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 834 | 835 | get-caller-file@^2.0.5: 836 | version "2.0.5" 837 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 838 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 839 | 840 | get-intrinsic@^1.0.2: 841 | version "1.1.1" 842 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" 843 | integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== 844 | dependencies: 845 | function-bind "^1.1.1" 846 | has "^1.0.3" 847 | has-symbols "^1.0.1" 848 | 849 | get-stream@^4.1.0: 850 | version "4.1.0" 851 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" 852 | integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== 853 | dependencies: 854 | pump "^3.0.0" 855 | 856 | get-stream@^5.0.0, get-stream@^5.1.0: 857 | version "5.2.0" 858 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" 859 | integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== 860 | dependencies: 861 | pump "^3.0.0" 862 | 863 | get-stream@^6.0.0: 864 | version "6.0.1" 865 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" 866 | integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== 867 | 868 | git-up@^4.0.0: 869 | version "4.0.2" 870 | resolved "https://registry.yarnpkg.com/git-up/-/git-up-4.0.2.tgz#10c3d731051b366dc19d3df454bfca3f77913a7c" 871 | integrity sha512-kbuvus1dWQB2sSW4cbfTeGpCMd8ge9jx9RKnhXhuJ7tnvT+NIrTVfYZxjtflZddQYcmdOTlkAcjmx7bor+15AQ== 872 | dependencies: 873 | is-ssh "^1.3.0" 874 | parse-url "^5.0.0" 875 | 876 | git-url-parse@11.4.4: 877 | version "11.4.4" 878 | resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-11.4.4.tgz#5d747debc2469c17bc385719f7d0427802d83d77" 879 | integrity sha512-Y4o9o7vQngQDIU9IjyCmRJBin5iYjI5u9ZITnddRZpD7dcCFQj2sL2XuMNbLRE4b4B/4ENPsp2Q8P44fjAZ0Pw== 880 | dependencies: 881 | git-up "^4.0.0" 882 | 883 | glob-parent@^5.1.0, glob-parent@~5.1.0: 884 | version "5.1.2" 885 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 886 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 887 | dependencies: 888 | is-glob "^4.0.1" 889 | 890 | glob@7.1.7, glob@^7.0.0: 891 | version "7.1.7" 892 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" 893 | integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== 894 | dependencies: 895 | fs.realpath "^1.0.0" 896 | inflight "^1.0.4" 897 | inherits "2" 898 | minimatch "^3.0.4" 899 | once "^1.3.0" 900 | path-is-absolute "^1.0.0" 901 | 902 | global-dirs@^3.0.0: 903 | version "3.0.0" 904 | resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.0.tgz#70a76fe84ea315ab37b1f5576cbde7d48ef72686" 905 | integrity sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA== 906 | dependencies: 907 | ini "2.0.0" 908 | 909 | globby@11.0.4: 910 | version "11.0.4" 911 | resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" 912 | integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== 913 | dependencies: 914 | array-union "^2.1.0" 915 | dir-glob "^3.0.1" 916 | fast-glob "^3.1.1" 917 | ignore "^5.1.4" 918 | merge2 "^1.3.0" 919 | slash "^3.0.0" 920 | 921 | got@11.8.2: 922 | version "11.8.2" 923 | resolved "https://registry.yarnpkg.com/got/-/got-11.8.2.tgz#7abb3959ea28c31f3576f1576c1effce23f33599" 924 | integrity sha512-D0QywKgIe30ODs+fm8wMZiAcZjypcCodPNuMz5H9Mny7RJ+IjJ10BdmGW7OM7fHXP+O7r6ZwapQ/YQmMSvB0UQ== 925 | dependencies: 926 | "@sindresorhus/is" "^4.0.0" 927 | "@szmarczak/http-timer" "^4.0.5" 928 | "@types/cacheable-request" "^6.0.1" 929 | "@types/responselike" "^1.0.0" 930 | cacheable-lookup "^5.0.3" 931 | cacheable-request "^7.0.1" 932 | decompress-response "^6.0.0" 933 | http2-wrapper "^1.0.0-beta.5.2" 934 | lowercase-keys "^2.0.0" 935 | p-cancelable "^2.0.0" 936 | responselike "^2.0.0" 937 | 938 | got@^9.6.0: 939 | version "9.6.0" 940 | resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" 941 | integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== 942 | dependencies: 943 | "@sindresorhus/is" "^0.14.0" 944 | "@szmarczak/http-timer" "^1.1.2" 945 | cacheable-request "^6.0.0" 946 | decompress-response "^3.3.0" 947 | duplexer3 "^0.1.4" 948 | get-stream "^4.1.0" 949 | lowercase-keys "^1.0.1" 950 | mimic-response "^1.0.1" 951 | p-cancelable "^1.0.0" 952 | to-readable-stream "^1.0.0" 953 | url-parse-lax "^3.0.0" 954 | 955 | graceful-fs@^4.1.2: 956 | version "4.2.6" 957 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" 958 | integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== 959 | 960 | growl@1.10.5: 961 | version "1.10.5" 962 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" 963 | integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== 964 | 965 | has-flag@^3.0.0: 966 | version "3.0.0" 967 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 968 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 969 | 970 | has-flag@^4.0.0: 971 | version "4.0.0" 972 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 973 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 974 | 975 | has-symbols@^1.0.1: 976 | version "1.0.2" 977 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" 978 | integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== 979 | 980 | has-yarn@^2.1.0: 981 | version "2.1.0" 982 | resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" 983 | integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== 984 | 985 | has@^1.0.3: 986 | version "1.0.3" 987 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 988 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 989 | dependencies: 990 | function-bind "^1.1.1" 991 | 992 | he@1.2.0: 993 | version "1.2.0" 994 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" 995 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 996 | 997 | http-cache-semantics@^4.0.0: 998 | version "4.1.0" 999 | resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" 1000 | integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== 1001 | 1002 | http2-wrapper@^1.0.0-beta.5.2: 1003 | version "1.0.3" 1004 | resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" 1005 | integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== 1006 | dependencies: 1007 | quick-lru "^5.1.1" 1008 | resolve-alpn "^1.0.0" 1009 | 1010 | human-signals@^1.1.1: 1011 | version "1.1.1" 1012 | resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" 1013 | integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== 1014 | 1015 | human-signals@^2.1.0: 1016 | version "2.1.0" 1017 | resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" 1018 | integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== 1019 | 1020 | iconv-lite@^0.4.24: 1021 | version "0.4.24" 1022 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 1023 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 1024 | dependencies: 1025 | safer-buffer ">= 2.1.2 < 3" 1026 | 1027 | ieee754@^1.1.13: 1028 | version "1.2.1" 1029 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" 1030 | integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== 1031 | 1032 | ignore@^5.1.4: 1033 | version "5.1.8" 1034 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" 1035 | integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== 1036 | 1037 | import-cwd@3.0.0: 1038 | version "3.0.0" 1039 | resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-3.0.0.tgz#20845547718015126ea9b3676b7592fb8bd4cf92" 1040 | integrity sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg== 1041 | dependencies: 1042 | import-from "^3.0.0" 1043 | 1044 | import-fresh@^3.2.1: 1045 | version "3.3.0" 1046 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 1047 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 1048 | dependencies: 1049 | parent-module "^1.0.0" 1050 | resolve-from "^4.0.0" 1051 | 1052 | import-from@^3.0.0: 1053 | version "3.0.0" 1054 | resolved "https://registry.yarnpkg.com/import-from/-/import-from-3.0.0.tgz#055cfec38cd5a27d8057ca51376d7d3bf0891966" 1055 | integrity sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ== 1056 | dependencies: 1057 | resolve-from "^5.0.0" 1058 | 1059 | import-lazy@^2.1.0: 1060 | version "2.1.0" 1061 | resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" 1062 | integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= 1063 | 1064 | imurmurhash@^0.1.4: 1065 | version "0.1.4" 1066 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1067 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 1068 | 1069 | inflight@^1.0.4: 1070 | version "1.0.6" 1071 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1072 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 1073 | dependencies: 1074 | once "^1.3.0" 1075 | wrappy "1" 1076 | 1077 | inherits@2, inherits@^2.0.3, inherits@^2.0.4: 1078 | version "2.0.4" 1079 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 1080 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1081 | 1082 | ini@2.0.0: 1083 | version "2.0.0" 1084 | resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" 1085 | integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== 1086 | 1087 | ini@~1.3.0: 1088 | version "1.3.8" 1089 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" 1090 | integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== 1091 | 1092 | inquirer@8.1.1: 1093 | version "8.1.1" 1094 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.1.1.tgz#7c53d94c6d03011c7bb2a947f0dca3b98246c26a" 1095 | integrity sha512-hUDjc3vBkh/uk1gPfMAD/7Z188Q8cvTGl0nxwaCdwSbzFh6ZKkZh+s2ozVxbE5G9ZNRyeY0+lgbAIOUFsFf98w== 1096 | dependencies: 1097 | ansi-escapes "^4.2.1" 1098 | chalk "^4.1.1" 1099 | cli-cursor "^3.1.0" 1100 | cli-width "^3.0.0" 1101 | external-editor "^3.0.3" 1102 | figures "^3.0.0" 1103 | lodash "^4.17.21" 1104 | mute-stream "0.0.8" 1105 | ora "^5.3.0" 1106 | run-async "^2.4.0" 1107 | rxjs "^6.6.6" 1108 | string-width "^4.1.0" 1109 | strip-ansi "^6.0.0" 1110 | through "^2.3.6" 1111 | 1112 | interpret@^1.0.0: 1113 | version "1.4.0" 1114 | resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" 1115 | integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== 1116 | 1117 | is-arrayish@^0.2.1: 1118 | version "0.2.1" 1119 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 1120 | integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= 1121 | 1122 | is-binary-path@~2.1.0: 1123 | version "2.1.0" 1124 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 1125 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 1126 | dependencies: 1127 | binary-extensions "^2.0.0" 1128 | 1129 | is-ci@3.0.0: 1130 | version "3.0.0" 1131 | resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.0.tgz#c7e7be3c9d8eef7d0fa144390bd1e4b88dc4c994" 1132 | integrity sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ== 1133 | dependencies: 1134 | ci-info "^3.1.1" 1135 | 1136 | is-ci@^2.0.0: 1137 | version "2.0.0" 1138 | resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" 1139 | integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== 1140 | dependencies: 1141 | ci-info "^2.0.0" 1142 | 1143 | is-core-module@^2.2.0: 1144 | version "2.4.0" 1145 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1" 1146 | integrity sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A== 1147 | dependencies: 1148 | has "^1.0.3" 1149 | 1150 | is-extglob@^2.1.1: 1151 | version "2.1.1" 1152 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 1153 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 1154 | 1155 | is-fullwidth-code-point@^2.0.0: 1156 | version "2.0.0" 1157 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 1158 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 1159 | 1160 | is-fullwidth-code-point@^3.0.0: 1161 | version "3.0.0" 1162 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 1163 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 1164 | 1165 | is-glob@^4.0.1, is-glob@~4.0.1: 1166 | version "4.0.1" 1167 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" 1168 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== 1169 | dependencies: 1170 | is-extglob "^2.1.1" 1171 | 1172 | is-installed-globally@^0.4.0: 1173 | version "0.4.0" 1174 | resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" 1175 | integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== 1176 | dependencies: 1177 | global-dirs "^3.0.0" 1178 | is-path-inside "^3.0.2" 1179 | 1180 | is-interactive@^1.0.0: 1181 | version "1.0.0" 1182 | resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" 1183 | integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== 1184 | 1185 | is-npm@^5.0.0: 1186 | version "5.0.0" 1187 | resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-5.0.0.tgz#43e8d65cc56e1b67f8d47262cf667099193f45a8" 1188 | integrity sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA== 1189 | 1190 | is-number@^7.0.0: 1191 | version "7.0.0" 1192 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 1193 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1194 | 1195 | is-obj@^2.0.0: 1196 | version "2.0.0" 1197 | resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" 1198 | integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== 1199 | 1200 | is-path-inside@^3.0.2: 1201 | version "3.0.3" 1202 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" 1203 | integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== 1204 | 1205 | is-plain-obj@^2.1.0: 1206 | version "2.1.0" 1207 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" 1208 | integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== 1209 | 1210 | is-plain-object@^5.0.0: 1211 | version "5.0.0" 1212 | resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" 1213 | integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== 1214 | 1215 | is-ssh@^1.3.0: 1216 | version "1.3.3" 1217 | resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.3.3.tgz#7f133285ccd7f2c2c7fc897b771b53d95a2b2c7e" 1218 | integrity sha512-NKzJmQzJfEEma3w5cJNcUMxoXfDjz0Zj0eyCalHn2E6VOwlzjZo0yuO2fcBSf8zhFuVCL/82/r5gRcoi6aEPVQ== 1219 | dependencies: 1220 | protocols "^1.1.0" 1221 | 1222 | is-stream@^2.0.0: 1223 | version "2.0.0" 1224 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" 1225 | integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== 1226 | 1227 | is-typedarray@^1.0.0: 1228 | version "1.0.0" 1229 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 1230 | integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= 1231 | 1232 | is-unicode-supported@^0.1.0: 1233 | version "0.1.0" 1234 | resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" 1235 | integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== 1236 | 1237 | is-yarn-global@^0.3.0: 1238 | version "0.3.0" 1239 | resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" 1240 | integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== 1241 | 1242 | isexe@^2.0.0: 1243 | version "2.0.0" 1244 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1245 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 1246 | 1247 | js-tokens@^4.0.0: 1248 | version "4.0.0" 1249 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 1250 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 1251 | 1252 | js-yaml@4.1.0: 1253 | version "4.1.0" 1254 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 1255 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 1256 | dependencies: 1257 | argparse "^2.0.1" 1258 | 1259 | json-buffer@3.0.0: 1260 | version "3.0.0" 1261 | resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" 1262 | integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= 1263 | 1264 | json-buffer@3.0.1: 1265 | version "3.0.1" 1266 | resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" 1267 | integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== 1268 | 1269 | json-parse-even-better-errors@^2.3.0: 1270 | version "2.3.1" 1271 | resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" 1272 | integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== 1273 | 1274 | keyv@^3.0.0: 1275 | version "3.1.0" 1276 | resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" 1277 | integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== 1278 | dependencies: 1279 | json-buffer "3.0.0" 1280 | 1281 | keyv@^4.0.0: 1282 | version "4.0.3" 1283 | resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.0.3.tgz#4f3aa98de254803cafcd2896734108daa35e4254" 1284 | integrity sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA== 1285 | dependencies: 1286 | json-buffer "3.0.1" 1287 | 1288 | latest-version@^5.1.0: 1289 | version "5.1.0" 1290 | resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" 1291 | integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== 1292 | dependencies: 1293 | package-json "^6.3.0" 1294 | 1295 | lines-and-columns@^1.1.6: 1296 | version "1.1.6" 1297 | resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" 1298 | integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= 1299 | 1300 | locate-path@^6.0.0: 1301 | version "6.0.0" 1302 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" 1303 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 1304 | dependencies: 1305 | p-locate "^5.0.0" 1306 | 1307 | lodash@4.17.21, lodash@^4.17.20, lodash@^4.17.21: 1308 | version "4.17.21" 1309 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 1310 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 1311 | 1312 | log-symbols@4.1.0, log-symbols@^4.1.0: 1313 | version "4.1.0" 1314 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" 1315 | integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== 1316 | dependencies: 1317 | chalk "^4.1.0" 1318 | is-unicode-supported "^0.1.0" 1319 | 1320 | lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: 1321 | version "1.0.1" 1322 | resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" 1323 | integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== 1324 | 1325 | lowercase-keys@^2.0.0: 1326 | version "2.0.0" 1327 | resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" 1328 | integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== 1329 | 1330 | lru-cache@^6.0.0: 1331 | version "6.0.0" 1332 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 1333 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 1334 | dependencies: 1335 | yallist "^4.0.0" 1336 | 1337 | macos-release@^2.2.0: 1338 | version "2.5.0" 1339 | resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.5.0.tgz#067c2c88b5f3fb3c56a375b2ec93826220fa1ff2" 1340 | integrity sha512-EIgv+QZ9r+814gjJj0Bt5vSLJLzswGmSUbUpbi9AIr/fsN2IWFBl2NucV9PAiek+U1STK468tEkxmVYUtuAN3g== 1341 | 1342 | make-dir@^3.0.0: 1343 | version "3.1.0" 1344 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" 1345 | integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== 1346 | dependencies: 1347 | semver "^6.0.0" 1348 | 1349 | merge-stream@^2.0.0: 1350 | version "2.0.0" 1351 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" 1352 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== 1353 | 1354 | merge2@^1.3.0: 1355 | version "1.4.1" 1356 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" 1357 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 1358 | 1359 | micromatch@^4.0.2: 1360 | version "4.0.4" 1361 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" 1362 | integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== 1363 | dependencies: 1364 | braces "^3.0.1" 1365 | picomatch "^2.2.3" 1366 | 1367 | mime-db@1.48.0: 1368 | version "1.48.0" 1369 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.48.0.tgz#e35b31045dd7eada3aaad537ed88a33afbef2d1d" 1370 | integrity sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ== 1371 | 1372 | mime-types@2.1.31, mime-types@^2.1.12: 1373 | version "2.1.31" 1374 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.31.tgz#a00d76b74317c61f9c2db2218b8e9f8e9c5c9e6b" 1375 | integrity sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg== 1376 | dependencies: 1377 | mime-db "1.48.0" 1378 | 1379 | mimic-fn@^2.1.0: 1380 | version "2.1.0" 1381 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" 1382 | integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== 1383 | 1384 | mimic-response@^1.0.0, mimic-response@^1.0.1: 1385 | version "1.0.1" 1386 | resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" 1387 | integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== 1388 | 1389 | mimic-response@^3.1.0: 1390 | version "3.1.0" 1391 | resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" 1392 | integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== 1393 | 1394 | minimatch@3.0.4, minimatch@^3.0.4: 1395 | version "3.0.4" 1396 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 1397 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 1398 | dependencies: 1399 | brace-expansion "^1.1.7" 1400 | 1401 | minimist@^1.2.0: 1402 | version "1.2.5" 1403 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" 1404 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== 1405 | 1406 | mocha@^9.0.1: 1407 | version "9.0.1" 1408 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.0.1.tgz#01e66b7af0012330c0a38c4b6eaa6d92b8a81bf9" 1409 | integrity sha512-9zwsavlRO+5csZu6iRtl3GHImAbhERoDsZwdRkdJ/bE+eVplmoxNKE901ZJ9LdSchYBjSCPbjKc5XvcAri2ylw== 1410 | dependencies: 1411 | "@ungap/promise-all-settled" "1.1.2" 1412 | ansi-colors "4.1.1" 1413 | browser-stdout "1.3.1" 1414 | chokidar "3.5.1" 1415 | debug "4.3.1" 1416 | diff "5.0.0" 1417 | escape-string-regexp "4.0.0" 1418 | find-up "5.0.0" 1419 | glob "7.1.7" 1420 | growl "1.10.5" 1421 | he "1.2.0" 1422 | js-yaml "4.1.0" 1423 | log-symbols "4.1.0" 1424 | minimatch "3.0.4" 1425 | ms "2.1.3" 1426 | nanoid "3.1.23" 1427 | serialize-javascript "5.0.1" 1428 | strip-json-comments "3.1.1" 1429 | supports-color "8.1.1" 1430 | which "2.0.2" 1431 | wide-align "1.1.3" 1432 | workerpool "6.1.4" 1433 | yargs "16.2.0" 1434 | yargs-parser "20.2.4" 1435 | yargs-unparser "2.0.0" 1436 | 1437 | ms@2.1.2: 1438 | version "2.1.2" 1439 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1440 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1441 | 1442 | ms@2.1.3: 1443 | version "2.1.3" 1444 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 1445 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 1446 | 1447 | mute-stream@0.0.8: 1448 | version "0.0.8" 1449 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" 1450 | integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== 1451 | 1452 | nanoid@3.1.23: 1453 | version "3.1.23" 1454 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81" 1455 | integrity sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw== 1456 | 1457 | node-fetch@^2.6.1: 1458 | version "2.6.1" 1459 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" 1460 | integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== 1461 | 1462 | normalize-path@^3.0.0, normalize-path@~3.0.0: 1463 | version "3.0.0" 1464 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 1465 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 1466 | 1467 | normalize-url@^4.1.0: 1468 | version "4.5.1" 1469 | resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" 1470 | integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== 1471 | 1472 | normalize-url@^6.0.1: 1473 | version "6.1.0" 1474 | resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" 1475 | integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== 1476 | 1477 | npm-run-path@^4.0.0, npm-run-path@^4.0.1: 1478 | version "4.0.1" 1479 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" 1480 | integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== 1481 | dependencies: 1482 | path-key "^3.0.0" 1483 | 1484 | object-inspect@^1.9.0: 1485 | version "1.10.3" 1486 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.10.3.tgz#c2aa7d2d09f50c99375704f7a0adf24c5782d369" 1487 | integrity sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw== 1488 | 1489 | once@^1.3.0, once@^1.3.1, once@^1.4.0: 1490 | version "1.4.0" 1491 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1492 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 1493 | dependencies: 1494 | wrappy "1" 1495 | 1496 | onetime@^5.1.0, onetime@^5.1.2: 1497 | version "5.1.2" 1498 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" 1499 | integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== 1500 | dependencies: 1501 | mimic-fn "^2.1.0" 1502 | 1503 | ora@5.4.1, ora@^5.3.0: 1504 | version "5.4.1" 1505 | resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" 1506 | integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== 1507 | dependencies: 1508 | bl "^4.1.0" 1509 | chalk "^4.1.0" 1510 | cli-cursor "^3.1.0" 1511 | cli-spinners "^2.5.0" 1512 | is-interactive "^1.0.0" 1513 | is-unicode-supported "^0.1.0" 1514 | log-symbols "^4.1.0" 1515 | strip-ansi "^6.0.0" 1516 | wcwidth "^1.0.1" 1517 | 1518 | os-name@4.0.0: 1519 | version "4.0.0" 1520 | resolved "https://registry.yarnpkg.com/os-name/-/os-name-4.0.0.tgz#6c05c09c41c15848ea74658d12c9606f0f286599" 1521 | integrity sha512-caABzDdJMbtykt7GmSogEat3faTKQhmZf0BS5l/pZGmP0vPWQjXWqOhbLyK+b6j2/DQPmEvYdzLXJXXLJNVDNg== 1522 | dependencies: 1523 | macos-release "^2.2.0" 1524 | windows-release "^4.0.0" 1525 | 1526 | os-tmpdir@~1.0.2: 1527 | version "1.0.2" 1528 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 1529 | integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= 1530 | 1531 | p-cancelable@^1.0.0: 1532 | version "1.1.0" 1533 | resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" 1534 | integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== 1535 | 1536 | p-cancelable@^2.0.0: 1537 | version "2.1.1" 1538 | resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" 1539 | integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== 1540 | 1541 | p-limit@^3.0.2: 1542 | version "3.1.0" 1543 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 1544 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 1545 | dependencies: 1546 | yocto-queue "^0.1.0" 1547 | 1548 | p-locate@^5.0.0: 1549 | version "5.0.0" 1550 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" 1551 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 1552 | dependencies: 1553 | p-limit "^3.0.2" 1554 | 1555 | package-json@^6.3.0: 1556 | version "6.5.0" 1557 | resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" 1558 | integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== 1559 | dependencies: 1560 | got "^9.6.0" 1561 | registry-auth-token "^4.0.0" 1562 | registry-url "^5.0.0" 1563 | semver "^6.2.0" 1564 | 1565 | parent-module@^1.0.0: 1566 | version "1.0.1" 1567 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 1568 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 1569 | dependencies: 1570 | callsites "^3.0.0" 1571 | 1572 | parse-json@5.2.0, parse-json@^5.0.0: 1573 | version "5.2.0" 1574 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" 1575 | integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== 1576 | dependencies: 1577 | "@babel/code-frame" "^7.0.0" 1578 | error-ex "^1.3.1" 1579 | json-parse-even-better-errors "^2.3.0" 1580 | lines-and-columns "^1.1.6" 1581 | 1582 | parse-path@^4.0.0: 1583 | version "4.0.3" 1584 | resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-4.0.3.tgz#82d81ec3e071dcc4ab49aa9f2c9c0b8966bb22bf" 1585 | integrity sha512-9Cepbp2asKnWTJ9x2kpw6Fe8y9JDbqwahGCTvklzd/cEq5C5JC59x2Xb0Kx+x0QZ8bvNquGO8/BWP0cwBHzSAA== 1586 | dependencies: 1587 | is-ssh "^1.3.0" 1588 | protocols "^1.4.0" 1589 | qs "^6.9.4" 1590 | query-string "^6.13.8" 1591 | 1592 | parse-url@^5.0.0: 1593 | version "5.0.3" 1594 | resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-5.0.3.tgz#c158560f14cb1560917e0b7fd8b01adc1e9d3cab" 1595 | integrity sha512-nrLCVMJpqo12X8uUJT4GJPd5AFaTOrGx/QpJy3HNcVtq0AZSstVIsnxS5fqNPuoqMUs3MyfBoOP6Zvu2Arok5A== 1596 | dependencies: 1597 | is-ssh "^1.3.0" 1598 | normalize-url "^6.0.1" 1599 | parse-path "^4.0.0" 1600 | protocols "^1.4.0" 1601 | 1602 | path-exists@^4.0.0: 1603 | version "4.0.0" 1604 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 1605 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 1606 | 1607 | path-is-absolute@^1.0.0: 1608 | version "1.0.1" 1609 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1610 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 1611 | 1612 | path-key@^3.0.0, path-key@^3.1.0: 1613 | version "3.1.1" 1614 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 1615 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 1616 | 1617 | path-parse@^1.0.6: 1618 | version "1.0.7" 1619 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 1620 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 1621 | 1622 | path-type@^4.0.0: 1623 | version "4.0.0" 1624 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" 1625 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 1626 | 1627 | picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: 1628 | version "2.3.0" 1629 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" 1630 | integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== 1631 | 1632 | prepend-http@^2.0.0: 1633 | version "2.0.0" 1634 | resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" 1635 | integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= 1636 | 1637 | protocols@^1.1.0, protocols@^1.4.0: 1638 | version "1.4.8" 1639 | resolved "https://registry.yarnpkg.com/protocols/-/protocols-1.4.8.tgz#48eea2d8f58d9644a4a32caae5d5db290a075ce8" 1640 | integrity sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg== 1641 | 1642 | pump@^3.0.0: 1643 | version "3.0.0" 1644 | resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" 1645 | integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== 1646 | dependencies: 1647 | end-of-stream "^1.1.0" 1648 | once "^1.3.1" 1649 | 1650 | pupa@^2.1.1: 1651 | version "2.1.1" 1652 | resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" 1653 | integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== 1654 | dependencies: 1655 | escape-goat "^2.0.0" 1656 | 1657 | qs@^6.9.4: 1658 | version "6.10.1" 1659 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.1.tgz#4931482fa8d647a5aab799c5271d2133b981fb6a" 1660 | integrity sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg== 1661 | dependencies: 1662 | side-channel "^1.0.4" 1663 | 1664 | query-string@^6.13.8: 1665 | version "6.14.1" 1666 | resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.14.1.tgz#7ac2dca46da7f309449ba0f86b1fd28255b0c86a" 1667 | integrity sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw== 1668 | dependencies: 1669 | decode-uri-component "^0.2.0" 1670 | filter-obj "^1.1.0" 1671 | split-on-first "^1.0.0" 1672 | strict-uri-encode "^2.0.0" 1673 | 1674 | queue-microtask@^1.2.2: 1675 | version "1.2.3" 1676 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" 1677 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 1678 | 1679 | quick-lru@^5.1.1: 1680 | version "5.1.1" 1681 | resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" 1682 | integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== 1683 | 1684 | randombytes@^2.1.0: 1685 | version "2.1.0" 1686 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" 1687 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== 1688 | dependencies: 1689 | safe-buffer "^5.1.0" 1690 | 1691 | rc@^1.2.8: 1692 | version "1.2.8" 1693 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" 1694 | integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== 1695 | dependencies: 1696 | deep-extend "^0.6.0" 1697 | ini "~1.3.0" 1698 | minimist "^1.2.0" 1699 | strip-json-comments "~2.0.1" 1700 | 1701 | readable-stream@^3.4.0: 1702 | version "3.6.0" 1703 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" 1704 | integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== 1705 | dependencies: 1706 | inherits "^2.0.3" 1707 | string_decoder "^1.1.1" 1708 | util-deprecate "^1.0.1" 1709 | 1710 | readdirp@~3.5.0: 1711 | version "3.5.0" 1712 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" 1713 | integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== 1714 | dependencies: 1715 | picomatch "^2.2.1" 1716 | 1717 | rechoir@^0.6.2: 1718 | version "0.6.2" 1719 | resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" 1720 | integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= 1721 | dependencies: 1722 | resolve "^1.1.6" 1723 | 1724 | registry-auth-token@^4.0.0: 1725 | version "4.2.1" 1726 | resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" 1727 | integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw== 1728 | dependencies: 1729 | rc "^1.2.8" 1730 | 1731 | registry-url@^5.0.0: 1732 | version "5.1.0" 1733 | resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" 1734 | integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== 1735 | dependencies: 1736 | rc "^1.2.8" 1737 | 1738 | release-it@^14.10.0: 1739 | version "14.10.0" 1740 | resolved "https://registry.yarnpkg.com/release-it/-/release-it-14.10.0.tgz#2ad9aa5357f257ee92d4c632a0c64dfe8286bff0" 1741 | integrity sha512-BwL7W3VPILma+MwO2kEtZaAL0/G/mZafg4xgpfxy4MVxLd+28lBp22EDF2gS4GXHmcblawyV2IdbWo/56QIyJw== 1742 | dependencies: 1743 | "@iarna/toml" "2.2.5" 1744 | "@octokit/rest" "18.6.0" 1745 | async-retry "1.3.1" 1746 | chalk "4.1.1" 1747 | cosmiconfig "7.0.0" 1748 | debug "4.3.1" 1749 | deprecated-obj "2.0.0" 1750 | execa "5.1.1" 1751 | find-up "5.0.0" 1752 | form-data "4.0.0" 1753 | git-url-parse "11.4.4" 1754 | globby "11.0.4" 1755 | got "11.8.2" 1756 | import-cwd "3.0.0" 1757 | inquirer "8.1.1" 1758 | is-ci "3.0.0" 1759 | lodash "4.17.21" 1760 | mime-types "2.1.31" 1761 | ora "5.4.1" 1762 | os-name "4.0.0" 1763 | parse-json "5.2.0" 1764 | semver "7.3.5" 1765 | shelljs "0.8.4" 1766 | update-notifier "5.1.0" 1767 | url-join "4.0.1" 1768 | uuid "8.3.2" 1769 | yaml "1.10.2" 1770 | yargs-parser "20.2.7" 1771 | 1772 | require-directory@^2.1.1: 1773 | version "2.1.1" 1774 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 1775 | integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= 1776 | 1777 | resolve-alpn@^1.0.0: 1778 | version "1.1.2" 1779 | resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.1.2.tgz#30b60cfbb0c0b8dc897940fe13fe255afcdd4d28" 1780 | integrity sha512-8OyfzhAtA32LVUsJSke3auIyINcwdh5l3cvYKdKO0nvsYSKuiLfTM5i78PJswFPT8y6cPW+L1v6/hE95chcpDA== 1781 | 1782 | resolve-from@^4.0.0: 1783 | version "4.0.0" 1784 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 1785 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1786 | 1787 | resolve-from@^5.0.0: 1788 | version "5.0.0" 1789 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" 1790 | integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== 1791 | 1792 | resolve@^1.1.6: 1793 | version "1.20.0" 1794 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" 1795 | integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== 1796 | dependencies: 1797 | is-core-module "^2.2.0" 1798 | path-parse "^1.0.6" 1799 | 1800 | responselike@^1.0.2: 1801 | version "1.0.2" 1802 | resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" 1803 | integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= 1804 | dependencies: 1805 | lowercase-keys "^1.0.0" 1806 | 1807 | responselike@^2.0.0: 1808 | version "2.0.0" 1809 | resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.0.tgz#26391bcc3174f750f9a79eacc40a12a5c42d7723" 1810 | integrity sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw== 1811 | dependencies: 1812 | lowercase-keys "^2.0.0" 1813 | 1814 | restore-cursor@^3.1.0: 1815 | version "3.1.0" 1816 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" 1817 | integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== 1818 | dependencies: 1819 | onetime "^5.1.0" 1820 | signal-exit "^3.0.2" 1821 | 1822 | retry@0.12.0: 1823 | version "0.12.0" 1824 | resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" 1825 | integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= 1826 | 1827 | reusify@^1.0.4: 1828 | version "1.0.4" 1829 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 1830 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 1831 | 1832 | run-async@^2.4.0: 1833 | version "2.4.1" 1834 | resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" 1835 | integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== 1836 | 1837 | run-parallel@^1.1.9: 1838 | version "1.2.0" 1839 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" 1840 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 1841 | dependencies: 1842 | queue-microtask "^1.2.2" 1843 | 1844 | rxjs@^6.6.6: 1845 | version "6.6.7" 1846 | resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" 1847 | integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== 1848 | dependencies: 1849 | tslib "^1.9.0" 1850 | 1851 | safe-buffer@^5.1.0, safe-buffer@~5.2.0: 1852 | version "5.2.1" 1853 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 1854 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 1855 | 1856 | "safer-buffer@>= 2.1.2 < 3": 1857 | version "2.1.2" 1858 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 1859 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 1860 | 1861 | semver-diff@^3.1.1: 1862 | version "3.1.1" 1863 | resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" 1864 | integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== 1865 | dependencies: 1866 | semver "^6.3.0" 1867 | 1868 | semver@7.3.5, semver@^7.3.4: 1869 | version "7.3.5" 1870 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" 1871 | integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== 1872 | dependencies: 1873 | lru-cache "^6.0.0" 1874 | 1875 | semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: 1876 | version "6.3.0" 1877 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 1878 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 1879 | 1880 | serialize-javascript@5.0.1: 1881 | version "5.0.1" 1882 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" 1883 | integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== 1884 | dependencies: 1885 | randombytes "^2.1.0" 1886 | 1887 | shebang-command@^2.0.0: 1888 | version "2.0.0" 1889 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 1890 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 1891 | dependencies: 1892 | shebang-regex "^3.0.0" 1893 | 1894 | shebang-regex@^3.0.0: 1895 | version "3.0.0" 1896 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 1897 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 1898 | 1899 | shelljs@0.8.4: 1900 | version "0.8.4" 1901 | resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.4.tgz#de7684feeb767f8716b326078a8a00875890e3c2" 1902 | integrity sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ== 1903 | dependencies: 1904 | glob "^7.0.0" 1905 | interpret "^1.0.0" 1906 | rechoir "^0.6.2" 1907 | 1908 | side-channel@^1.0.4: 1909 | version "1.0.4" 1910 | resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" 1911 | integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== 1912 | dependencies: 1913 | call-bind "^1.0.0" 1914 | get-intrinsic "^1.0.2" 1915 | object-inspect "^1.9.0" 1916 | 1917 | signal-exit@^3.0.2, signal-exit@^3.0.3: 1918 | version "3.0.3" 1919 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" 1920 | integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== 1921 | 1922 | slash@^3.0.0: 1923 | version "3.0.0" 1924 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 1925 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 1926 | 1927 | split-on-first@^1.0.0: 1928 | version "1.1.0" 1929 | resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" 1930 | integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== 1931 | 1932 | strict-uri-encode@^2.0.0: 1933 | version "2.0.0" 1934 | resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" 1935 | integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= 1936 | 1937 | "string-width@^1.0.2 || 2": 1938 | version "2.1.1" 1939 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 1940 | integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== 1941 | dependencies: 1942 | is-fullwidth-code-point "^2.0.0" 1943 | strip-ansi "^4.0.0" 1944 | 1945 | string-width@^3.0.0: 1946 | version "3.1.0" 1947 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" 1948 | integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== 1949 | dependencies: 1950 | emoji-regex "^7.0.1" 1951 | is-fullwidth-code-point "^2.0.0" 1952 | strip-ansi "^5.1.0" 1953 | 1954 | string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0: 1955 | version "4.2.2" 1956 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" 1957 | integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== 1958 | dependencies: 1959 | emoji-regex "^8.0.0" 1960 | is-fullwidth-code-point "^3.0.0" 1961 | strip-ansi "^6.0.0" 1962 | 1963 | string_decoder@^1.1.1: 1964 | version "1.3.0" 1965 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" 1966 | integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== 1967 | dependencies: 1968 | safe-buffer "~5.2.0" 1969 | 1970 | strip-ansi@^4.0.0: 1971 | version "4.0.0" 1972 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 1973 | integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= 1974 | dependencies: 1975 | ansi-regex "^3.0.0" 1976 | 1977 | strip-ansi@^5.1.0: 1978 | version "5.2.0" 1979 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" 1980 | integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== 1981 | dependencies: 1982 | ansi-regex "^4.1.0" 1983 | 1984 | strip-ansi@^6.0.0: 1985 | version "6.0.0" 1986 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" 1987 | integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== 1988 | dependencies: 1989 | ansi-regex "^5.0.0" 1990 | 1991 | strip-final-newline@^2.0.0: 1992 | version "2.0.0" 1993 | resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" 1994 | integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== 1995 | 1996 | strip-json-comments@3.1.1: 1997 | version "3.1.1" 1998 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 1999 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 2000 | 2001 | strip-json-comments@~2.0.1: 2002 | version "2.0.1" 2003 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 2004 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= 2005 | 2006 | supports-color@8.1.1: 2007 | version "8.1.1" 2008 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" 2009 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== 2010 | dependencies: 2011 | has-flag "^4.0.0" 2012 | 2013 | supports-color@^5.3.0: 2014 | version "5.5.0" 2015 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 2016 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 2017 | dependencies: 2018 | has-flag "^3.0.0" 2019 | 2020 | supports-color@^7.1.0: 2021 | version "7.2.0" 2022 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 2023 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 2024 | dependencies: 2025 | has-flag "^4.0.0" 2026 | 2027 | through@^2.3.6: 2028 | version "2.3.8" 2029 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 2030 | integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= 2031 | 2032 | tmp@^0.0.33: 2033 | version "0.0.33" 2034 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" 2035 | integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== 2036 | dependencies: 2037 | os-tmpdir "~1.0.2" 2038 | 2039 | to-readable-stream@^1.0.0: 2040 | version "1.0.0" 2041 | resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" 2042 | integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== 2043 | 2044 | to-regex-range@^5.0.1: 2045 | version "5.0.1" 2046 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 2047 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 2048 | dependencies: 2049 | is-number "^7.0.0" 2050 | 2051 | tslib@^1.9.0: 2052 | version "1.14.1" 2053 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" 2054 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 2055 | 2056 | type-fest@^0.20.2: 2057 | version "0.20.2" 2058 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" 2059 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 2060 | 2061 | type-fest@^0.21.3: 2062 | version "0.21.3" 2063 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" 2064 | integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== 2065 | 2066 | typedarray-to-buffer@^3.1.5: 2067 | version "3.1.5" 2068 | resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" 2069 | integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== 2070 | dependencies: 2071 | is-typedarray "^1.0.0" 2072 | 2073 | underscore@1.13.1: 2074 | version "1.13.1" 2075 | resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.1.tgz#0c1c6bd2df54b6b69f2314066d65b6cde6fcf9d1" 2076 | integrity sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g== 2077 | 2078 | unique-string@^2.0.0: 2079 | version "2.0.0" 2080 | resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" 2081 | integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== 2082 | dependencies: 2083 | crypto-random-string "^2.0.0" 2084 | 2085 | universal-user-agent@^6.0.0: 2086 | version "6.0.0" 2087 | resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" 2088 | integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== 2089 | 2090 | update-notifier@5.1.0: 2091 | version "5.1.0" 2092 | resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-5.1.0.tgz#4ab0d7c7f36a231dd7316cf7729313f0214d9ad9" 2093 | integrity sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw== 2094 | dependencies: 2095 | boxen "^5.0.0" 2096 | chalk "^4.1.0" 2097 | configstore "^5.0.1" 2098 | has-yarn "^2.1.0" 2099 | import-lazy "^2.1.0" 2100 | is-ci "^2.0.0" 2101 | is-installed-globally "^0.4.0" 2102 | is-npm "^5.0.0" 2103 | is-yarn-global "^0.3.0" 2104 | latest-version "^5.1.0" 2105 | pupa "^2.1.1" 2106 | semver "^7.3.4" 2107 | semver-diff "^3.1.1" 2108 | xdg-basedir "^4.0.0" 2109 | 2110 | url-join@4.0.1: 2111 | version "4.0.1" 2112 | resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" 2113 | integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA== 2114 | 2115 | url-parse-lax@^3.0.0: 2116 | version "3.0.0" 2117 | resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" 2118 | integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= 2119 | dependencies: 2120 | prepend-http "^2.0.0" 2121 | 2122 | util-deprecate@^1.0.1: 2123 | version "1.0.2" 2124 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 2125 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 2126 | 2127 | uuid@8.3.2: 2128 | version "8.3.2" 2129 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" 2130 | integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== 2131 | 2132 | wcwidth@^1.0.1: 2133 | version "1.0.1" 2134 | resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" 2135 | integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= 2136 | dependencies: 2137 | defaults "^1.0.3" 2138 | 2139 | which@2.0.2, which@^2.0.1: 2140 | version "2.0.2" 2141 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 2142 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 2143 | dependencies: 2144 | isexe "^2.0.0" 2145 | 2146 | wide-align@1.1.3: 2147 | version "1.1.3" 2148 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" 2149 | integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== 2150 | dependencies: 2151 | string-width "^1.0.2 || 2" 2152 | 2153 | widest-line@^3.1.0: 2154 | version "3.1.0" 2155 | resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" 2156 | integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== 2157 | dependencies: 2158 | string-width "^4.0.0" 2159 | 2160 | windows-release@^4.0.0: 2161 | version "4.0.0" 2162 | resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-4.0.0.tgz#4725ec70217d1bf6e02c7772413b29cdde9ec377" 2163 | integrity sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg== 2164 | dependencies: 2165 | execa "^4.0.2" 2166 | 2167 | workerpool@6.1.4: 2168 | version "6.1.4" 2169 | resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.1.4.tgz#6a972b6df82e38d50248ee2820aa98e2d0ad3090" 2170 | integrity sha512-jGWPzsUqzkow8HoAvqaPWTUPCrlPJaJ5tY8Iz7n1uCz3tTp6s3CDG0FF1NsX42WNlkRSW6Mr+CDZGnNoSsKa7g== 2171 | 2172 | wrap-ansi@^7.0.0: 2173 | version "7.0.0" 2174 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 2175 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 2176 | dependencies: 2177 | ansi-styles "^4.0.0" 2178 | string-width "^4.1.0" 2179 | strip-ansi "^6.0.0" 2180 | 2181 | wrappy@1: 2182 | version "1.0.2" 2183 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2184 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 2185 | 2186 | write-file-atomic@^3.0.0: 2187 | version "3.0.3" 2188 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" 2189 | integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== 2190 | dependencies: 2191 | imurmurhash "^0.1.4" 2192 | is-typedarray "^1.0.0" 2193 | signal-exit "^3.0.2" 2194 | typedarray-to-buffer "^3.1.5" 2195 | 2196 | xdg-basedir@^4.0.0: 2197 | version "4.0.0" 2198 | resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" 2199 | integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== 2200 | 2201 | y18n@^5.0.5: 2202 | version "5.0.8" 2203 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" 2204 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== 2205 | 2206 | yallist@^4.0.0: 2207 | version "4.0.0" 2208 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 2209 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 2210 | 2211 | yaml@1.10.2, yaml@^1.10.0: 2212 | version "1.10.2" 2213 | resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" 2214 | integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== 2215 | 2216 | yargs-parser@20.2.4: 2217 | version "20.2.4" 2218 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" 2219 | integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== 2220 | 2221 | yargs-parser@20.2.7: 2222 | version "20.2.7" 2223 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.7.tgz#61df85c113edfb5a7a4e36eb8aa60ef423cbc90a" 2224 | integrity sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw== 2225 | 2226 | yargs-parser@^20.2.2: 2227 | version "20.2.9" 2228 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" 2229 | integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== 2230 | 2231 | yargs-unparser@2.0.0: 2232 | version "2.0.0" 2233 | resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" 2234 | integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== 2235 | dependencies: 2236 | camelcase "^6.0.0" 2237 | decamelize "^4.0.0" 2238 | flat "^5.0.2" 2239 | is-plain-obj "^2.1.0" 2240 | 2241 | yargs@16.2.0: 2242 | version "16.2.0" 2243 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" 2244 | integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== 2245 | dependencies: 2246 | cliui "^7.0.2" 2247 | escalade "^3.1.1" 2248 | get-caller-file "^2.0.5" 2249 | require-directory "^2.1.1" 2250 | string-width "^4.2.0" 2251 | y18n "^5.0.5" 2252 | yargs-parser "^20.2.2" 2253 | 2254 | yocto-queue@^0.1.0: 2255 | version "0.1.0" 2256 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 2257 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 2258 | --------------------------------------------------------------------------------