├── .gitignore ├── .vscode ├── launch.json ├── settings.json └── tasks.json ├── .vscodeignore ├── CHANGELOG.md ├── README.md ├── images ├── icon.png ├── screenshot_custom_prefix.gif ├── screenshot_indent.gif ├── screenshot_inline_replace.gif ├── screenshot_inline_string.gif └── screenshot_log_cursor.gif ├── package.json ├── src └── extension.ts ├── tsconfig.json └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | out 2 | node_modules 3 | *.vsix 4 | issues -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | // A launch configuration that compiles the extension and then opens it inside a new window 2 | { 3 | "version": "0.1.0", 4 | "configurations": [ 5 | { 6 | "name": "Launch Extension", 7 | "type": "extensionHost", 8 | "request": "launch", 9 | "runtimeExecutable": "${execPath}", 10 | "args": ["--extensionDevelopmentPath=${workspaceRoot}" ], 11 | "stopOnEntry": false, 12 | "smartStep": true, 13 | "sourceMaps": true, 14 | "outFiles": ["${workspaceRoot}/out"], 15 | "preLaunchTask": "npm" 16 | }, 17 | { 18 | 19 | "name": "Launch Tests", 20 | "type": "extensionHost", 21 | "request": "launch", 22 | "runtimeExecutable": "${execPath}", 23 | "args": ["--extensionDevelopmentPath=${workspaceRoot}", "--extensionTestsPath=${workspaceRoot}/out/test" ], 24 | "stopOnEntry": false, 25 | "sourceMaps": true, 26 | "outFiles": ["${workspaceRoot}/out/test"], 27 | "preLaunchTask": "npm" 28 | } 29 | ] 30 | } 31 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | // Place your settings in this file to overwrite default and user settings. 2 | { 3 | "files.exclude": { 4 | "out": false // set this to true to hide the "out" folder with the compiled JS files 5 | }, 6 | "search.exclude": { 7 | "out": true // set this to false to include "out" folder in search results 8 | }, 9 | // "typescript.tsdk": "./node_modules/typescript/lib", 10 | "git.enabled": true // we want to use the TS server from our node_modules folder to control its version 11 | } -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | // Available variables which can be used inside of strings. 2 | // ${workspaceRoot}: the root folder of the team 3 | // ${file}: the current opened file 4 | // ${fileBasename}: the current opened file's basename 5 | // ${fileDirname}: the current opened file's dirname 6 | // ${fileExtname}: the current opened file's extension 7 | // ${cwd}: the current working directory of the spawned process 8 | 9 | // A task runner that calls a custom npm script that compiles the extension. 10 | { 11 | "version": "0.1.0", 12 | 13 | // we want to run npm 14 | "command": "npm", 15 | 16 | // the command is a shell script 17 | "isShellCommand": true, 18 | 19 | // show the output window only if unrecognized errors occur. 20 | "showOutput": "silent", 21 | 22 | // we run the custom script "compile" as defined in package.json 23 | "args": ["run", "compile", "--loglevel", "silent"], 24 | 25 | // The tsc compiler is started in watching mode 26 | "isBackground": true, 27 | 28 | // use the standard tsc in watch mode problem matcher to find compile problems in the output. 29 | "problemMatcher": "$tsc-watch" 30 | 31 | } -------------------------------------------------------------------------------- /.vscodeignore: -------------------------------------------------------------------------------- 1 | .vscode/** 2 | .vscode-test/** 3 | out/test/** 4 | test/** 5 | src/** 6 | **/*.map 7 | .gitignore 8 | tsconfig.json 9 | issues/** -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ##### vscode-wrap-console-log 2 | 3 | # CHANGELOG 4 | 5 | ## 1.7.2 6 | ##### 2019-02-19 7 | 8 | ### Fixed 9 | 10 | - Setting `.emptyLineAction` using wrong default value 11 | 12 | --- 13 | 14 | ## 1.7.1 15 | ##### 2019-01-15 16 | 17 | ### Fixed 18 | 19 | - > [Issue #12](https://github.com/midnightsyntax/vscode-wrap-console-log/issues/12]) 20 | 21 | Setting `.logFunctionName` and `.prefixFunctionName` using `console.text` instead of `console.log` 22 | - Command `wrap.string` not logging as string 23 | 24 | --- 25 | 26 | ## 1.7.0 27 | ##### 2019-01-13 28 | 29 | ### Added 30 | - Setting `.logFunctionName` has been added 31 | - Setting `.logString` has been added 32 | - Setting `.prefixFunctionName` has been added 33 | - Setting `.prefixString` has been added 34 | 35 | ### Changed 36 | - Setting `.setCursorOnNewLine` renamed to `configuration.moveToLine` 37 | - Setting `.cursorPositionNewLine` renamed to `configuration.moveToPosition` 38 | - Setting `.onEmptyLineAction` renamed to `configuration.emptyLineAction` 39 | - Various settings descriptions 40 | 41 | ### Removed 42 | - Setting `.wrapText` has been removed in favor of the new custom log settings 43 | 44 | ## More custom log support 45 | Get finer control over the inserted log string. It is now possible to set a custom function name for the default log command as well as the prefix command. 46 | 47 | Log and Prefix correspond to two different keybindings, the default `wrap` with no prefix and `wrap.prefix`. 48 | 49 | Use `Log Function Name` and `Log String` to specify the log function for the default logging command with no prefix. 50 | 51 | Use `Prefix Function Name` and `Prefix String` to specify a different function when logging with prefixes. 52 | 53 | Default configuration values are: 54 | 55 | - Default Log Function Name: `console.log` 56 | - Default Log String: `$func($var)` 57 | - Default Prefix Function Name: `console.log` 58 | - Default Prefix String: `$func('$var:', $var)` 59 | 60 | 61 | ## Configuration settings reworked 62 | With the new Settings UI in Visual Studio Code all configuration setting names and descriptions have been reworked! 63 | The configuration settings are now much easier to understand and edited in the Settings window. 64 | 65 | --- 66 | 67 | ## 1.6.2 68 | ##### 2018-05-22 69 | 70 | ### Fixed 71 | 72 | - > [Issue #5](https://github.com/midnightsyntax/vscode-wrap-console-log/issues/5) 73 | 74 | Commands `wrap.prefix`, `wrap.up.prefix`, `wrap.down.prefix` not using prefix 75 | 76 | --- 77 | 78 | ## 1.6.1 79 | ##### 2018-02-13 80 | 81 | ### Fixed 82 | - Prefix value from inbox box not being used 83 | - Input box command not activating the extension 84 | 85 | --- 86 | 87 | ## 1.6.0 88 | ##### 2018-01-15 89 | 90 | ### Added 91 | - Custom wrap text! 92 | - New config settings `.wrapText` 93 | 94 | Specify the text to wrap with with the new setting `.wrapText`. 95 | The default value of this setting is `console.log($txt);` where `$txt` specifies where the variable/text should be inserted. If the value of `.wrapText` does not include `$txt` vscode will warn you. Make sure you specify `$txt` ONE time if you change this setting. 96 | 97 | --- 98 | 99 | 100 | ## 1.5.0 101 | ##### 2018-01-12 102 | 103 | ### Added 104 | - New command `wrap.string` 105 | - New command `wrap.string.up` 106 | - New command `wrap.string.down` 107 | 108 | ### Fixed 109 | - Fail to log down bugs 110 | 111 | It is now possible to log what you type as text. Check out the new feature in the updated README.md. 112 | 113 | If you like this extensioin or have any suggestion or bug you found please hit me up on github and/or drop a rating/review on the marketplace. :) 114 | 115 | Happy coding! 116 | 117 | --- 118 | 119 | ## 1.4.0 120 | ##### 2017-11-07 121 | 122 | ### Changed 123 | 124 | - [Down] and [Up] will now create a new line by default. If the target line is empty you can now decide if you rather have 'console.log' replace the empty line. Set this behaviour with the new `.onEmptyLineAction` setting. 125 | 126 | ### Added 127 | 128 | - New config setting `.onEmptyLineAction` 129 | - New config setting `.setCursorOnNewLine` 130 | 131 | By setting `.setCursorOnNewLine` to `true` the cursor will move to the new line when one is created by wrapping 'console.log' [Down] or [Up]. 132 | 133 | 134 | --- 135 | 136 | ## 1.3.3 137 | ##### 2017-09-11 138 | 139 | ### Changed 140 | 141 | - `Wrap down` will now, if next line exists: 142 | - Keep same indent as **current line** if next line indent is shorter. 143 | - Use the same indent as **next line** if next line indent is longer. 144 | 145 | --- 146 | 147 | ## 1.3.2 148 | ##### 2017-09-10 149 | 150 | ### Changed 151 | 152 | - `Wrap down` will now, if next line exists but is empty, insert without creating a new line 153 | 154 | ### Fixed 155 | 156 | - Indent break on wrap down 157 | - `Wrap down` fail to execute if no line exist below 158 | - Unhandled promise rejections 159 | 160 | --- 161 | 162 | ## 1.3.1 163 | ##### 2017-08-30 164 | 165 | ### Added 166 | 167 | - Description for config setting `.alwaysInputBoxOnPrefix` 168 | 169 | --- 170 | 171 | ## 1.3.0 172 | ##### 2017-08-30 173 | 174 | ### Added 175 | 176 | - CHANGELOG file 177 | - New command `:InlinePrefixInput` 178 | - New command `:UpPrefixInput` 179 | - New command `:DownPrefixInput` 180 | - New config setting `.alwaysUsePrefix` 181 | - New config setting `.alwaysInputBoxOnPrefix` 182 | - New keybinding `ctrl+shift+alt+w ctrl+shift+alt+w` 183 | - New keybinding `ctrl+shift+alt+up ctrl+shift+alt+up` 184 | - New keybinding `ctrl+shift+alt+down ctrl+shift+alt+down` 185 | - Keybindings now have 'when' statements 186 | 187 | ### Changed 188 | 189 | - Renamed command `:UpArg` to `:UpPrefix` 190 | - Renamed command `:DownArg` to `:DownPrefix` 191 | - Renamed command `:InlineArg` to `:InlinePrefix` 192 | - Some config settings titles/descriptions now make more sense 193 | 194 | ### Removed 195 | 196 | - Test files 197 | 198 | --- 199 | 200 | ## 1.2.1 201 | ##### 2017-08-28 202 | 203 | ### Added 204 | 205 | - New config setting for "Prefix from input box" 206 | 207 | --- 208 | 209 | ## 1.2.0 210 | ##### 2017-08-28 211 | 212 | ### Added 213 | 214 | - New feature "Prefix from input box" 215 | - Extension icon image 216 | - New GIF screenshot 217 | 218 | ### Changed 219 | 220 | - Package now specify extension keywords for the marketplace 221 | - README to make more sense 222 | 223 | --- 224 | 225 | ## 1.0.0 226 | ##### 2017-08-28 227 | 228 | - Initial release -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Wrap Console Log 2 | 3 | This extension wraps the word near your cursor and replaces it as an argument for `console.log`. 4 | 5 | ## Key features 6 | 7 | * Optimized for keyboard use 8 | * No selection needed 9 | * Wrap and replace for fast logging 10 | * Doesn't break indent 11 | * Can log variables with and without prefixed text 12 | * Supports custom prefix 13 | 14 | > ### Type the variable to log 15 | 16 | ![demo](images/screenshot_inline_replace.gif) 17 | 18 | 19 | > ### Log the variable on cursor 20 | 21 | ![demo](images/screenshot_log_cursor.gif) 22 | 23 | 24 | > ### Type and log it as a string 25 | 26 | 27 | ![demo](images/screenshot_inline_string.gif) 28 | 29 | 30 | > ### Keep your indents 31 | 32 | ![demo](images/screenshot_indent.gif) 33 | 34 | 35 | > ### Use custom prefix 36 | 37 | ![demo](images/screenshot_custom_prefix.gif) 38 | 39 | 40 | The fastest way to log your variables! Type it and press `Ctrl+Alt+W` + `W`. 41 | 42 | Another way to `console.log` your variables is to simply place your **mouse cursor** on them and then wrap them on the line below with `Ctrl+Alt+W` + `Down` or the line above with `Ctrl+Alt+W` + `Up`. 43 | 44 | Does the keyboard shortcuts seem to complex? Don't worry, they feel way more comfortable than they look. :) 45 | 46 | Also, you are free to rebind all keyboard shortcuts as you want in your workspace and user settings files. :) 47 | 48 | 49 | ## Keyboard shortcuts 50 | 51 | > ### Log as string 52 | *Replace the word on your cursor or the selected text* 53 | 54 | * `Alt+Shift+W` + `W` 55 | 56 | ##### OBS: If the string to log contains spaces you need to select the whole string 57 | 58 | --- 59 | 60 | ### Log on current line 61 | *Replace the variable on the mouse cursor* 62 | > ### Wrap and replace 63 | 64 | * `Ctrl+Alt+W` + `W` 65 | 66 | > ### With prefix 67 | 68 | * `Ctrl+Alt+W` + `Ctrl+Alt+W` 69 | 70 | 71 | > ### With prefix (show input box) 72 | 73 | * `Ctrl+Shift+Alt+W` + `Ctrl+Shift+Alt+W` 74 | 75 | --- 76 | 77 | ### Insert **down** 78 | *Insert console.log on the line below* 79 | 80 | > ### Down 81 | 82 | * `Ctrl+Alt+W` + `Down` 83 | 84 | > ### With prefix 85 | 86 | * `Ctrl+Alt+W` + `Ctrl+Alt+Down` 87 | 88 | 89 | > ### With prefix (show input box) 90 | 91 | * `Ctrl+Shift+Alt+W` + `Ctrl+Shift+Alt+Down` 92 | 93 | --- 94 | 95 | ### Insert **up** 96 | *Insert console.log on the line above* 97 | 98 | > ### Up 99 | 100 | * `Ctrl+Alt+W` + `Up` 101 | 102 | > ### With prefix 103 | 104 | * `Ctrl+Alt+W` + `Ctrl+Alt+Up` 105 | 106 | 107 | > ### With prefix (show input box) 108 | 109 | * `Ctrl+Shift+Alt+W` + `Ctrl+Shift+Alt+Up` 110 | 111 | -------------------------------------------------------------------------------- /images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midnightsyntax/vscode-wrap-console-log/7255d2592df9e77aa301f3ed1b83fddd3c091196/images/icon.png -------------------------------------------------------------------------------- /images/screenshot_custom_prefix.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midnightsyntax/vscode-wrap-console-log/7255d2592df9e77aa301f3ed1b83fddd3c091196/images/screenshot_custom_prefix.gif -------------------------------------------------------------------------------- /images/screenshot_indent.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midnightsyntax/vscode-wrap-console-log/7255d2592df9e77aa301f3ed1b83fddd3c091196/images/screenshot_indent.gif -------------------------------------------------------------------------------- /images/screenshot_inline_replace.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midnightsyntax/vscode-wrap-console-log/7255d2592df9e77aa301f3ed1b83fddd3c091196/images/screenshot_inline_replace.gif -------------------------------------------------------------------------------- /images/screenshot_inline_string.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midnightsyntax/vscode-wrap-console-log/7255d2592df9e77aa301f3ed1b83fddd3c091196/images/screenshot_inline_string.gif -------------------------------------------------------------------------------- /images/screenshot_log_cursor.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midnightsyntax/vscode-wrap-console-log/7255d2592df9e77aa301f3ed1b83fddd3c091196/images/screenshot_log_cursor.gif -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vscode-wrap-console-log", 3 | "displayName": "Wrap Console Log", 4 | "description": "Wrap to console.log by word or selection", 5 | "repository": { 6 | "type": "git", 7 | "url": "https://github.com/midnightsyntax/vscode-wrap-console-log" 8 | }, 9 | "version": "1.7.3", 10 | "publisher": "midnightsyntax", 11 | "icon": "images/icon.png", 12 | "engines": { 13 | "vscode": "^1.5.0" 14 | }, 15 | "categories": [ 16 | "Formatters" 17 | ], 18 | "keywords": [ 19 | "wrap", 20 | "console", 21 | "log" 22 | ], 23 | "activationEvents": [ 24 | "onCommand:console.log.wrap", 25 | "onCommand:console.log.wrap.input", 26 | "onCommand:console.log.wrap.prefix", 27 | "onCommand:console.log.wrap.prefix.input", 28 | "onCommand:console.log.wrap.up", 29 | "onCommand:console.log.wrap.up.prefix", 30 | "onCommand:console.log.wrap.up.prefix.input", 31 | "onCommand:console.log.wrap.down", 32 | "onCommand:console.log.wrap.down.prefix", 33 | "onCommand:console.log.wrap.down.prefix.input", 34 | "onCommand:console.log.wrap.string", 35 | "onCommand:console.log.wrap.string.up", 36 | "onCommand:console.log.wrap.string.down" 37 | ], 38 | "main": "out/extension.js", 39 | "contributes": { 40 | "configuration": { 41 | "id": "wrap-console-log", 42 | "title": "Wrap Console Log", 43 | "type": "object", 44 | "properties": { 45 | "wrap-console-log.autoFormat": { 46 | "type": "boolean", 47 | "description": "Run VSCode 'Format Document' after every log command.", 48 | "default": false 49 | }, 50 | "wrap-console-log.configuration.emptyLineAction": { 51 | "type": "string", 52 | "enum": [ 53 | "Insert and push", 54 | "Replace empty" 55 | ], 56 | "markdownDescription": "Defines the default text action when logging to an empty line. \n\n`Insert and push` will push the target line in the direction of the log command. \n\n`Replace empty` will replace the target line. No existing rows will be moved.", 57 | "default": "Insert and push" 58 | }, 59 | "wrap-console-log.configuration.moveToLine": { 60 | "type": "string", 61 | "enum": [ 62 | "Current line", 63 | "Target line" 64 | ], 65 | "description": "Controls what line the cursor should be set to after log.", 66 | "default": "Current line" 67 | }, 68 | "wrap-console-log.configuration.moveToPosition": { 69 | "type": "string", 70 | "enum": [ 71 | "Current position", 72 | "First character", 73 | "Beginning of line", 74 | "End of line" 75 | ], 76 | "description": "Specifies the cursor position within the log line after log.", 77 | "default": "Current position" 78 | }, 79 | "wrap-console-log.alwaysInputBoxOnPrefix": { 80 | "type": "boolean", 81 | "title": "Always show input box when wrapping with a prefix.", 82 | "description": "Always use the input box when logging with a prefix.", 83 | "default": false 84 | }, 85 | "wrap-console-log.alwaysUsePrefix": { 86 | "type": "boolean", 87 | "title": "Always log with the wrapped word as prefix.", 88 | "description": "Always log with default prefix.", 89 | "default": false 90 | }, 91 | "wrap-console-log.format.wrap.logFunctionName": { 92 | "markdownDescription": "Defines the function to use for default logging with no arguments. See also [`Log String`](#wrap-console-log.format.text.logString).", 93 | "type": "string", 94 | "default": "console.log", 95 | "pattern": "^[a-zA-Z.-]+$" 96 | }, 97 | "wrap-console-log.format.wrap.logString": { 98 | "markdownDescription": "Enables custom control of the default log string. Use `$func` to specify the function name defined by [`Log Function`](#wrap-console-log.format.text.textFunction) and `$var` to specify the variable/text to log. `$var` can be specified **one** or **multible** times. ", 99 | "type": "string", 100 | "default": "$func($var)" 101 | }, 102 | "wrap-console-log.format.wrap.prefixFunctionName": { 103 | "markdownDescription": "Defines the function to use for logging with prefix. See also [`Wrap Advanced`](#wrap-console-log.format.text.prefixString).", 104 | "type": "string", 105 | "default": "console.log", 106 | "pattern": "^[a-zA-Z.-]+$" 107 | }, 108 | "wrap-console-log.format.wrap.prefixString": { 109 | "markdownDescription": "Enables custom control of the prefix log string. Use `$func` to specify the function name defined by [`Wrap Function Name`](#wrap-console-log.format.text.prefixFunctionName) and `$var` to specify the variable/text to log. `$var` can be specified **one** or **multible** times. ", 110 | "type": "string", 111 | "default": "$func('$var:', $var)" 112 | } 113 | } 114 | }, 115 | "commands": [ 116 | { 117 | "command": "console.log.wrap", 118 | "title": "Wrap console.log" 119 | }, 120 | { 121 | "command": "console.log.wrap.down", 122 | "title": "Wrap down console log" 123 | }, 124 | { 125 | "command": "console.log.wrap.up", 126 | "title": "Wrap up console log" 127 | }, 128 | { 129 | "command": "console.log.wrap.prefix", 130 | "title": "Wrap prefix console log" 131 | }, 132 | { 133 | "command": "console.log.wrap.input", 134 | "title": "Wrap input console log" 135 | }, 136 | { 137 | "command": "console.log.wrap.down.prefix", 138 | "title": "Wrap down prefix console log" 139 | }, 140 | { 141 | "command": "console.log.wrap.up.prefix", 142 | "title": "Wrap up prefix console log" 143 | }, 144 | { 145 | "command": "console.log.wrap.down.input", 146 | "title": "Wrap down input console log" 147 | }, 148 | { 149 | "command": "console.log.wrap.up.input", 150 | "title": "Wrap up input console log" 151 | }, 152 | { 153 | "command": "console.log.wrap.string", 154 | "title": "Wrap console.log as string" 155 | }, 156 | { 157 | "command": "console.log.wrap.string.down", 158 | "title": "Wrap down console.log as string" 159 | }, 160 | { 161 | "command": "console.log.wrap.string.up", 162 | "title": "Wrap up console.log as string" 163 | } 164 | ], 165 | "keybindings": [ 166 | { 167 | "command": "console.log.wrap", 168 | "key": "ctrl+alt+w w", 169 | "when": "editorTextFocus" 170 | }, 171 | { 172 | "command": "console.log.wrap.string", 173 | "key": "alt+shift+w w", 174 | "when": "editorTextFocus" 175 | }, 176 | { 177 | "command": "console.log.wrap.string.down", 178 | "key": "alt+shift+w down", 179 | "when": "editorTextFocus" 180 | }, 181 | { 182 | "command": "console.log.wrap.string.up", 183 | "key": "alt+shift+w up", 184 | "when": "editorTextFocus" 185 | }, 186 | { 187 | "command": "console.log.wrap.down", 188 | "key": "ctrl+alt+w down", 189 | "when": "editorTextFocus" 190 | }, 191 | { 192 | "command": "console.log.wrap.up", 193 | "key": "ctrl+alt+w up", 194 | "when": "editorTextFocus" 195 | }, 196 | { 197 | "command": "console.log.wrap.prefix", 198 | "key": "ctrl+alt+w ctrl+alt+w", 199 | "when": "editorTextFocus" 200 | }, 201 | { 202 | "command": "console.log.wrap.input", 203 | "key": "ctrl+shift+alt+w w", 204 | "when": "editorTextFocus" 205 | }, 206 | { 207 | "command": "console.log.wrap.down.prefix", 208 | "key": "ctrl+alt+w ctrl+alt+down", 209 | "when": "editorTextFocus" 210 | }, 211 | { 212 | "command": "console.log.wrap.up.prefix", 213 | "key": "ctrl+alt+w ctrl+alt+up", 214 | "when": "editorTextFocus" 215 | }, 216 | { 217 | "command": "console.log.wrap.down.input", 218 | "key": "ctrl+shift+alt+w down", 219 | "when": "editorTextFocus" 220 | }, 221 | { 222 | "command": "console.log.wrap.up.input", 223 | "key": "ctrl+shift+alt+w up", 224 | "when": "editorTextFocus" 225 | } 226 | ] 227 | }, 228 | "scripts": { 229 | "vscode:prepublish": "yarn run compile", 230 | "compile": "tsc -p ./", 231 | "postinstall": "node ./node_modules/vscode/bin/install" 232 | }, 233 | "devDependencies": { 234 | "@types/node": "^8.10.25", 235 | "typescript": "^3.1.4", 236 | "vscode": "^1.1.34" 237 | } 238 | } 239 | -------------------------------------------------------------------------------- /src/extension.ts: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | import * as vscode from 'vscode'; 4 | import { window, QuickPickItem, workspace } from 'vscode'; 5 | import * as path from 'path'; 6 | import * as fs from 'fs'; 7 | 8 | let currentEditor:vscode.TextEditor; 9 | let currentContext:vscode.ExtensionContext; 10 | 11 | export function activate(context: vscode.ExtensionContext) { 12 | currentContext = context; 13 | currentEditor = vscode.window.activeTextEditor; 14 | var props = JSON.parse(fs.readFileSync(path.join(currentContext.extensionPath, 'package.json'), 'utf8')).contributes.configuration.properties; 15 | Object.keys(props).forEach((prop, i) => { 16 | let pName = prop.replace('wrap-console-log.',''); 17 | let pObj = props[prop]; 18 | let settingValue = getSetting(pName); 19 | if (pObj) { 20 | if (pObj.hasOwnProperty("enum")) { 21 | console.log(`Checking enum config '${pName}'`); 22 | let valueValid = pObj.enum.some(val => val == settingValue); 23 | if (!valueValid) { 24 | vscode.workspace.getConfiguration("wrap-console-log").update(pName, undefined); 25 | console.log(`Invalid setting value! '${pName}' has been set to default value '${pObj.default}'`); 26 | } 27 | } 28 | } 29 | }); 30 | vscode.window.onDidChangeActiveTextEditor(editor => currentEditor = editor); 31 | 32 | context.subscriptions.push( 33 | vscode.commands.registerTextEditorCommand('console.log.wrap', (editor, edit) => handle(Wrap.Inline)), 34 | vscode.commands.registerTextEditorCommand('console.log.wrap.string', (editor, edit) => handle(Wrap.Inline, false, false, FormatAs.String)), 35 | vscode.commands.registerTextEditorCommand('console.log.wrap.string.up', (editor, edit) => handle(Wrap.Up, false, false, FormatAs.String)), 36 | vscode.commands.registerTextEditorCommand('console.log.wrap.string.down', (editor, edit) => handle(Wrap.Down, false, false, FormatAs.String)), 37 | vscode.commands.registerTextEditorCommand('console.log.wrap.prefix', (editor, edit) => handle(Wrap.Inline, true)), 38 | vscode.commands.registerTextEditorCommand('console.log.wrap.input', (editor, edit) => handle(Wrap.Inline, true, true)), 39 | vscode.commands.registerTextEditorCommand('console.log.wrap.up', (editor, edit) => handle(Wrap.Up)), 40 | vscode.commands.registerTextEditorCommand('console.log.wrap.up.prefix', (editor, edit) => handle(Wrap.Up, true)), 41 | vscode.commands.registerTextEditorCommand('console.log.wrap.up.input', (editor, edit) => handle(Wrap.Up, true, true)), 42 | vscode.commands.registerTextEditorCommand('console.log.wrap.down', (editor, edit) => handle(Wrap.Down)), 43 | vscode.commands.registerTextEditorCommand('console.log.wrap.down.prefix', (editor, edit) => handle(Wrap.Down, true)), 44 | vscode.commands.registerTextEditorCommand('console.log.wrap.down.input', (editor, edit) => handle(Wrap.Down, true, true)) 45 | ); 46 | } 47 | 48 | function handle(target: Wrap, prefix?: boolean, input?: boolean, formatAs?: FormatAs) { 49 | 50 | new Promise((resolve, reject) => { 51 | let sel = currentEditor.selection; 52 | let len = sel.end.character - sel.start.character; 53 | 54 | let ran = len == 0 ? currentEditor.document.getWordRangeAtPosition(sel.anchor) : 55 | new vscode.Range(sel.start, sel.end); 56 | 57 | if (ran == undefined) { 58 | reject('NO_WORD'); 59 | } 60 | else { 61 | 62 | let doc = currentEditor.document; 63 | let lineNumber = ran.start.line 64 | let idx = doc.lineAt(lineNumber).firstNonWhitespaceCharacterIndex 65 | let wrapData = { 66 | txt: undefined, 67 | item: doc.getText(ran), 68 | doc: doc, 69 | ran: ran, 70 | idx: idx, 71 | ind: doc.lineAt(lineNumber).text.substring(0, idx), 72 | line: lineNumber, 73 | sel: sel, 74 | lastLine: doc.lineCount-1 == lineNumber 75 | } ; 76 | 77 | prefix = prefix || getSetting("alwaysUsePrefix") ? true : false 78 | 79 | if (prefix) { 80 | if (getSetting("alwaysInputBoxOnPrefix") == true || input) { 81 | vscode.window.showInputBox({placeHolder: 'Prefix string', value: '', prompt: 'Use text from input box as prefix'}).then((val) => { 82 | if (val != undefined) { 83 | wrapData.txt = getSetting('format.wrap.prefixFunctionName').concat("('", val.trim(), "',", wrapData.item, ")"); 84 | resolve(wrapData); 85 | } else reject('INPUT_CANCEL'); 86 | }) 87 | } else { 88 | wrapData.txt = getSetting('format.wrap.prefixString').replace('$func', 89 | getSetting('format.wrap.prefixFunctionName')).replace(/[$]var/g, 90 | wrapData.item); 91 | resolve(wrapData); 92 | } 93 | } else { 94 | if (formatAs != undefined) { 95 | switch (formatAs) { 96 | case FormatAs.String: 97 | wrapData.txt = getSetting('format.wrap.logFunctionName').concat("('", wrapData.item, "')"); 98 | break; 99 | } 100 | } else { 101 | wrapData.txt = getSetting('format.wrap.logString') 102 | .replace('$func', getSetting('format.wrap.logFunctionName')).replace(/[$]var/g, wrapData.item) 103 | } 104 | resolve(wrapData); 105 | } 106 | }; 107 | }).then((wrap:WrapData) => { 108 | 109 | // "Insert and push", 110 | // "Replace empty" 111 | const onEmptyAction = getSetting("configuration.emptyLineAction"); 112 | 113 | // "Current position", 114 | // "Beginning of wrap", 115 | // "End of wrap", 116 | // "Beginning of Line", 117 | // "End of line" 118 | 119 | // "Current line", 120 | // "Target line" 121 | const setCursorLine = getSetting("configuration.moveToLine"); 122 | 123 | function SetCursor(line: number, character?: number) { 124 | 125 | let tpos; 126 | switch (getSetting('configuration.moveToPosition')) { 127 | 128 | case 'Current position': 129 | tpos = new vscode.Position(line, currentEditor.selection.anchor.character); 130 | break; 131 | 132 | case 'End of line': 133 | tpos = new vscode.Position(line, currentEditor.document.lineAt(line).range.end.character); 134 | break; 135 | 136 | case 'Beginning of line': 137 | tpos = new vscode.Position(line, currentEditor.document.lineAt(line).range.start.character); 138 | break; 139 | 140 | case 'Beginning of wrap': 141 | tpos = new vscode.Position(line, character); 142 | break; 143 | 144 | case 'First character': 145 | tpos = new vscode.Position(line, currentEditor.document.lineAt(line).firstNonWhitespaceCharacterIndex); 146 | break; 147 | 148 | default: 149 | break; 150 | } 151 | currentEditor.selection = new vscode.Selection(tpos, tpos) 152 | } 153 | 154 | function getTargetLine(go: Wrap) { 155 | let stop = false; 156 | let li = wrap.line; 157 | let l = 0; 158 | while (!stop) { 159 | if (go == Wrap.Down) { 160 | li++; 161 | } else { li-- } 162 | if (li < wrap.doc.lineCount) { 163 | if (!wrap.doc.lineAt(li).isEmptyOrWhitespace) { 164 | l = li; stop = true; 165 | } 166 | } else { 167 | if (li == wrap.doc.lineCount) li--; 168 | stop = true; 169 | } 170 | } 171 | return li; 172 | } 173 | 174 | switch (target) { 175 | 176 | case Wrap.Inline: { 177 | currentEditor.edit(function(e) { 178 | e.replace(wrap.ran, wrap.txt); 179 | }).then(() => { 180 | currentEditor.selection = new vscode.Selection( 181 | new vscode.Position(wrap.ran.start.line, wrap.txt.length + wrap.ran.start.character), 182 | new vscode.Position(wrap.ran.start.line, wrap.txt.length + wrap.ran.start.character) 183 | ) 184 | }); 185 | } break; 186 | 187 | case Wrap.Up: { 188 | 189 | let tLine = wrap.doc.lineAt(wrap.line == 0 ? 0 : wrap.line-1); 190 | let tLineEmpty = tLine.text.trim() == '' ? true : false; 191 | var lineCorr = 0 192 | 193 | currentEditor.edit(function(e) { 194 | if (tLineEmpty && onEmptyAction == "Replace empty") { 195 | lineCorr = -1; 196 | e.delete(tLine.rangeIncludingLineBreak); 197 | e.insert(new vscode.Position(wrap.line, 0), wrap.ind.concat(wrap.txt, '\n')) 198 | } else { 199 | setCursorLine == 'Current line' ? lineCorr = 1 : lineCorr = 0 200 | if (setCursorLine == 'Target line') { 201 | e.insert(new vscode.Position(wrap.line-1, wrap.idx), wrap.ind.concat(wrap.txt)); 202 | } else { 203 | e.insert(new vscode.Position(wrap.line, wrap.idx), wrap.txt.concat('\n',wrap.ind)); 204 | } 205 | } 206 | }).then(() => { 207 | SetCursor(wrap.line + lineCorr, wrap.ind.length); 208 | }); 209 | } break; 210 | 211 | case Wrap.Down: { 212 | 213 | let nxtLine: vscode.TextLine; 214 | let nxtLineInd: string; 215 | let nxtNonEmpty: vscode.TextLine 216 | 217 | if (!wrap.lastLine) { 218 | nxtLine = wrap.doc.lineAt(wrap.line+1); 219 | nxtLineInd = nxtLine.text.substring(0, nxtLine.firstNonWhitespaceCharacterIndex); 220 | } else { 221 | nxtLineInd = ""; 222 | } 223 | 224 | wrap.ind = vscode.workspace.getConfiguration("wrap-console-log")["autoFormat"] == true ? "" : wrap.ind; 225 | let pos = new vscode.Position(wrap.line, wrap.doc.lineAt(wrap.line).range.end.character); 226 | 227 | currentEditor.edit((e) => { 228 | let nxtNonEmpty; 229 | if (nxtLine) { 230 | nxtNonEmpty = (nxtLine.isEmptyOrWhitespace) ? wrap.doc.lineAt(getTargetLine(Wrap.Down)) : undefined; 231 | } 232 | if (wrap.lastLine == false && nxtLine.isEmptyOrWhitespace) { 233 | function defaultAction() { 234 | e.insert(new vscode.Position(wrap.line, wrap.doc.lineAt(wrap.line).range.end.character), "\n".concat((nxtLineInd > wrap.ind ? nxtLineInd : wrap.ind), wrap.txt)); 235 | }; 236 | if (onEmptyAction == "Insert and push") { 237 | defaultAction(); 238 | } else if (onEmptyAction == "Replace empty") { 239 | if (nxtLine && (nxtNonEmpty.firstNonWhitespaceCharacterIndex > 0)) { 240 | e.replace(new vscode.Position(nxtLine.lineNumber, 0), " ".repeat(nxtNonEmpty.firstNonWhitespaceCharacterIndex).concat(wrap.txt)); 241 | } else { 242 | e.replace(new vscode.Position(nxtLine.lineNumber, 0), wrap.ind.concat(wrap.txt)); 243 | } 244 | } else { 245 | console.log(`Invalid config setting! Using 'emptyLineAction' default value`); 246 | defaultAction(); 247 | } 248 | } else { 249 | e.insert(new vscode.Position(wrap.line, wrap.doc.lineAt(wrap.line).range.end.character), 250 | "\n".concat((nxtLineInd.length > wrap.ind.length ? nxtLineInd : wrap.ind), wrap.txt)); 251 | } 252 | }).then(() => { 253 | if (nxtLine == undefined) { 254 | nxtLine = wrap.doc.lineAt(wrap.line+1); 255 | } 256 | if (getSetting("autoFormat") == true && !wrap.lastLine) { 257 | let nextLineEnd = wrap.doc.lineAt(wrap.line+2).range.end; 258 | currentEditor.selection = new vscode.Selection(wrap.sel.start, nextLineEnd) 259 | vscode.commands.executeCommand("currentEditor.action.formatSelection").then(() => { 260 | currentEditor.selection = wrap.sel; 261 | }, (err) => { 262 | vscode.window.showErrorMessage("'formatSelection' could not execute propertly"); 263 | console.error(err); 264 | }) 265 | } else { 266 | currentEditor.selection = wrap.sel; 267 | } 268 | SetCursor(setCursorLine == 'Current line' ? wrap.line : wrap.line + 1); 269 | }) 270 | } 271 | 272 | default: 273 | break; 274 | } 275 | 276 | if (getSetting("formatDocument") == true) { 277 | vscode.commands.executeCommand("editor.action.formatDocument"); 278 | } 279 | 280 | }).catch(message => { 281 | console.log('vscode-wrap-console-log CANCEL: ' + message); 282 | }); 283 | 284 | } 285 | 286 | function getSetting(setting: string) { 287 | var spl = setting.split('.'); 288 | 289 | return spl.length == 1 ? vscode.workspace.getConfiguration("wrap-console-log")[setting] : spl.splice(1).reduce((a, b) => { 290 | return a[b] 291 | }, vscode.workspace.getConfiguration("wrap-console-log")[spl[0]]) 292 | } 293 | 294 | interface WrapData { 295 | txt: string, 296 | item: string, 297 | sel: vscode.Selection, 298 | doc: vscode.TextDocument, 299 | ran: vscode.Range, 300 | ind: string, 301 | idx: number, 302 | line: number, 303 | lastLine: boolean 304 | } 305 | 306 | enum FormatAs { 307 | String 308 | } 309 | 310 | enum Wrap { 311 | Inline, 312 | Down, 313 | Up 314 | } 315 | 316 | export function deactivate() { 317 | return undefined; 318 | } -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "es6", 5 | "outDir": "out", 6 | "moduleResolution": "node", 7 | "lib": [ 8 | "es6" 9 | ], 10 | "sourceMap": true 11 | }, 12 | "include": [ 13 | "src/**.ts" 14 | ], 15 | "exclude": [ 16 | "node_modules", 17 | ".vscode-test" 18 | ] 19 | } -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@types/node@^8.10.25": 6 | version "8.10.49" 7 | resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.49.tgz#f331afc5efed0796798e5591d6e0ece636969b7b" 8 | integrity sha512-YX30JVx0PvSmJ3Eqr74fYLGeBxD+C7vIL20ek+GGGLJeUbVYRUW3EzyAXpIRA0K8c8o0UWqR/GwEFYiFoz1T8w== 9 | 10 | agent-base@4, agent-base@^4.1.0: 11 | version "4.3.0" 12 | resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" 13 | integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== 14 | dependencies: 15 | es6-promisify "^5.0.0" 16 | 17 | ajv@^6.5.5: 18 | version "6.10.0" 19 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1" 20 | integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg== 21 | dependencies: 22 | fast-deep-equal "^2.0.1" 23 | fast-json-stable-stringify "^2.0.0" 24 | json-schema-traverse "^0.4.1" 25 | uri-js "^4.2.2" 26 | 27 | asn1@~0.2.3: 28 | version "0.2.4" 29 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" 30 | integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== 31 | dependencies: 32 | safer-buffer "~2.1.0" 33 | 34 | assert-plus@1.0.0, assert-plus@^1.0.0: 35 | version "1.0.0" 36 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 37 | integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= 38 | 39 | asynckit@^0.4.0: 40 | version "0.4.0" 41 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 42 | integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= 43 | 44 | aws-sign2@~0.7.0: 45 | version "0.7.0" 46 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" 47 | integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= 48 | 49 | aws4@^1.8.0: 50 | version "1.8.0" 51 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" 52 | integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== 53 | 54 | balanced-match@^1.0.0: 55 | version "1.0.0" 56 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 57 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 58 | 59 | bcrypt-pbkdf@^1.0.0: 60 | version "1.0.2" 61 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" 62 | integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= 63 | dependencies: 64 | tweetnacl "^0.14.3" 65 | 66 | brace-expansion@^1.1.7: 67 | version "1.1.11" 68 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 69 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 70 | dependencies: 71 | balanced-match "^1.0.0" 72 | concat-map "0.0.1" 73 | 74 | browser-stdout@1.3.0: 75 | version "1.3.0" 76 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" 77 | integrity sha1-81HTKWnTL6XXpVZxVCY9korjvR8= 78 | 79 | buffer-from@^1.0.0: 80 | version "1.1.1" 81 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 82 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 83 | 84 | caseless@~0.12.0: 85 | version "0.12.0" 86 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" 87 | integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= 88 | 89 | combined-stream@^1.0.6, combined-stream@~1.0.6: 90 | version "1.0.8" 91 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 92 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 93 | dependencies: 94 | delayed-stream "~1.0.0" 95 | 96 | commander@2.11.0: 97 | version "2.11.0" 98 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" 99 | integrity sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ== 100 | 101 | concat-map@0.0.1: 102 | version "0.0.1" 103 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 104 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 105 | 106 | core-util-is@1.0.2: 107 | version "1.0.2" 108 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 109 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= 110 | 111 | dashdash@^1.12.0: 112 | version "1.14.1" 113 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" 114 | integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= 115 | dependencies: 116 | assert-plus "^1.0.0" 117 | 118 | debug@3.1.0: 119 | version "3.1.0" 120 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" 121 | integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== 122 | dependencies: 123 | ms "2.0.0" 124 | 125 | debug@^3.1.0: 126 | version "3.2.6" 127 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" 128 | integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== 129 | dependencies: 130 | ms "^2.1.1" 131 | 132 | delayed-stream@~1.0.0: 133 | version "1.0.0" 134 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 135 | integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= 136 | 137 | diff@3.3.1: 138 | version "3.3.1" 139 | resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.1.tgz#aa8567a6eed03c531fc89d3f711cd0e5259dec75" 140 | integrity sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww== 141 | 142 | ecc-jsbn@~0.1.1: 143 | version "0.1.2" 144 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" 145 | integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= 146 | dependencies: 147 | jsbn "~0.1.0" 148 | safer-buffer "^2.1.0" 149 | 150 | es6-promise@^4.0.3: 151 | version "4.2.8" 152 | resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" 153 | integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== 154 | 155 | es6-promisify@^5.0.0: 156 | version "5.0.0" 157 | resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" 158 | integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= 159 | dependencies: 160 | es6-promise "^4.0.3" 161 | 162 | escape-string-regexp@1.0.5: 163 | version "1.0.5" 164 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 165 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 166 | 167 | extend@~3.0.2: 168 | version "3.0.2" 169 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" 170 | integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== 171 | 172 | extsprintf@1.3.0: 173 | version "1.3.0" 174 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" 175 | integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= 176 | 177 | extsprintf@^1.2.0: 178 | version "1.4.0" 179 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" 180 | integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= 181 | 182 | fast-deep-equal@^2.0.1: 183 | version "2.0.1" 184 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" 185 | integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= 186 | 187 | fast-json-stable-stringify@^2.0.0: 188 | version "2.0.0" 189 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" 190 | integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= 191 | 192 | forever-agent@~0.6.1: 193 | version "0.6.1" 194 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 195 | integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= 196 | 197 | form-data@~2.3.2: 198 | version "2.3.3" 199 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" 200 | integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== 201 | dependencies: 202 | asynckit "^0.4.0" 203 | combined-stream "^1.0.6" 204 | mime-types "^2.1.12" 205 | 206 | fs.realpath@^1.0.0: 207 | version "1.0.0" 208 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 209 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 210 | 211 | getpass@^0.1.1: 212 | version "0.1.7" 213 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" 214 | integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= 215 | dependencies: 216 | assert-plus "^1.0.0" 217 | 218 | glob@7.1.2: 219 | version "7.1.2" 220 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" 221 | integrity sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ== 222 | dependencies: 223 | fs.realpath "^1.0.0" 224 | inflight "^1.0.4" 225 | inherits "2" 226 | minimatch "^3.0.4" 227 | once "^1.3.0" 228 | path-is-absolute "^1.0.0" 229 | 230 | glob@^7.1.2: 231 | version "7.1.4" 232 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" 233 | integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== 234 | dependencies: 235 | fs.realpath "^1.0.0" 236 | inflight "^1.0.4" 237 | inherits "2" 238 | minimatch "^3.0.4" 239 | once "^1.3.0" 240 | path-is-absolute "^1.0.0" 241 | 242 | growl@1.10.3: 243 | version "1.10.3" 244 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.3.tgz#1926ba90cf3edfe2adb4927f5880bc22c66c790f" 245 | integrity sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q== 246 | 247 | har-schema@^2.0.0: 248 | version "2.0.0" 249 | resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" 250 | integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= 251 | 252 | har-validator@~5.1.0: 253 | version "5.1.3" 254 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" 255 | integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== 256 | dependencies: 257 | ajv "^6.5.5" 258 | har-schema "^2.0.0" 259 | 260 | has-flag@^2.0.0: 261 | version "2.0.0" 262 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" 263 | integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE= 264 | 265 | he@1.1.1: 266 | version "1.1.1" 267 | resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" 268 | integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0= 269 | 270 | http-proxy-agent@^2.1.0: 271 | version "2.1.0" 272 | resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" 273 | integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== 274 | dependencies: 275 | agent-base "4" 276 | debug "3.1.0" 277 | 278 | http-signature@~1.2.0: 279 | version "1.2.0" 280 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" 281 | integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= 282 | dependencies: 283 | assert-plus "^1.0.0" 284 | jsprim "^1.2.2" 285 | sshpk "^1.7.0" 286 | 287 | https-proxy-agent@^2.2.1: 288 | version "2.2.1" 289 | resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0" 290 | integrity sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ== 291 | dependencies: 292 | agent-base "^4.1.0" 293 | debug "^3.1.0" 294 | 295 | inflight@^1.0.4: 296 | version "1.0.6" 297 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 298 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 299 | dependencies: 300 | once "^1.3.0" 301 | wrappy "1" 302 | 303 | inherits@2: 304 | version "2.0.3" 305 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 306 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= 307 | 308 | is-typedarray@~1.0.0: 309 | version "1.0.0" 310 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 311 | integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= 312 | 313 | isstream@~0.1.2: 314 | version "0.1.2" 315 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 316 | integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= 317 | 318 | jsbn@~0.1.0: 319 | version "0.1.1" 320 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" 321 | integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= 322 | 323 | json-schema-traverse@^0.4.1: 324 | version "0.4.1" 325 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 326 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 327 | 328 | json-schema@0.2.3: 329 | version "0.2.3" 330 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" 331 | integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= 332 | 333 | json-stringify-safe@~5.0.1: 334 | version "5.0.1" 335 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 336 | integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= 337 | 338 | jsprim@^1.2.2: 339 | version "1.4.1" 340 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" 341 | integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= 342 | dependencies: 343 | assert-plus "1.0.0" 344 | extsprintf "1.3.0" 345 | json-schema "0.2.3" 346 | verror "1.10.0" 347 | 348 | mime-db@1.40.0: 349 | version "1.40.0" 350 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" 351 | integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== 352 | 353 | mime-types@^2.1.12, mime-types@~2.1.19: 354 | version "2.1.24" 355 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" 356 | integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ== 357 | dependencies: 358 | mime-db "1.40.0" 359 | 360 | minimatch@^3.0.4: 361 | version "3.0.4" 362 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 363 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 364 | dependencies: 365 | brace-expansion "^1.1.7" 366 | 367 | minimist@0.0.8: 368 | version "0.0.8" 369 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 370 | integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= 371 | 372 | mkdirp@0.5.1: 373 | version "0.5.1" 374 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 375 | integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= 376 | dependencies: 377 | minimist "0.0.8" 378 | 379 | mocha@^4.0.1: 380 | version "4.1.0" 381 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-4.1.0.tgz#7d86cfbcf35cb829e2754c32e17355ec05338794" 382 | integrity sha512-0RVnjg1HJsXY2YFDoTNzcc1NKhYuXKRrBAG2gDygmJJA136Cs2QlRliZG1mA0ap7cuaT30mw16luAeln+4RiNA== 383 | dependencies: 384 | browser-stdout "1.3.0" 385 | commander "2.11.0" 386 | debug "3.1.0" 387 | diff "3.3.1" 388 | escape-string-regexp "1.0.5" 389 | glob "7.1.2" 390 | growl "1.10.3" 391 | he "1.1.1" 392 | mkdirp "0.5.1" 393 | supports-color "4.4.0" 394 | 395 | ms@2.0.0: 396 | version "2.0.0" 397 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 398 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 399 | 400 | ms@^2.1.1: 401 | version "2.1.2" 402 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 403 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 404 | 405 | oauth-sign@~0.9.0: 406 | version "0.9.0" 407 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" 408 | integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== 409 | 410 | once@^1.3.0: 411 | version "1.4.0" 412 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 413 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 414 | dependencies: 415 | wrappy "1" 416 | 417 | path-is-absolute@^1.0.0: 418 | version "1.0.1" 419 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 420 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 421 | 422 | performance-now@^2.1.0: 423 | version "2.1.0" 424 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" 425 | integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= 426 | 427 | psl@^1.1.24: 428 | version "1.1.32" 429 | resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.32.tgz#3f132717cf2f9c169724b2b6caf373cf694198db" 430 | integrity sha512-MHACAkHpihU/REGGPLj4sEfc/XKW2bheigvHO1dUqjaKigMp1C8+WLQYRGgeKFMsw5PMfegZcaN8IDXK/cD0+g== 431 | 432 | punycode@^1.4.1: 433 | version "1.4.1" 434 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" 435 | integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= 436 | 437 | punycode@^2.1.0: 438 | version "2.1.1" 439 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 440 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 441 | 442 | qs@~6.5.2: 443 | version "6.5.2" 444 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" 445 | integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== 446 | 447 | querystringify@^2.1.1: 448 | version "2.1.1" 449 | resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" 450 | integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== 451 | 452 | request@^2.88.0: 453 | version "2.88.0" 454 | resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" 455 | integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== 456 | dependencies: 457 | aws-sign2 "~0.7.0" 458 | aws4 "^1.8.0" 459 | caseless "~0.12.0" 460 | combined-stream "~1.0.6" 461 | extend "~3.0.2" 462 | forever-agent "~0.6.1" 463 | form-data "~2.3.2" 464 | har-validator "~5.1.0" 465 | http-signature "~1.2.0" 466 | is-typedarray "~1.0.0" 467 | isstream "~0.1.2" 468 | json-stringify-safe "~5.0.1" 469 | mime-types "~2.1.19" 470 | oauth-sign "~0.9.0" 471 | performance-now "^2.1.0" 472 | qs "~6.5.2" 473 | safe-buffer "^5.1.2" 474 | tough-cookie "~2.4.3" 475 | tunnel-agent "^0.6.0" 476 | uuid "^3.3.2" 477 | 478 | requires-port@^1.0.0: 479 | version "1.0.0" 480 | resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" 481 | integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= 482 | 483 | safe-buffer@^5.0.1, safe-buffer@^5.1.2: 484 | version "5.1.2" 485 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 486 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 487 | 488 | safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: 489 | version "2.1.2" 490 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 491 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 492 | 493 | semver@^5.4.1: 494 | version "5.7.0" 495 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" 496 | integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== 497 | 498 | source-map-support@^0.5.0: 499 | version "0.5.12" 500 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599" 501 | integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ== 502 | dependencies: 503 | buffer-from "^1.0.0" 504 | source-map "^0.6.0" 505 | 506 | source-map@^0.6.0: 507 | version "0.6.1" 508 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 509 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 510 | 511 | sshpk@^1.7.0: 512 | version "1.16.1" 513 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" 514 | integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== 515 | dependencies: 516 | asn1 "~0.2.3" 517 | assert-plus "^1.0.0" 518 | bcrypt-pbkdf "^1.0.0" 519 | dashdash "^1.12.0" 520 | ecc-jsbn "~0.1.1" 521 | getpass "^0.1.1" 522 | jsbn "~0.1.0" 523 | safer-buffer "^2.0.2" 524 | tweetnacl "~0.14.0" 525 | 526 | supports-color@4.4.0: 527 | version "4.4.0" 528 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e" 529 | integrity sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ== 530 | dependencies: 531 | has-flag "^2.0.0" 532 | 533 | tough-cookie@~2.4.3: 534 | version "2.4.3" 535 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" 536 | integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== 537 | dependencies: 538 | psl "^1.1.24" 539 | punycode "^1.4.1" 540 | 541 | tunnel-agent@^0.6.0: 542 | version "0.6.0" 543 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 544 | integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= 545 | dependencies: 546 | safe-buffer "^5.0.1" 547 | 548 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 549 | version "0.14.5" 550 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" 551 | integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= 552 | 553 | typescript@^3.1.4: 554 | version "3.5.2" 555 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.2.tgz#a09e1dc69bc9551cadf17dba10ee42cf55e5d56c" 556 | integrity sha512-7KxJovlYhTX5RaRbUdkAXN1KUZ8PwWlTzQdHV6xNqvuFOs7+WBo10TQUqT19Q/Jz2hk5v9TQDIhyLhhJY4p5AA== 557 | 558 | uri-js@^4.2.2: 559 | version "4.2.2" 560 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" 561 | integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== 562 | dependencies: 563 | punycode "^2.1.0" 564 | 565 | url-parse@^1.4.4: 566 | version "1.4.7" 567 | resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" 568 | integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg== 569 | dependencies: 570 | querystringify "^2.1.1" 571 | requires-port "^1.0.0" 572 | 573 | uuid@^3.3.2: 574 | version "3.3.2" 575 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" 576 | integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== 577 | 578 | verror@1.10.0: 579 | version "1.10.0" 580 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" 581 | integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= 582 | dependencies: 583 | assert-plus "^1.0.0" 584 | core-util-is "1.0.2" 585 | extsprintf "^1.2.0" 586 | 587 | vscode-test@^0.4.1: 588 | version "0.4.3" 589 | resolved "https://registry.yarnpkg.com/vscode-test/-/vscode-test-0.4.3.tgz#461ebf25fc4bc93d77d982aed556658a2e2b90b8" 590 | integrity sha512-EkMGqBSefZH2MgW65nY05rdRSko15uvzq4VAPM5jVmwYuFQKE7eikKXNJDRxL+OITXHB6pI+a3XqqD32Y3KC5w== 591 | dependencies: 592 | http-proxy-agent "^2.1.0" 593 | https-proxy-agent "^2.2.1" 594 | 595 | vscode@^1.1.34: 596 | version "1.1.34" 597 | resolved "https://registry.yarnpkg.com/vscode/-/vscode-1.1.34.tgz#3aba5d2f3a9d43f4e798f6933339fe5fcfb782c6" 598 | integrity sha512-GuT3tCT2N5Qp26VG4C+iGmWMgg/MuqtY5G5TSOT3U/X6pgjM9LFulJEeqpyf6gdzpI4VyU3ZN/lWPo54UFPuQg== 599 | dependencies: 600 | glob "^7.1.2" 601 | mocha "^4.0.1" 602 | request "^2.88.0" 603 | semver "^5.4.1" 604 | source-map-support "^0.5.0" 605 | url-parse "^1.4.4" 606 | vscode-test "^0.4.1" 607 | 608 | wrappy@1: 609 | version "1.0.2" 610 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 611 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 612 | --------------------------------------------------------------------------------