├── .github └── FUNDING.yml ├── .gitignore ├── LICENSE ├── README.md ├── _config.yml ├── appsscript.json ├── build.sh ├── client ├── logo.svg.html ├── sidebar.css.html ├── sidebar.html └── sidebar.js ├── package-lock.json ├── package.json ├── privacy-policy.md ├── server ├── colors.js ├── constants.js ├── document.js ├── main.js └── util.js └── terms-of-service.md /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | custom: "https://www.paypal.com/paypalme/alexwforsythe" 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .clasp.json 2 | .nvmrc 3 | .idea/ 4 | node_modules/ 5 | dist/ 6 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Alex Forsythe 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![img](https://repository-images.githubusercontent.com/68638466/d3069380-02d3-11ea-8d09-bb881c87c125) 2 | 3 | [![clasp](https://img.shields.io/badge/built%20with-clasp-4285f4.svg)](https://github.com/google/clasp) [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://paypal.me/alexwforsythe) 4 | 5 | 6 | Google Workspace Marketplace badge 7 | 8 | 9 | # Usage 10 | 11 | ## Starting the add-on 12 | 13 | ![starting](https://user-images.githubusercontent.com/1639061/68648430-3b709300-04d5-11ea-912f-2e767f37db56.gif) 14 | 15 | ## Formatting inline code 16 | 17 | ![inline-formatting](https://user-images.githubusercontent.com/1639061/68643446-48d25100-04c6-11ea-96e8-090333e95559.gif) 18 | 19 | ## Formatting code blocks 20 | 21 | ![blocks-formatting](https://user-images.githubusercontent.com/1639061/68649759-51338780-04d8-11ea-9e39-5793dec16a4e.gif) 22 | 23 | ## Reformatting code blocks 24 | 25 | ![reformatting-blocks](https://user-images.githubusercontent.com/1639061/68648457-4297a100-04d5-11ea-9787-6e9ecbedfdc1.gif) 26 | 27 | ## Previewing themes 28 | 29 | Examples of the different color themes applied to various languages can be 30 | found on the [highlight.js demo page](https://highlightjs.org/static/demo/). 31 | 32 | ## Unformatting code 33 | 34 | To clear formatting in Docs, highlight the text and select 35 | `Format > Clear Formatting` from the toolbar. The keyboard shortcut is 36 | Cmd+/ on OS X and Ctrl+/ on 37 | Windows: 38 | https://support.google.com/docs/answer/179738 39 | 40 | This will not remove the table that the text lives in if it's a "code block". 41 | To do that, you'll have to copy the text and paste it outside the table, then 42 | right-click the table and select **Delete table**. 43 | 44 | # Limitations 45 | 46 | ## Updates to syntax highlighting 47 | 48 | Code Blocks is built with [highlight.js](https://highlightjs.org/) and can only 49 | provide syntax highlighting for languages that are supported by that library. 50 | 51 | If you'd like to see Code Blocks support a language that is not yet implemented 52 | by highlight.js, please refer to [their page on requesting new languages](http://highlightjs.readthedocs.io/en/latest/language-requests.html). 53 | 54 | If you'd like to see Code Blocks update or fix support for an existing language: 55 | 1. Check if the [latest version of highlight.js](https://github.com/highlightjs/highlight.js/releases) 56 | already includes the update. If it does, submit a PR to this repository that 57 | bumps the highlight.js version in [`package.json`](https://github.com/alexwforsythe/code-blocks/blob/master/package.json). 58 | 2. If highlight.js does not yet include the update, please submit an issue on 59 | [their issue tracker](https://github.com/highlightjs/highlight.js/issues). 60 | 61 | ## Real-time syntax highlighting 62 | 63 | Codes Blocks uses Google's 64 | [Apps Script](https://developers.google.com/apps-script/), a server-side 65 | JavaScript platform, to interact with Docs and format code. Each time the add-on 66 | formats a snippet of code, a request is made to the Apps Script backend to 67 | modify the current Doc. There are a few limitations of this platform that 68 | prevent Code Blocks from formatting code as you type: 69 | * The [`onEdit`](https://developers.google.com/apps-script/guides/triggers#onedite) 70 | event that fires when a user modifies content is only available in Sheets 71 | * [Time-driven triggers](https://developers.google.com/apps-script/guides/triggers/installable#time-driven_triggers) 72 | can only be used once per hour at most 73 | * Each request to modify the current Doc can take multiple seconds, so code 74 | formatting cannot be performed in real-time 75 | * The number of requests needed to update a Doc in near real-time may exceed 76 | the service API quotas 77 | 78 | ## Keyboard Shortcuts 79 | 80 | Keyboard shortcuts can only be handled by Code Blocks if the add-on sidebar is 81 | focused, which would require users to click the sidebar anyway. 82 | 83 | Keyboard events in the active document cannot currently be handled by Docs 84 | add-ons: 85 | https://issuetracker.google.com/issues/79461369 86 | 87 | # Contributing 88 | 89 | ## Setup 90 | 91 | ``` 92 | $ npm install 93 | ``` 94 | 95 | ## Building 96 | 97 | ``` 98 | $ npm run build 99 | ``` 100 | 101 | ## Pushing Changes 102 | 103 | ℹ️ The following commands only work for the project maintainer 104 | because they require Google Drive authorization. 105 | 106 | | Command | Description | 107 | | --- | --- | 108 | | `npm run push:gas` | just GAS files | 109 | | `npm run push:js` | just `sidebar.js` | 110 | | `npm run push:static` | just HTML & CSS | 111 | | `npm run push` | everything | 112 | 113 | # Google Apps Script Resources 114 | 115 | * https://developers.google.com/apps-script/guides/clasp 116 | * https://github.com/google/clasp/blob/master/docs/typescript.md 117 | * https://developers.google.com/apps-script/guides/support/best-practices 118 | * https://gsuite-developers.googleblog.com/2015/12/advanced-development-process-with-apps.html 119 | * http://googleappsscript.blogspot.com/2010/06/optimizing-spreadsheet-operations.html 120 | 121 | --- 122 | 123 | [Homepage](https://www.alexwforsythe.com/code-blocks/) | [Google Workspace Marketplace](https://workspace.google.com/marketplace/app/code_blocks/100740430168) | [Privacy Policy](https://www.alexwforsythe.com/code-blocks/privacy-policy) | [Terms of Service](https://www.alexwforsythe.com/code-blocks/terms-of-service) 124 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-slate -------------------------------------------------------------------------------- /appsscript.json: -------------------------------------------------------------------------------- 1 | { 2 | "timeZone": "America/Los_Angeles", 3 | "oauthScopes": [ 4 | "https://www.googleapis.com/auth/documents.currentonly", 5 | "https://www.googleapis.com/auth/script.container.ui" 6 | ], 7 | "dependencies": { 8 | }, 9 | "exceptionLogging": "STACKDRIVER" 10 | } 11 | -------------------------------------------------------------------------------- /build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -e 4 | 5 | dist_dir="dist" 6 | mkdir -p ${dist_dir} 7 | 8 | gas () { 9 | cp appsscript.json ${dist_dir} 10 | cp server/*.js ${dist_dir} 11 | } 12 | 13 | js () { 14 | # wrap bundled js in script tags and rename as html 15 | input_file="client/sidebar.js" 16 | output_file="${dist_dir}/bundle.min.js.html" 17 | echo "" >> ${output_file} 20 | } 21 | 22 | html () { 23 | cp client/*.html ${dist_dir} 24 | } 25 | 26 | css () { 27 | output_file="${dist_dir}/styles.html" 28 | 29 | optimizations="optimizeBackground:off;" 30 | optimizations+="replaceMultipleZeros:off;" 31 | optimizations+="specialComments:off" 32 | 33 | # wrap all theme css in style tags and bundle into html 34 | echo "" > ${output_file} 35 | for filename in node_modules/highlight.js/styles/*.css; do 36 | theme_name=$(basename "${filename}" .css) 37 | if [[ ${theme_name} != 'darkula' ]]; then 38 | theme="" 41 | echo ${theme} >> ${output_file} 42 | fi 43 | done 44 | echo "" >> ${output_file} 45 | } 46 | 47 | case "$1" in 48 | "gas") gas;; 49 | "js") js;; 50 | "html") html;; 51 | "css") css;; 52 | "static") html && css;; 53 | *) 54 | echo "invalid command: $1" 55 | exit 1 56 | ;; 57 | esac 58 | -------------------------------------------------------------------------------- /client/logo.svg.html: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /client/sidebar.css.html: -------------------------------------------------------------------------------- 1 | 44 | -------------------------------------------------------------------------------- /client/sidebar.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 40 | 41 | 48 | 49 | 50 | 51 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /client/sidebar.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var $ = require('jquery'); 4 | var hljs = require('highlight.js'); 5 | var juice = require('juice/client'); 6 | 7 | const defaultBgc = '#f0f0f0'; 8 | const languageAuto = 'Auto'; 9 | 10 | const ids = { 11 | language: '#language', 12 | theme: '#theme', 13 | themes: '#themes', 14 | noBackground: '#no-background', 15 | preview: '#preview', 16 | formatButtons: '#format-buttons', 17 | format: '#format-selection', 18 | showPreview: '#show-preview', 19 | error: '#error' 20 | }; 21 | 22 | /** 23 | * Define languages that are not included in highlight.js by default 24 | */ 25 | function defineThirdPartyGrammars() { 26 | const graphql = require("highlightjs-graphql") 27 | graphql(hljs) 28 | } 29 | 30 | defineOtherLanguages(); 31 | 32 | /** 33 | * On document load, try to load languages and themes, try to load the user's 34 | * preferences if previously set, and assign click handlers to each button. 35 | */ 36 | $(function () { 37 | const languages = hljs.listLanguages(); 38 | 39 | // add html explicitly for users who don't realize that xml will work; 40 | // html is an alias for xml in highlight.js 41 | languages.push('html'); 42 | languages.sort(); 43 | 44 | loadLanguages(languages); 45 | 46 | google.script.run 47 | .withFailureHandler(showErrorThemes) 48 | .withSuccessHandler(function onSuccess(result) { 49 | loadThemes(result.themes); 50 | loadUserPrefs(languages, result.themes, result.prefs); 51 | 52 | $(ids.format).click(format); 53 | $(ids.showPreview).click(preview); 54 | 55 | enableUiElements(); 56 | }) 57 | .getThemesAndUserPrefs(); 58 | }); 59 | 60 | /** 61 | * Runs a server-side function to format the user-selected text and update 62 | * the sidebar UI with the resulting block. 63 | */ 64 | function preview() { 65 | // noinspection JSUnusedGlobalSymbols 66 | this.disabled = true; 67 | $(ids.error).remove(); 68 | 69 | const language = $(ids.language + ' option:selected').text(); 70 | const theme = $(ids.theme + ' option:selected').text(); 71 | const noBackground = $(ids.noBackground).is(':checked'); 72 | 73 | google.script.run 74 | .withFailureHandler(showErrorButtons) 75 | .withSuccessHandler(function renderPreview(result, element) { 76 | const block = createHighlightedBlock( 77 | result.selection, 78 | result.css, 79 | language, 80 | noBackground 81 | ); 82 | 83 | // render preview 84 | $(ids.preview).replaceWith(block); 85 | 86 | element.disabled = false; 87 | }) 88 | .withUserObject(this) 89 | .getSelectionAndThemeCssForPreview({ 90 | language: language, 91 | theme: theme, 92 | noBackground: noBackground 93 | }); 94 | } 95 | 96 | /** 97 | * Runs a server-side function to format the user-selected text and replaces 98 | * that text in the active document with the resulting block. 99 | */ 100 | function format() { 101 | // noinspection JSUnusedGlobalSymbols 102 | this.disabled = true; 103 | $(ids.error).remove(); 104 | 105 | const language = $(ids.language + ' option:selected').text(); 106 | const theme = $(ids.theme + ' option:selected').text(); 107 | const noBackground = $(ids.noBackground).is(':checked'); 108 | 109 | const html = $(ids.preview).prop('outerHTML'); 110 | google.script.run 111 | .withFailureHandler(showErrorButtons) 112 | .withSuccessHandler(function onSuccess(result, element) { 113 | if (!result) { 114 | // code has already been inserted from preview 115 | return focusEditor(result, element); 116 | } 117 | 118 | const block = createHighlightedBlock( 119 | result.selection, result.css, language, noBackground 120 | ); 121 | const html = block.prop('outerHTML'); 122 | 123 | google.script.run 124 | .withFailureHandler(showErrorButtons) 125 | .withSuccessHandler(focusEditor) 126 | .withUserObject(element) 127 | .insertCode(html, noBackground); 128 | }) 129 | .withUserObject(this) 130 | .insertCodeOrGetSelectionAndThemeCss(html, { 131 | language: language, 132 | theme: theme, 133 | noBackground: noBackground 134 | }); 135 | } 136 | 137 | /* 138 | * Utilities 139 | */ 140 | 141 | /** 142 | * Loads the language input options. 143 | */ 144 | function loadLanguages(languages) { 145 | const languageSelect = $(ids.language); 146 | var languageOptions = languages.map(toOption); 147 | 148 | languageSelect.append(languageOptions); 149 | } 150 | 151 | /** 152 | * Loads the theme input options. 153 | */ 154 | function loadThemes(themes) { 155 | const themeSelect = $(ids.theme); 156 | 157 | themeSelect.append(themes.map(toOption)); 158 | } 159 | 160 | /** 161 | * Returns the given value in the form of an HTML option element. 162 | * 163 | * @param {string} value 164 | * @returns {string} option element 165 | */ 166 | function toOption(value) { 167 | return ''; 168 | } 169 | 170 | /** 171 | * Loads the inputs elements with user preferences from the server. 172 | * 173 | * @param {Object} prefs the saved preferences 174 | * @param {Array.} themes the list of themes 175 | */ 176 | function loadUserPrefs(languages, themes, prefs) { 177 | if (prefs.language) { 178 | const language = $(ids.language); 179 | const selectionIsValid = languages.some(function matchesPref(l) { 180 | return l === prefs.language; 181 | }); 182 | if (selectionIsValid) { 183 | language.val(prefs.language) 184 | } 185 | } 186 | 187 | if (prefs.theme) { 188 | const theme = $(ids.theme); 189 | const selectionIsValid = themes.some(function matchesPref(t) { 190 | return t === prefs.theme; 191 | }); 192 | if (selectionIsValid) { 193 | theme.val(prefs.theme); 194 | } 195 | } 196 | 197 | if (prefs.noBackground && prefs.noBackground.toString() === 'true') { 198 | $(ids.noBackground).prop('checked', true); 199 | } 200 | } 201 | 202 | /** 203 | * @param {string} text the text to highlight 204 | * @param {string} css the theme style as CSS 205 | * @param {string} language the language to use, defaults to 'auto' 206 | * @param {boolean} noBackground whether to use the default background color 207 | * @returns {string} the highlighted block as HTML with inline CSS 208 | */ 209 | function createHighlightedBlock(text, css, language, noBackground) { 210 | text = replaceSpecialChars(text); 211 | 212 | var block = $(ids.preview).clone(); 213 | block.removeClass(); 214 | block.removeAttr('style'); 215 | block.text(text); 216 | if (language !== languageAuto) { 217 | block.addClass(language); 218 | } 219 | 220 | const node = block[0]; 221 | hljs.highlightBlock(node); 222 | 223 | var highlighted = block.prop('outerHTML'); 224 | if (css) { 225 | const params = { 226 | applyHeightAttributes: false, 227 | applyWidthAttributes: false, 228 | inlinePseudoElements: false, 229 | preserveFontFaces: false, 230 | preserveMediaQueries: false 231 | }; 232 | highlighted = juice.inlineContent(highlighted, css, params); 233 | } 234 | 235 | block = $($.parseHTML(highlighted)); 236 | if (noBackground) { 237 | block.css('background', defaultBgc); 238 | } 239 | 240 | return block; 241 | } 242 | 243 | function enableUiElements() { 244 | [ 245 | ids.language, 246 | ids.theme, 247 | ids.format, 248 | ids.showPreview 249 | ].forEach(function enable(id) { 250 | $(id).prop('disabled', false); 251 | }); 252 | } 253 | 254 | //noinspection JSUnusedLocalSymbols 255 | function focusEditor(result, element) { 256 | google.script.host.editor.focus(); 257 | element.disabled = false; 258 | } 259 | 260 | //noinspection JSUnusedLocalSymbols 261 | function showErrorThemes(msg, element) { 262 | showError(msg, $(ids.themes)); 263 | 264 | // enable other forms even if getting themes fails 265 | enableUiElements(); 266 | } 267 | 268 | function showErrorButtons(msg, element) { 269 | showError(msg, $(ids.formatButtons)); 270 | element.disabled = false; 271 | } 272 | 273 | /** 274 | * Inserts a div that contains an error message after a given element. 275 | * 276 | * @param {string} msg the error message 277 | * @param {string} elementId the element to display the error under 278 | */ 279 | function showError(msg, elementId) { 280 | const div = $('
' + msg + '
'); 281 | $(elementId).after(div); 282 | } 283 | 284 | /** 285 | * 286 | * @param {string} text 287 | * @returns {string} the text with special characters replaced 288 | */ 289 | function replaceSpecialChars(text) { 290 | var re = new RegExp(Object.keys(replacements).join('|'), 'g'); 291 | return text.replace(re, function getReplacement(match) { 292 | return replacements[match]; 293 | }); 294 | } 295 | 296 | const replacements = { 297 | '\u2018': '\'', 298 | '\u2019': '\'', 299 | '\u201A': '\'', 300 | '\uFFFD': '\'', 301 | '\u201c': '"', 302 | '\u201d': '"', 303 | '\u201e': '"', 304 | '\u02C6': '^', 305 | '\u2039': '<', 306 | '\u203A': '>', 307 | '\u2013': '-', 308 | '\u2014': '--', 309 | '\u2026': '...', 310 | '\u00A9': '(c)', 311 | '\u00AE': '(r)', 312 | '\u2122': 'TM', 313 | '\u00BC': '1/4', 314 | '\u00BD': '1/2', 315 | '\u00BE': '3/4', 316 | '\u02DC': ' ', 317 | '\u00A0': ' ' 318 | }; 319 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "code-blocks", 3 | "version": "1.4.2", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@google/clasp": { 8 | "version": "2.3.0", 9 | "resolved": "https://registry.npmjs.org/@google/clasp/-/clasp-2.3.0.tgz", 10 | "integrity": "sha512-P/l7ciNoHdfGsYGDBtkbpuLjH05vn6sIK/K7ehGWF8uK1GiHVMEb4tXIFNbFsTEzQvCg3QILZhJAnQEGqUAefQ==", 11 | "dev": true, 12 | "requires": { 13 | "chalk": "^2.4.2", 14 | "cli-spinner": "^0.2.10", 15 | "commander": "^3.0.1", 16 | "dotf": "^1.2.0", 17 | "ellipsize": "^0.1.0", 18 | "find-up": "^4.1.0", 19 | "fs-extra": "^8.1.0", 20 | "fuzzy": "^0.1.3", 21 | "gaxios": "^2.0.1", 22 | "google-auth-library": "^5.2.1", 23 | "googleapis": "^42.0.0", 24 | "inquirer": "^7.0.0", 25 | "inquirer-autocomplete-prompt": "1.0.1", 26 | "is-online": "^8.2.0", 27 | "mkdirp": "^0.5.1", 28 | "multimatch": "^4.0.0", 29 | "normalize-newline": "3.0.0", 30 | "open": "^6.4.0", 31 | "pluralize": "^8.0.0", 32 | "recursive-readdir": "^2.2.2", 33 | "split-lines": "^2.0.0", 34 | "strip-bom": "^4.0.0", 35 | "ts2gas": "^3.4.4", 36 | "typescript": "^3.6.2", 37 | "watch": "^1.0.2" 38 | } 39 | }, 40 | "@sindresorhus/is": { 41 | "version": "0.14.0", 42 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", 43 | "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", 44 | "dev": true 45 | }, 46 | "@szmarczak/http-timer": { 47 | "version": "1.1.2", 48 | "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", 49 | "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", 50 | "dev": true, 51 | "requires": { 52 | "defer-to-connect": "^1.0.1" 53 | } 54 | }, 55 | "@types/google-apps-script": { 56 | "version": "1.0.2", 57 | "resolved": "https://registry.npmjs.org/@types/google-apps-script/-/google-apps-script-1.0.2.tgz", 58 | "integrity": "sha512-WUOoc4Z1ZsLXrBgvAuMw2QHvVx9IX93k7FlNQci5+dHsb9DQLLlHhnz6Xr44vRLKl3sXFw7dVztwwolhhCV5kQ==", 59 | "dev": true 60 | }, 61 | "@types/minimatch": { 62 | "version": "3.0.3", 63 | "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", 64 | "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", 65 | "dev": true 66 | }, 67 | "JSONStream": { 68 | "version": "1.3.5", 69 | "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", 70 | "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", 71 | "dev": true, 72 | "requires": { 73 | "jsonparse": "^1.2.0", 74 | "through": ">=2.2.7 <3" 75 | } 76 | }, 77 | "abort-controller": { 78 | "version": "3.0.0", 79 | "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", 80 | "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", 81 | "dev": true, 82 | "requires": { 83 | "event-target-shim": "^5.0.0" 84 | } 85 | }, 86 | "acorn": { 87 | "version": "7.1.0", 88 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", 89 | "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==", 90 | "dev": true 91 | }, 92 | "acorn-node": { 93 | "version": "1.8.2", 94 | "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", 95 | "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", 96 | "dev": true, 97 | "requires": { 98 | "acorn": "^7.0.0", 99 | "acorn-walk": "^7.0.0", 100 | "xtend": "^4.0.2" 101 | } 102 | }, 103 | "acorn-walk": { 104 | "version": "7.0.0", 105 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.0.0.tgz", 106 | "integrity": "sha512-7Bv1We7ZGuU79zZbb6rRqcpxo3OY+zrdtloZWoyD8fmGX+FeXRjE+iuGkZjSXLVovLzrsvMGMy0EkwA0E0umxg==", 107 | "dev": true 108 | }, 109 | "agent-base": { 110 | "version": "4.3.0", 111 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", 112 | "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", 113 | "dev": true, 114 | "requires": { 115 | "es6-promisify": "^5.0.0" 116 | } 117 | }, 118 | "aggregate-error": { 119 | "version": "3.0.1", 120 | "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz", 121 | "integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==", 122 | "dev": true, 123 | "requires": { 124 | "clean-stack": "^2.0.0", 125 | "indent-string": "^4.0.0" 126 | } 127 | }, 128 | "ajv": { 129 | "version": "6.10.2", 130 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", 131 | "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", 132 | "dev": true, 133 | "requires": { 134 | "fast-deep-equal": "^2.0.1", 135 | "fast-json-stable-stringify": "^2.0.0", 136 | "json-schema-traverse": "^0.4.1", 137 | "uri-js": "^4.2.2" 138 | } 139 | }, 140 | "ansi-escapes": { 141 | "version": "4.2.1", 142 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.2.1.tgz", 143 | "integrity": "sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q==", 144 | "dev": true, 145 | "requires": { 146 | "type-fest": "^0.5.2" 147 | } 148 | }, 149 | "ansi-regex": { 150 | "version": "5.0.0", 151 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", 152 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", 153 | "dev": true 154 | }, 155 | "ansi-styles": { 156 | "version": "3.2.1", 157 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 158 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 159 | "dev": true, 160 | "requires": { 161 | "color-convert": "^1.9.0" 162 | } 163 | }, 164 | "array-differ": { 165 | "version": "3.0.0", 166 | "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", 167 | "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", 168 | "dev": true 169 | }, 170 | "array-union": { 171 | "version": "2.1.0", 172 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", 173 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", 174 | "dev": true 175 | }, 176 | "arrify": { 177 | "version": "2.0.1", 178 | "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", 179 | "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", 180 | "dev": true 181 | }, 182 | "asn1": { 183 | "version": "0.2.4", 184 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", 185 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", 186 | "dev": true, 187 | "requires": { 188 | "safer-buffer": "~2.1.0" 189 | } 190 | }, 191 | "asn1.js": { 192 | "version": "4.10.1", 193 | "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", 194 | "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", 195 | "dev": true, 196 | "requires": { 197 | "bn.js": "^4.0.0", 198 | "inherits": "^2.0.1", 199 | "minimalistic-assert": "^1.0.0" 200 | } 201 | }, 202 | "assert": { 203 | "version": "1.5.0", 204 | "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", 205 | "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", 206 | "dev": true, 207 | "requires": { 208 | "object-assign": "^4.1.1", 209 | "util": "0.10.3" 210 | }, 211 | "dependencies": { 212 | "inherits": { 213 | "version": "2.0.1", 214 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", 215 | "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", 216 | "dev": true 217 | }, 218 | "util": { 219 | "version": "0.10.3", 220 | "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", 221 | "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", 222 | "dev": true, 223 | "requires": { 224 | "inherits": "2.0.1" 225 | } 226 | } 227 | } 228 | }, 229 | "assert-plus": { 230 | "version": "1.0.0", 231 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 232 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 233 | "dev": true 234 | }, 235 | "async": { 236 | "version": "3.1.0", 237 | "resolved": "https://registry.npmjs.org/async/-/async-3.1.0.tgz", 238 | "integrity": "sha512-4vx/aaY6j/j3Lw3fbCHNWP0pPaTCew3F6F3hYyl/tHs/ndmV1q7NW9T5yuJ2XAGwdQrP+6Wu20x06U4APo/iQQ==", 239 | "dev": true 240 | }, 241 | "asynckit": { 242 | "version": "0.4.0", 243 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 244 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", 245 | "dev": true 246 | }, 247 | "aws-sign2": { 248 | "version": "0.7.0", 249 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 250 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", 251 | "dev": true 252 | }, 253 | "aws4": { 254 | "version": "1.8.0", 255 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", 256 | "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", 257 | "dev": true 258 | }, 259 | "balanced-match": { 260 | "version": "1.0.0", 261 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 262 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 263 | "dev": true 264 | }, 265 | "base64-js": { 266 | "version": "1.3.1", 267 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", 268 | "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", 269 | "dev": true 270 | }, 271 | "bcrypt-pbkdf": { 272 | "version": "1.0.2", 273 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", 274 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", 275 | "dev": true, 276 | "requires": { 277 | "tweetnacl": "^0.14.3" 278 | } 279 | }, 280 | "bignumber.js": { 281 | "version": "7.2.1", 282 | "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-7.2.1.tgz", 283 | "integrity": "sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==", 284 | "dev": true 285 | }, 286 | "bn.js": { 287 | "version": "4.11.8", 288 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", 289 | "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", 290 | "dev": true 291 | }, 292 | "boolbase": { 293 | "version": "1.0.0", 294 | "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", 295 | "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", 296 | "dev": true 297 | }, 298 | "brace-expansion": { 299 | "version": "1.1.11", 300 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 301 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 302 | "dev": true, 303 | "requires": { 304 | "balanced-match": "^1.0.0", 305 | "concat-map": "0.0.1" 306 | } 307 | }, 308 | "brorand": { 309 | "version": "1.1.0", 310 | "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", 311 | "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", 312 | "dev": true 313 | }, 314 | "browser-pack": { 315 | "version": "6.1.0", 316 | "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", 317 | "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", 318 | "dev": true, 319 | "requires": { 320 | "JSONStream": "^1.0.3", 321 | "combine-source-map": "~0.8.0", 322 | "defined": "^1.0.0", 323 | "safe-buffer": "^5.1.1", 324 | "through2": "^2.0.0", 325 | "umd": "^3.0.0" 326 | } 327 | }, 328 | "browser-resolve": { 329 | "version": "1.11.3", 330 | "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", 331 | "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", 332 | "dev": true, 333 | "requires": { 334 | "resolve": "1.1.7" 335 | }, 336 | "dependencies": { 337 | "resolve": { 338 | "version": "1.1.7", 339 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", 340 | "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", 341 | "dev": true 342 | } 343 | } 344 | }, 345 | "browserify": { 346 | "version": "16.5.0", 347 | "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.5.0.tgz", 348 | "integrity": "sha512-6bfI3cl76YLAnCZ75AGu/XPOsqUhRyc0F/olGIJeCxtfxF2HvPKEcmjU9M8oAPxl4uBY1U7Nry33Q6koV3f2iw==", 349 | "dev": true, 350 | "requires": { 351 | "JSONStream": "^1.0.3", 352 | "assert": "^1.4.0", 353 | "browser-pack": "^6.0.1", 354 | "browser-resolve": "^1.11.0", 355 | "browserify-zlib": "~0.2.0", 356 | "buffer": "^5.0.2", 357 | "cached-path-relative": "^1.0.0", 358 | "concat-stream": "^1.6.0", 359 | "console-browserify": "^1.1.0", 360 | "constants-browserify": "~1.0.0", 361 | "crypto-browserify": "^3.0.0", 362 | "defined": "^1.0.0", 363 | "deps-sort": "^2.0.0", 364 | "domain-browser": "^1.2.0", 365 | "duplexer2": "~0.1.2", 366 | "events": "^2.0.0", 367 | "glob": "^7.1.0", 368 | "has": "^1.0.0", 369 | "htmlescape": "^1.1.0", 370 | "https-browserify": "^1.0.0", 371 | "inherits": "~2.0.1", 372 | "insert-module-globals": "^7.0.0", 373 | "labeled-stream-splicer": "^2.0.0", 374 | "mkdirp": "^0.5.0", 375 | "module-deps": "^6.0.0", 376 | "os-browserify": "~0.3.0", 377 | "parents": "^1.0.1", 378 | "path-browserify": "~0.0.0", 379 | "process": "~0.11.0", 380 | "punycode": "^1.3.2", 381 | "querystring-es3": "~0.2.0", 382 | "read-only-stream": "^2.0.0", 383 | "readable-stream": "^2.0.2", 384 | "resolve": "^1.1.4", 385 | "shasum": "^1.0.0", 386 | "shell-quote": "^1.6.1", 387 | "stream-browserify": "^2.0.0", 388 | "stream-http": "^3.0.0", 389 | "string_decoder": "^1.1.1", 390 | "subarg": "^1.0.0", 391 | "syntax-error": "^1.1.1", 392 | "through2": "^2.0.0", 393 | "timers-browserify": "^1.0.1", 394 | "tty-browserify": "0.0.1", 395 | "url": "~0.11.0", 396 | "util": "~0.10.1", 397 | "vm-browserify": "^1.0.0", 398 | "xtend": "^4.0.0" 399 | } 400 | }, 401 | "browserify-aes": { 402 | "version": "1.2.0", 403 | "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", 404 | "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", 405 | "dev": true, 406 | "requires": { 407 | "buffer-xor": "^1.0.3", 408 | "cipher-base": "^1.0.0", 409 | "create-hash": "^1.1.0", 410 | "evp_bytestokey": "^1.0.3", 411 | "inherits": "^2.0.1", 412 | "safe-buffer": "^5.0.1" 413 | } 414 | }, 415 | "browserify-cipher": { 416 | "version": "1.0.1", 417 | "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", 418 | "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", 419 | "dev": true, 420 | "requires": { 421 | "browserify-aes": "^1.0.4", 422 | "browserify-des": "^1.0.0", 423 | "evp_bytestokey": "^1.0.0" 424 | } 425 | }, 426 | "browserify-des": { 427 | "version": "1.0.2", 428 | "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", 429 | "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", 430 | "dev": true, 431 | "requires": { 432 | "cipher-base": "^1.0.1", 433 | "des.js": "^1.0.0", 434 | "inherits": "^2.0.1", 435 | "safe-buffer": "^5.1.2" 436 | } 437 | }, 438 | "browserify-rsa": { 439 | "version": "4.0.1", 440 | "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", 441 | "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", 442 | "dev": true, 443 | "requires": { 444 | "bn.js": "^4.1.0", 445 | "randombytes": "^2.0.1" 446 | } 447 | }, 448 | "browserify-sign": { 449 | "version": "4.0.4", 450 | "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", 451 | "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", 452 | "dev": true, 453 | "requires": { 454 | "bn.js": "^4.1.1", 455 | "browserify-rsa": "^4.0.0", 456 | "create-hash": "^1.1.0", 457 | "create-hmac": "^1.1.2", 458 | "elliptic": "^6.0.0", 459 | "inherits": "^2.0.1", 460 | "parse-asn1": "^5.0.0" 461 | } 462 | }, 463 | "browserify-zlib": { 464 | "version": "0.2.0", 465 | "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", 466 | "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", 467 | "dev": true, 468 | "requires": { 469 | "pako": "~1.0.5" 470 | } 471 | }, 472 | "buffer": { 473 | "version": "5.4.3", 474 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.3.tgz", 475 | "integrity": "sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A==", 476 | "dev": true, 477 | "requires": { 478 | "base64-js": "^1.0.2", 479 | "ieee754": "^1.1.4" 480 | } 481 | }, 482 | "buffer-equal-constant-time": { 483 | "version": "1.0.1", 484 | "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", 485 | "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=", 486 | "dev": true 487 | }, 488 | "buffer-from": { 489 | "version": "1.1.1", 490 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 491 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", 492 | "dev": true 493 | }, 494 | "buffer-xor": { 495 | "version": "1.0.3", 496 | "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", 497 | "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", 498 | "dev": true 499 | }, 500 | "builtin-status-codes": { 501 | "version": "3.0.0", 502 | "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", 503 | "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", 504 | "dev": true 505 | }, 506 | "cacheable-request": { 507 | "version": "6.1.0", 508 | "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", 509 | "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", 510 | "dev": true, 511 | "requires": { 512 | "clone-response": "^1.0.2", 513 | "get-stream": "^5.1.0", 514 | "http-cache-semantics": "^4.0.0", 515 | "keyv": "^3.0.0", 516 | "lowercase-keys": "^2.0.0", 517 | "normalize-url": "^4.1.0", 518 | "responselike": "^1.0.2" 519 | }, 520 | "dependencies": { 521 | "get-stream": { 522 | "version": "5.1.0", 523 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", 524 | "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", 525 | "dev": true, 526 | "requires": { 527 | "pump": "^3.0.0" 528 | } 529 | }, 530 | "lowercase-keys": { 531 | "version": "2.0.0", 532 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", 533 | "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", 534 | "dev": true 535 | } 536 | } 537 | }, 538 | "cached-path-relative": { 539 | "version": "1.0.2", 540 | "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.2.tgz", 541 | "integrity": "sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg==", 542 | "dev": true 543 | }, 544 | "caseless": { 545 | "version": "0.12.0", 546 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 547 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", 548 | "dev": true 549 | }, 550 | "chalk": { 551 | "version": "2.4.2", 552 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 553 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 554 | "dev": true, 555 | "requires": { 556 | "ansi-styles": "^3.2.1", 557 | "escape-string-regexp": "^1.0.5", 558 | "supports-color": "^5.3.0" 559 | } 560 | }, 561 | "chardet": { 562 | "version": "0.7.0", 563 | "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", 564 | "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", 565 | "dev": true 566 | }, 567 | "cheerio": { 568 | "version": "0.22.0", 569 | "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", 570 | "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", 571 | "dev": true, 572 | "requires": { 573 | "css-select": "~1.2.0", 574 | "dom-serializer": "~0.1.0", 575 | "entities": "~1.1.1", 576 | "htmlparser2": "^3.9.1", 577 | "lodash.assignin": "^4.0.9", 578 | "lodash.bind": "^4.1.4", 579 | "lodash.defaults": "^4.0.1", 580 | "lodash.filter": "^4.4.0", 581 | "lodash.flatten": "^4.2.0", 582 | "lodash.foreach": "^4.3.0", 583 | "lodash.map": "^4.4.0", 584 | "lodash.merge": "^4.4.0", 585 | "lodash.pick": "^4.2.1", 586 | "lodash.reduce": "^4.4.0", 587 | "lodash.reject": "^4.4.0", 588 | "lodash.some": "^4.4.0" 589 | } 590 | }, 591 | "cipher-base": { 592 | "version": "1.0.4", 593 | "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", 594 | "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", 595 | "dev": true, 596 | "requires": { 597 | "inherits": "^2.0.1", 598 | "safe-buffer": "^5.0.1" 599 | } 600 | }, 601 | "clean-css": { 602 | "version": "4.2.1", 603 | "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", 604 | "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", 605 | "dev": true, 606 | "requires": { 607 | "source-map": "~0.6.0" 608 | }, 609 | "dependencies": { 610 | "source-map": { 611 | "version": "0.6.1", 612 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 613 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 614 | "dev": true 615 | } 616 | } 617 | }, 618 | "clean-css-cli": { 619 | "version": "4.3.0", 620 | "resolved": "https://registry.npmjs.org/clean-css-cli/-/clean-css-cli-4.3.0.tgz", 621 | "integrity": "sha512-8GHZfr+mG3zB/Lgqrr27qHBFsPSn0fyEI3f2rIZpxPxUbn2J6A8xyyeBRVTW8duDuXigN0s80vsXiXJOEFIO5Q==", 622 | "dev": true, 623 | "requires": { 624 | "clean-css": "^4.2.1", 625 | "commander": "2.x", 626 | "glob": "7.x" 627 | }, 628 | "dependencies": { 629 | "commander": { 630 | "version": "2.20.3", 631 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 632 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 633 | "dev": true 634 | } 635 | } 636 | }, 637 | "clean-stack": { 638 | "version": "2.2.0", 639 | "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", 640 | "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", 641 | "dev": true 642 | }, 643 | "cli-cursor": { 644 | "version": "3.1.0", 645 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", 646 | "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", 647 | "dev": true, 648 | "requires": { 649 | "restore-cursor": "^3.1.0" 650 | } 651 | }, 652 | "cli-spinner": { 653 | "version": "0.2.10", 654 | "resolved": "https://registry.npmjs.org/cli-spinner/-/cli-spinner-0.2.10.tgz", 655 | "integrity": "sha512-U0sSQ+JJvSLi1pAYuJykwiA8Dsr15uHEy85iCJ6A+0DjVxivr3d+N2Wjvodeg89uP5K6TswFkKBfAD7B3YSn/Q==", 656 | "dev": true 657 | }, 658 | "cli-width": { 659 | "version": "2.2.0", 660 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", 661 | "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", 662 | "dev": true 663 | }, 664 | "clone-response": { 665 | "version": "1.0.2", 666 | "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", 667 | "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", 668 | "dev": true, 669 | "requires": { 670 | "mimic-response": "^1.0.0" 671 | } 672 | }, 673 | "color-convert": { 674 | "version": "1.9.3", 675 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 676 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 677 | "dev": true, 678 | "requires": { 679 | "color-name": "1.1.3" 680 | } 681 | }, 682 | "color-name": { 683 | "version": "1.1.3", 684 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 685 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 686 | "dev": true 687 | }, 688 | "combine-source-map": { 689 | "version": "0.8.0", 690 | "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", 691 | "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", 692 | "dev": true, 693 | "requires": { 694 | "convert-source-map": "~1.1.0", 695 | "inline-source-map": "~0.6.0", 696 | "lodash.memoize": "~3.0.3", 697 | "source-map": "~0.5.3" 698 | } 699 | }, 700 | "combined-stream": { 701 | "version": "1.0.8", 702 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 703 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 704 | "dev": true, 705 | "requires": { 706 | "delayed-stream": "~1.0.0" 707 | } 708 | }, 709 | "commander": { 710 | "version": "3.0.2", 711 | "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", 712 | "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", 713 | "dev": true 714 | }, 715 | "concat-map": { 716 | "version": "0.0.1", 717 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 718 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 719 | "dev": true 720 | }, 721 | "concat-stream": { 722 | "version": "1.6.2", 723 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", 724 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", 725 | "dev": true, 726 | "requires": { 727 | "buffer-from": "^1.0.0", 728 | "inherits": "^2.0.3", 729 | "readable-stream": "^2.2.2", 730 | "typedarray": "^0.0.6" 731 | } 732 | }, 733 | "console-browserify": { 734 | "version": "1.2.0", 735 | "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", 736 | "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", 737 | "dev": true 738 | }, 739 | "constants-browserify": { 740 | "version": "1.0.0", 741 | "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", 742 | "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", 743 | "dev": true 744 | }, 745 | "convert-source-map": { 746 | "version": "1.1.3", 747 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", 748 | "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", 749 | "dev": true 750 | }, 751 | "core-util-is": { 752 | "version": "1.0.2", 753 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 754 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 755 | "dev": true 756 | }, 757 | "create-ecdh": { 758 | "version": "4.0.3", 759 | "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", 760 | "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", 761 | "dev": true, 762 | "requires": { 763 | "bn.js": "^4.1.0", 764 | "elliptic": "^6.0.0" 765 | } 766 | }, 767 | "create-hash": { 768 | "version": "1.2.0", 769 | "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", 770 | "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", 771 | "dev": true, 772 | "requires": { 773 | "cipher-base": "^1.0.1", 774 | "inherits": "^2.0.1", 775 | "md5.js": "^1.3.4", 776 | "ripemd160": "^2.0.1", 777 | "sha.js": "^2.4.0" 778 | } 779 | }, 780 | "create-hmac": { 781 | "version": "1.1.7", 782 | "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", 783 | "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", 784 | "dev": true, 785 | "requires": { 786 | "cipher-base": "^1.0.3", 787 | "create-hash": "^1.1.0", 788 | "inherits": "^2.0.1", 789 | "ripemd160": "^2.0.0", 790 | "safe-buffer": "^5.0.1", 791 | "sha.js": "^2.4.8" 792 | } 793 | }, 794 | "cross-spawn": { 795 | "version": "6.0.5", 796 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", 797 | "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", 798 | "dev": true, 799 | "requires": { 800 | "nice-try": "^1.0.4", 801 | "path-key": "^2.0.1", 802 | "semver": "^5.5.0", 803 | "shebang-command": "^1.2.0", 804 | "which": "^1.2.9" 805 | } 806 | }, 807 | "crypto-browserify": { 808 | "version": "3.12.0", 809 | "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", 810 | "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", 811 | "dev": true, 812 | "requires": { 813 | "browserify-cipher": "^1.0.0", 814 | "browserify-sign": "^4.0.0", 815 | "create-ecdh": "^4.0.0", 816 | "create-hash": "^1.1.0", 817 | "create-hmac": "^1.1.0", 818 | "diffie-hellman": "^5.0.0", 819 | "inherits": "^2.0.1", 820 | "pbkdf2": "^3.0.3", 821 | "public-encrypt": "^4.0.0", 822 | "randombytes": "^2.0.0", 823 | "randomfill": "^1.0.3" 824 | } 825 | }, 826 | "css-select": { 827 | "version": "1.2.0", 828 | "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", 829 | "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", 830 | "dev": true, 831 | "requires": { 832 | "boolbase": "~1.0.0", 833 | "css-what": "2.1", 834 | "domutils": "1.5.1", 835 | "nth-check": "~1.0.1" 836 | } 837 | }, 838 | "css-what": { 839 | "version": "2.1.3", 840 | "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", 841 | "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", 842 | "dev": true 843 | }, 844 | "cwd": { 845 | "version": "0.10.0", 846 | "resolved": "https://registry.npmjs.org/cwd/-/cwd-0.10.0.tgz", 847 | "integrity": "sha1-FyQAaUBXwioTsM8WFix+S3p/5Wc=", 848 | "dev": true, 849 | "requires": { 850 | "find-pkg": "^0.1.2", 851 | "fs-exists-sync": "^0.1.0" 852 | } 853 | }, 854 | "dash-ast": { 855 | "version": "1.0.0", 856 | "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", 857 | "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==", 858 | "dev": true 859 | }, 860 | "dashdash": { 861 | "version": "1.14.1", 862 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 863 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 864 | "dev": true, 865 | "requires": { 866 | "assert-plus": "^1.0.0" 867 | } 868 | }, 869 | "datauri": { 870 | "version": "2.0.0", 871 | "resolved": "https://registry.npmjs.org/datauri/-/datauri-2.0.0.tgz", 872 | "integrity": "sha512-zS2HSf9pI5XPlNZgIqJg/wCJpecgU/HA6E/uv2EfaWnW1EiTGLfy/EexTIsC9c99yoCOTXlqeeWk4FkCSuO3/g==", 873 | "dev": true, 874 | "requires": { 875 | "image-size": "^0.7.3", 876 | "mimer": "^1.0.0" 877 | } 878 | }, 879 | "debug": { 880 | "version": "3.2.6", 881 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", 882 | "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", 883 | "dev": true, 884 | "requires": { 885 | "ms": "^2.1.1" 886 | } 887 | }, 888 | "decompress-response": { 889 | "version": "3.3.0", 890 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", 891 | "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", 892 | "dev": true, 893 | "requires": { 894 | "mimic-response": "^1.0.0" 895 | } 896 | }, 897 | "deep-extend": { 898 | "version": "0.6.0", 899 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", 900 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", 901 | "dev": true 902 | }, 903 | "defer-to-connect": { 904 | "version": "1.1.0", 905 | "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.0.tgz", 906 | "integrity": "sha512-WE2sZoctWm/v4smfCAdjYbrfS55JiMRdlY9ZubFhsYbteCK9+BvAx4YV7nPjYM6ZnX5BcoVKwfmyx9sIFTgQMQ==", 907 | "dev": true 908 | }, 909 | "defined": { 910 | "version": "1.0.0", 911 | "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", 912 | "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", 913 | "dev": true 914 | }, 915 | "delayed-stream": { 916 | "version": "1.0.0", 917 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 918 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", 919 | "dev": true 920 | }, 921 | "depd": { 922 | "version": "1.1.2", 923 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 924 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", 925 | "dev": true 926 | }, 927 | "deps-sort": { 928 | "version": "2.0.1", 929 | "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz", 930 | "integrity": "sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==", 931 | "dev": true, 932 | "requires": { 933 | "JSONStream": "^1.0.3", 934 | "shasum-object": "^1.0.0", 935 | "subarg": "^1.0.0", 936 | "through2": "^2.0.0" 937 | } 938 | }, 939 | "des.js": { 940 | "version": "1.0.0", 941 | "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", 942 | "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", 943 | "dev": true, 944 | "requires": { 945 | "inherits": "^2.0.1", 946 | "minimalistic-assert": "^1.0.0" 947 | } 948 | }, 949 | "detective": { 950 | "version": "5.2.0", 951 | "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", 952 | "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", 953 | "dev": true, 954 | "requires": { 955 | "acorn-node": "^1.6.1", 956 | "defined": "^1.0.0", 957 | "minimist": "^1.1.1" 958 | }, 959 | "dependencies": { 960 | "minimist": { 961 | "version": "1.2.0", 962 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 963 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", 964 | "dev": true 965 | } 966 | } 967 | }, 968 | "diffie-hellman": { 969 | "version": "5.0.3", 970 | "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", 971 | "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", 972 | "dev": true, 973 | "requires": { 974 | "bn.js": "^4.1.0", 975 | "miller-rabin": "^4.0.0", 976 | "randombytes": "^2.0.0" 977 | } 978 | }, 979 | "dns-packet": { 980 | "version": "5.2.1", 981 | "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.2.1.tgz", 982 | "integrity": "sha512-JHj2yJeKOqlxzeuYpN1d56GfhzivAxavNwHj9co3qptECel27B1rLY5PifJAvubsInX5pGLDjAHuCfCUc2Zv/w==", 983 | "dev": true, 984 | "requires": { 985 | "ip": "^1.1.5" 986 | } 987 | }, 988 | "dns-socket": { 989 | "version": "4.2.0", 990 | "resolved": "https://registry.npmjs.org/dns-socket/-/dns-socket-4.2.0.tgz", 991 | "integrity": "sha512-4XuD3z28jht3jvHbiom6fAipgG5LkjYeDLrX5OH8cbl0AtzTyUUAxGckcW8T7z0pLfBBV5qOiuC4wUEohk6FrQ==", 992 | "dev": true, 993 | "requires": { 994 | "dns-packet": "^5.1.2" 995 | } 996 | }, 997 | "dom-serializer": { 998 | "version": "0.1.1", 999 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", 1000 | "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", 1001 | "dev": true, 1002 | "requires": { 1003 | "domelementtype": "^1.3.0", 1004 | "entities": "^1.1.1" 1005 | } 1006 | }, 1007 | "domain-browser": { 1008 | "version": "1.2.0", 1009 | "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", 1010 | "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", 1011 | "dev": true 1012 | }, 1013 | "domelementtype": { 1014 | "version": "1.3.1", 1015 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", 1016 | "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", 1017 | "dev": true 1018 | }, 1019 | "domhandler": { 1020 | "version": "2.4.2", 1021 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", 1022 | "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", 1023 | "dev": true, 1024 | "requires": { 1025 | "domelementtype": "1" 1026 | } 1027 | }, 1028 | "domutils": { 1029 | "version": "1.5.1", 1030 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", 1031 | "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", 1032 | "dev": true, 1033 | "requires": { 1034 | "dom-serializer": "0", 1035 | "domelementtype": "1" 1036 | } 1037 | }, 1038 | "dotf": { 1039 | "version": "1.2.0", 1040 | "resolved": "https://registry.npmjs.org/dotf/-/dotf-1.2.0.tgz", 1041 | "integrity": "sha512-InO+tJ/NBPlxrCiwQpTt7eOxgA3B8IoZboYGmt94MaWT5mmTfr7mHK1RT7OFNvCJx7UFoJ3g0/rq0c+QQWk+8w==", 1042 | "dev": true, 1043 | "requires": { 1044 | "jsonfile": "^3.0.1", 1045 | "resolve-file": "^0.3.0", 1046 | "resolve-path": "^1.3.3" 1047 | } 1048 | }, 1049 | "duplexer2": { 1050 | "version": "0.1.4", 1051 | "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", 1052 | "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", 1053 | "dev": true, 1054 | "requires": { 1055 | "readable-stream": "^2.0.2" 1056 | } 1057 | }, 1058 | "duplexer3": { 1059 | "version": "0.1.4", 1060 | "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", 1061 | "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", 1062 | "dev": true 1063 | }, 1064 | "ecc-jsbn": { 1065 | "version": "0.1.2", 1066 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", 1067 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", 1068 | "dev": true, 1069 | "requires": { 1070 | "jsbn": "~0.1.0", 1071 | "safer-buffer": "^2.1.0" 1072 | } 1073 | }, 1074 | "ecdsa-sig-formatter": { 1075 | "version": "1.0.11", 1076 | "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", 1077 | "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", 1078 | "dev": true, 1079 | "requires": { 1080 | "safe-buffer": "^5.0.1" 1081 | } 1082 | }, 1083 | "ellipsize": { 1084 | "version": "0.1.0", 1085 | "resolved": "https://registry.npmjs.org/ellipsize/-/ellipsize-0.1.0.tgz", 1086 | "integrity": "sha1-nUNoLUS5GtFuvYQmisEDFwplU/g=", 1087 | "dev": true 1088 | }, 1089 | "elliptic": { 1090 | "version": "6.5.1", 1091 | "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.1.tgz", 1092 | "integrity": "sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg==", 1093 | "dev": true, 1094 | "requires": { 1095 | "bn.js": "^4.4.0", 1096 | "brorand": "^1.0.1", 1097 | "hash.js": "^1.0.0", 1098 | "hmac-drbg": "^1.0.0", 1099 | "inherits": "^2.0.1", 1100 | "minimalistic-assert": "^1.0.0", 1101 | "minimalistic-crypto-utils": "^1.0.0" 1102 | } 1103 | }, 1104 | "emoji-regex": { 1105 | "version": "8.0.0", 1106 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 1107 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 1108 | "dev": true 1109 | }, 1110 | "end-of-stream": { 1111 | "version": "1.4.4", 1112 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 1113 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 1114 | "dev": true, 1115 | "requires": { 1116 | "once": "^1.4.0" 1117 | } 1118 | }, 1119 | "entities": { 1120 | "version": "1.1.2", 1121 | "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", 1122 | "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", 1123 | "dev": true 1124 | }, 1125 | "es6-promise": { 1126 | "version": "4.2.8", 1127 | "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", 1128 | "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", 1129 | "dev": true 1130 | }, 1131 | "es6-promisify": { 1132 | "version": "5.0.0", 1133 | "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", 1134 | "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", 1135 | "dev": true, 1136 | "requires": { 1137 | "es6-promise": "^4.0.3" 1138 | } 1139 | }, 1140 | "escape-string-regexp": { 1141 | "version": "1.0.5", 1142 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1143 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 1144 | "dev": true 1145 | }, 1146 | "event-target-shim": { 1147 | "version": "5.0.1", 1148 | "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", 1149 | "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", 1150 | "dev": true 1151 | }, 1152 | "events": { 1153 | "version": "2.1.0", 1154 | "resolved": "https://registry.npmjs.org/events/-/events-2.1.0.tgz", 1155 | "integrity": "sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg==", 1156 | "dev": true 1157 | }, 1158 | "evp_bytestokey": { 1159 | "version": "1.0.3", 1160 | "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", 1161 | "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", 1162 | "dev": true, 1163 | "requires": { 1164 | "md5.js": "^1.3.4", 1165 | "safe-buffer": "^5.1.1" 1166 | } 1167 | }, 1168 | "exec-sh": { 1169 | "version": "0.2.2", 1170 | "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz", 1171 | "integrity": "sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==", 1172 | "dev": true, 1173 | "requires": { 1174 | "merge": "^1.2.0" 1175 | } 1176 | }, 1177 | "expand-tilde": { 1178 | "version": "2.0.2", 1179 | "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", 1180 | "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", 1181 | "dev": true, 1182 | "requires": { 1183 | "homedir-polyfill": "^1.0.1" 1184 | } 1185 | }, 1186 | "extend": { 1187 | "version": "3.0.2", 1188 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 1189 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", 1190 | "dev": true 1191 | }, 1192 | "extend-shallow": { 1193 | "version": "2.0.1", 1194 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 1195 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 1196 | "dev": true, 1197 | "requires": { 1198 | "is-extendable": "^0.1.0" 1199 | } 1200 | }, 1201 | "external-editor": { 1202 | "version": "3.1.0", 1203 | "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", 1204 | "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", 1205 | "dev": true, 1206 | "requires": { 1207 | "chardet": "^0.7.0", 1208 | "iconv-lite": "^0.4.24", 1209 | "tmp": "^0.0.33" 1210 | } 1211 | }, 1212 | "extsprintf": { 1213 | "version": "1.3.0", 1214 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 1215 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", 1216 | "dev": true 1217 | }, 1218 | "fast-deep-equal": { 1219 | "version": "2.0.1", 1220 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", 1221 | "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", 1222 | "dev": true 1223 | }, 1224 | "fast-json-stable-stringify": { 1225 | "version": "2.0.0", 1226 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", 1227 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", 1228 | "dev": true 1229 | }, 1230 | "fast-safe-stringify": { 1231 | "version": "2.0.7", 1232 | "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", 1233 | "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==", 1234 | "dev": true 1235 | }, 1236 | "fast-text-encoding": { 1237 | "version": "1.0.0", 1238 | "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.0.tgz", 1239 | "integrity": "sha512-R9bHCvweUxxwkDwhjav5vxpFvdPGlVngtqmx4pIZfSUhM/Q4NiIUHB456BAf+Q1Nwu3HEZYONtu+Rya+af4jiQ==", 1240 | "dev": true 1241 | }, 1242 | "figures": { 1243 | "version": "3.1.0", 1244 | "resolved": "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz", 1245 | "integrity": "sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==", 1246 | "dev": true, 1247 | "requires": { 1248 | "escape-string-regexp": "^1.0.5" 1249 | } 1250 | }, 1251 | "find-file-up": { 1252 | "version": "0.1.3", 1253 | "resolved": "https://registry.npmjs.org/find-file-up/-/find-file-up-0.1.3.tgz", 1254 | "integrity": "sha1-z2gJG8+fMApA2kEbN9pczlovvqA=", 1255 | "dev": true, 1256 | "requires": { 1257 | "fs-exists-sync": "^0.1.0", 1258 | "resolve-dir": "^0.1.0" 1259 | } 1260 | }, 1261 | "find-pkg": { 1262 | "version": "0.1.2", 1263 | "resolved": "https://registry.npmjs.org/find-pkg/-/find-pkg-0.1.2.tgz", 1264 | "integrity": "sha1-G9wiwG42NlUy4qJIBGhUuXiNpVc=", 1265 | "dev": true, 1266 | "requires": { 1267 | "find-file-up": "^0.1.2" 1268 | } 1269 | }, 1270 | "find-up": { 1271 | "version": "4.1.0", 1272 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", 1273 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", 1274 | "dev": true, 1275 | "requires": { 1276 | "locate-path": "^5.0.0", 1277 | "path-exists": "^4.0.0" 1278 | } 1279 | }, 1280 | "forever-agent": { 1281 | "version": "0.6.1", 1282 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 1283 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", 1284 | "dev": true 1285 | }, 1286 | "form-data": { 1287 | "version": "2.3.3", 1288 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", 1289 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", 1290 | "dev": true, 1291 | "requires": { 1292 | "asynckit": "^0.4.0", 1293 | "combined-stream": "^1.0.6", 1294 | "mime-types": "^2.1.12" 1295 | } 1296 | }, 1297 | "fs-exists-sync": { 1298 | "version": "0.1.0", 1299 | "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz", 1300 | "integrity": "sha1-mC1ok6+RjnLQjeyehnP/K1qNat0=", 1301 | "dev": true 1302 | }, 1303 | "fs-extra": { 1304 | "version": "8.1.0", 1305 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", 1306 | "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", 1307 | "dev": true, 1308 | "requires": { 1309 | "graceful-fs": "^4.2.0", 1310 | "jsonfile": "^4.0.0", 1311 | "universalify": "^0.1.0" 1312 | }, 1313 | "dependencies": { 1314 | "jsonfile": { 1315 | "version": "4.0.0", 1316 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 1317 | "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", 1318 | "dev": true, 1319 | "requires": { 1320 | "graceful-fs": "^4.1.6" 1321 | } 1322 | } 1323 | } 1324 | }, 1325 | "fs.realpath": { 1326 | "version": "1.0.0", 1327 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1328 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 1329 | "dev": true 1330 | }, 1331 | "function-bind": { 1332 | "version": "1.1.1", 1333 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1334 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 1335 | "dev": true 1336 | }, 1337 | "fuzzy": { 1338 | "version": "0.1.3", 1339 | "resolved": "https://registry.npmjs.org/fuzzy/-/fuzzy-0.1.3.tgz", 1340 | "integrity": "sha1-THbsL/CsGjap3M+aAN+GIweNTtg=", 1341 | "dev": true 1342 | }, 1343 | "gaxios": { 1344 | "version": "2.1.0", 1345 | "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-2.1.0.tgz", 1346 | "integrity": "sha512-Gtpb5sdQmb82sgVkT2GnS2n+Kx4dlFwbeMYcDlD395aEvsLCSQXJJcHt7oJ2LrGxDEAeiOkK79Zv2A8Pzt6CFg==", 1347 | "dev": true, 1348 | "requires": { 1349 | "abort-controller": "^3.0.0", 1350 | "extend": "^3.0.2", 1351 | "https-proxy-agent": "^3.0.0", 1352 | "is-stream": "^2.0.0", 1353 | "node-fetch": "^2.3.0" 1354 | } 1355 | }, 1356 | "gcp-metadata": { 1357 | "version": "3.2.1", 1358 | "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-3.2.1.tgz", 1359 | "integrity": "sha512-JjDedBWnbXVXWwTpjBdpb9RpVLiowXG4/50rra4hPH8REXAi2si6Xbb48B2SwkQBLz9Wu6+o32GDTvVy2kkLoQ==", 1360 | "dev": true, 1361 | "requires": { 1362 | "gaxios": "^2.1.0", 1363 | "json-bigint": "^0.3.0" 1364 | } 1365 | }, 1366 | "get-assigned-identifiers": { 1367 | "version": "1.2.0", 1368 | "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", 1369 | "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", 1370 | "dev": true 1371 | }, 1372 | "get-stream": { 1373 | "version": "4.1.0", 1374 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", 1375 | "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", 1376 | "dev": true, 1377 | "requires": { 1378 | "pump": "^3.0.0" 1379 | } 1380 | }, 1381 | "getpass": { 1382 | "version": "0.1.7", 1383 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 1384 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 1385 | "dev": true, 1386 | "requires": { 1387 | "assert-plus": "^1.0.0" 1388 | } 1389 | }, 1390 | "glob": { 1391 | "version": "7.1.6", 1392 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 1393 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 1394 | "dev": true, 1395 | "requires": { 1396 | "fs.realpath": "^1.0.0", 1397 | "inflight": "^1.0.4", 1398 | "inherits": "2", 1399 | "minimatch": "^3.0.4", 1400 | "once": "^1.3.0", 1401 | "path-is-absolute": "^1.0.0" 1402 | } 1403 | }, 1404 | "global-modules": { 1405 | "version": "0.2.3", 1406 | "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz", 1407 | "integrity": "sha1-6lo77ULG1s6ZWk+KEmm12uIjgo0=", 1408 | "dev": true, 1409 | "requires": { 1410 | "global-prefix": "^0.1.4", 1411 | "is-windows": "^0.2.0" 1412 | } 1413 | }, 1414 | "global-prefix": { 1415 | "version": "0.1.5", 1416 | "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz", 1417 | "integrity": "sha1-jTvGuNo8qBEqFg2NSW/wRiv+948=", 1418 | "dev": true, 1419 | "requires": { 1420 | "homedir-polyfill": "^1.0.0", 1421 | "ini": "^1.3.4", 1422 | "is-windows": "^0.2.0", 1423 | "which": "^1.2.12" 1424 | } 1425 | }, 1426 | "google-auth-library": { 1427 | "version": "5.5.1", 1428 | "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-5.5.1.tgz", 1429 | "integrity": "sha512-zCtjQccWS/EHYyFdXRbfeSGM/gW+d7uMAcVnvXRnjBXON5ijo6s0nsObP0ifqileIDSbZjTlLtgo+UoN8IFJcg==", 1430 | "dev": true, 1431 | "requires": { 1432 | "arrify": "^2.0.0", 1433 | "base64-js": "^1.3.0", 1434 | "fast-text-encoding": "^1.0.0", 1435 | "gaxios": "^2.1.0", 1436 | "gcp-metadata": "^3.2.0", 1437 | "gtoken": "^4.1.0", 1438 | "jws": "^3.1.5", 1439 | "lru-cache": "^5.0.0" 1440 | } 1441 | }, 1442 | "google-p12-pem": { 1443 | "version": "2.0.2", 1444 | "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-2.0.2.tgz", 1445 | "integrity": "sha512-UfnEARfJKI6pbmC1hfFFm+UAcZxeIwTiEcHfqKe/drMsXD/ilnVjF7zgOGpHXyhuvX6jNJK3S8A0hOQjwtFxEw==", 1446 | "dev": true, 1447 | "requires": { 1448 | "node-forge": "^0.9.0" 1449 | } 1450 | }, 1451 | "googleapis": { 1452 | "version": "42.0.0", 1453 | "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-42.0.0.tgz", 1454 | "integrity": "sha512-nQiKPDmzmMusnU8UOibmlC6hsgkm70SjqmLxSlBBb7i0z7/J6UPilSzo9tAMoHA8u3BUw3OXn13+p9YLmBH6Gg==", 1455 | "dev": true, 1456 | "requires": { 1457 | "google-auth-library": "^5.1.0", 1458 | "googleapis-common": "^3.0.0" 1459 | } 1460 | }, 1461 | "googleapis-common": { 1462 | "version": "3.1.1", 1463 | "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-3.1.1.tgz", 1464 | "integrity": "sha512-sXNS9oJifZOk2Pa6SzxoSfv0Mj9y/qIOsVV7D8WHuH//90CXNnpR/nCYVa+KcPMDT9ONq21sbtvjfKATMV1Bug==", 1465 | "dev": true, 1466 | "requires": { 1467 | "extend": "^3.0.2", 1468 | "gaxios": "^2.0.1", 1469 | "google-auth-library": "^5.2.0", 1470 | "qs": "^6.7.0", 1471 | "url-template": "^2.0.8", 1472 | "uuid": "^3.3.2" 1473 | } 1474 | }, 1475 | "got": { 1476 | "version": "9.6.0", 1477 | "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", 1478 | "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", 1479 | "dev": true, 1480 | "requires": { 1481 | "@sindresorhus/is": "^0.14.0", 1482 | "@szmarczak/http-timer": "^1.1.2", 1483 | "cacheable-request": "^6.0.0", 1484 | "decompress-response": "^3.3.0", 1485 | "duplexer3": "^0.1.4", 1486 | "get-stream": "^4.1.0", 1487 | "lowercase-keys": "^1.0.1", 1488 | "mimic-response": "^1.0.1", 1489 | "p-cancelable": "^1.0.0", 1490 | "to-readable-stream": "^1.0.0", 1491 | "url-parse-lax": "^3.0.0" 1492 | } 1493 | }, 1494 | "graceful-fs": { 1495 | "version": "4.2.3", 1496 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", 1497 | "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", 1498 | "dev": true 1499 | }, 1500 | "gtoken": { 1501 | "version": "4.1.1", 1502 | "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-4.1.1.tgz", 1503 | "integrity": "sha512-2FEmEDGi4NdM6u+mtaLjSDDtHiw5wT+nBsI+yrSeFO6fVqPEytYVF6uiIpRaOaZhRP+ozjYWuwwtMlrjAyTcYA==", 1504 | "dev": true, 1505 | "requires": { 1506 | "gaxios": "^2.1.0", 1507 | "google-p12-pem": "^2.0.0", 1508 | "jws": "^3.1.5", 1509 | "mime": "^2.2.0" 1510 | } 1511 | }, 1512 | "har-schema": { 1513 | "version": "2.0.0", 1514 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 1515 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", 1516 | "dev": true 1517 | }, 1518 | "har-validator": { 1519 | "version": "5.1.3", 1520 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", 1521 | "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", 1522 | "dev": true, 1523 | "requires": { 1524 | "ajv": "^6.5.5", 1525 | "har-schema": "^2.0.0" 1526 | } 1527 | }, 1528 | "has": { 1529 | "version": "1.0.3", 1530 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1531 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1532 | "dev": true, 1533 | "requires": { 1534 | "function-bind": "^1.1.1" 1535 | } 1536 | }, 1537 | "has-flag": { 1538 | "version": "3.0.0", 1539 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1540 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 1541 | "dev": true 1542 | }, 1543 | "hash-base": { 1544 | "version": "3.0.4", 1545 | "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", 1546 | "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", 1547 | "dev": true, 1548 | "requires": { 1549 | "inherits": "^2.0.1", 1550 | "safe-buffer": "^5.0.1" 1551 | } 1552 | }, 1553 | "hash.js": { 1554 | "version": "1.1.7", 1555 | "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", 1556 | "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", 1557 | "dev": true, 1558 | "requires": { 1559 | "inherits": "^2.0.3", 1560 | "minimalistic-assert": "^1.0.1" 1561 | } 1562 | }, 1563 | "highlight.js": { 1564 | "version": "9.16.2", 1565 | "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.16.2.tgz", 1566 | "integrity": "sha512-feMUrVLZvjy0oC7FVJQcSQRqbBq9kwqnYE4+Kj9ZjbHh3g+BisiPgF49NyQbVLNdrL/qqZr3Ca9yOKwgn2i/tw==", 1567 | "dev": true 1568 | }, 1569 | "hmac-drbg": { 1570 | "version": "1.0.1", 1571 | "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", 1572 | "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", 1573 | "dev": true, 1574 | "requires": { 1575 | "hash.js": "^1.0.3", 1576 | "minimalistic-assert": "^1.0.0", 1577 | "minimalistic-crypto-utils": "^1.0.1" 1578 | } 1579 | }, 1580 | "homedir-polyfill": { 1581 | "version": "1.0.3", 1582 | "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", 1583 | "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", 1584 | "dev": true, 1585 | "requires": { 1586 | "parse-passwd": "^1.0.0" 1587 | } 1588 | }, 1589 | "htmlescape": { 1590 | "version": "1.1.1", 1591 | "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", 1592 | "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", 1593 | "dev": true 1594 | }, 1595 | "htmlparser2": { 1596 | "version": "3.10.1", 1597 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", 1598 | "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", 1599 | "dev": true, 1600 | "requires": { 1601 | "domelementtype": "^1.3.1", 1602 | "domhandler": "^2.3.0", 1603 | "domutils": "^1.5.1", 1604 | "entities": "^1.1.1", 1605 | "inherits": "^2.0.1", 1606 | "readable-stream": "^3.1.1" 1607 | }, 1608 | "dependencies": { 1609 | "readable-stream": { 1610 | "version": "3.4.0", 1611 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", 1612 | "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", 1613 | "dev": true, 1614 | "requires": { 1615 | "inherits": "^2.0.3", 1616 | "string_decoder": "^1.1.1", 1617 | "util-deprecate": "^1.0.1" 1618 | } 1619 | } 1620 | } 1621 | }, 1622 | "http-cache-semantics": { 1623 | "version": "4.0.3", 1624 | "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.0.3.tgz", 1625 | "integrity": "sha512-TcIMG3qeVLgDr1TEd2XvHaTnMPwYQUQMIBLy+5pLSDKYFc7UIqj39w8EGzZkaxoLv/l2K8HaI0t5AVA+YYgUew==", 1626 | "dev": true 1627 | }, 1628 | "http-errors": { 1629 | "version": "1.6.3", 1630 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", 1631 | "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", 1632 | "dev": true, 1633 | "requires": { 1634 | "depd": "~1.1.2", 1635 | "inherits": "2.0.3", 1636 | "setprototypeof": "1.1.0", 1637 | "statuses": ">= 1.4.0 < 2" 1638 | } 1639 | }, 1640 | "http-signature": { 1641 | "version": "1.2.0", 1642 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 1643 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 1644 | "dev": true, 1645 | "requires": { 1646 | "assert-plus": "^1.0.0", 1647 | "jsprim": "^1.2.2", 1648 | "sshpk": "^1.7.0" 1649 | } 1650 | }, 1651 | "https-browserify": { 1652 | "version": "1.0.0", 1653 | "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", 1654 | "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", 1655 | "dev": true 1656 | }, 1657 | "https-proxy-agent": { 1658 | "version": "3.0.1", 1659 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz", 1660 | "integrity": "sha512-+ML2Rbh6DAuee7d07tYGEKOEi2voWPUGan+ExdPbPW6Z3svq+JCqr0v8WmKPOkz1vOVykPCBSuobe7G8GJUtVg==", 1661 | "dev": true, 1662 | "requires": { 1663 | "agent-base": "^4.3.0", 1664 | "debug": "^3.1.0" 1665 | } 1666 | }, 1667 | "iconv-lite": { 1668 | "version": "0.4.24", 1669 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 1670 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 1671 | "dev": true, 1672 | "requires": { 1673 | "safer-buffer": ">= 2.1.2 < 3" 1674 | } 1675 | }, 1676 | "ieee754": { 1677 | "version": "1.1.13", 1678 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", 1679 | "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", 1680 | "dev": true 1681 | }, 1682 | "image-size": { 1683 | "version": "0.7.5", 1684 | "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.7.5.tgz", 1685 | "integrity": "sha512-Hiyv+mXHfFEP7LzUL/llg9RwFxxY+o9N3JVLIeG5E7iFIFAalxvRU9UZthBdYDEVnzHMgjnKJPPpay5BWf1g9g==", 1686 | "dev": true 1687 | }, 1688 | "indent-string": { 1689 | "version": "4.0.0", 1690 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", 1691 | "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", 1692 | "dev": true 1693 | }, 1694 | "inflight": { 1695 | "version": "1.0.6", 1696 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1697 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1698 | "dev": true, 1699 | "requires": { 1700 | "once": "^1.3.0", 1701 | "wrappy": "1" 1702 | } 1703 | }, 1704 | "inherits": { 1705 | "version": "2.0.3", 1706 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 1707 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 1708 | "dev": true 1709 | }, 1710 | "ini": { 1711 | "version": "1.3.5", 1712 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", 1713 | "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", 1714 | "dev": true 1715 | }, 1716 | "inline-source-map": { 1717 | "version": "0.6.2", 1718 | "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", 1719 | "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", 1720 | "dev": true, 1721 | "requires": { 1722 | "source-map": "~0.5.3" 1723 | } 1724 | }, 1725 | "inquirer": { 1726 | "version": "7.0.0", 1727 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.0.tgz", 1728 | "integrity": "sha512-rSdC7zelHdRQFkWnhsMu2+2SO41mpv2oF2zy4tMhmiLWkcKbOAs87fWAJhVXttKVwhdZvymvnuM95EyEXg2/tQ==", 1729 | "dev": true, 1730 | "requires": { 1731 | "ansi-escapes": "^4.2.1", 1732 | "chalk": "^2.4.2", 1733 | "cli-cursor": "^3.1.0", 1734 | "cli-width": "^2.0.0", 1735 | "external-editor": "^3.0.3", 1736 | "figures": "^3.0.0", 1737 | "lodash": "^4.17.15", 1738 | "mute-stream": "0.0.8", 1739 | "run-async": "^2.2.0", 1740 | "rxjs": "^6.4.0", 1741 | "string-width": "^4.1.0", 1742 | "strip-ansi": "^5.1.0", 1743 | "through": "^2.3.6" 1744 | } 1745 | }, 1746 | "inquirer-autocomplete-prompt": { 1747 | "version": "1.0.1", 1748 | "resolved": "https://registry.npmjs.org/inquirer-autocomplete-prompt/-/inquirer-autocomplete-prompt-1.0.1.tgz", 1749 | "integrity": "sha512-Y4V6ifAu9LNrNjcEtYq8YUKhrgmmufUn5fsDQqeWgHY8rEO6ZAQkNUiZtBm2kw2uUQlC9HdgrRCHDhTPPguH5A==", 1750 | "dev": true, 1751 | "requires": { 1752 | "ansi-escapes": "^3.0.0", 1753 | "chalk": "^2.0.0", 1754 | "figures": "^2.0.0", 1755 | "run-async": "^2.3.0" 1756 | }, 1757 | "dependencies": { 1758 | "ansi-escapes": { 1759 | "version": "3.2.0", 1760 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", 1761 | "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", 1762 | "dev": true 1763 | }, 1764 | "figures": { 1765 | "version": "2.0.0", 1766 | "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", 1767 | "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", 1768 | "dev": true, 1769 | "requires": { 1770 | "escape-string-regexp": "^1.0.5" 1771 | } 1772 | } 1773 | } 1774 | }, 1775 | "insert-module-globals": { 1776 | "version": "7.2.0", 1777 | "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.0.tgz", 1778 | "integrity": "sha512-VE6NlW+WGn2/AeOMd496AHFYmE7eLKkUY6Ty31k4og5vmA3Fjuwe9v6ifH6Xx/Hz27QvdoMoviw1/pqWRB09Sw==", 1779 | "dev": true, 1780 | "requires": { 1781 | "JSONStream": "^1.0.3", 1782 | "acorn-node": "^1.5.2", 1783 | "combine-source-map": "^0.8.0", 1784 | "concat-stream": "^1.6.1", 1785 | "is-buffer": "^1.1.0", 1786 | "path-is-absolute": "^1.0.1", 1787 | "process": "~0.11.0", 1788 | "through2": "^2.0.0", 1789 | "undeclared-identifiers": "^1.1.2", 1790 | "xtend": "^4.0.0" 1791 | } 1792 | }, 1793 | "ip": { 1794 | "version": "1.1.5", 1795 | "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", 1796 | "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", 1797 | "dev": true 1798 | }, 1799 | "ip-regex": { 1800 | "version": "4.1.0", 1801 | "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.1.0.tgz", 1802 | "integrity": "sha512-pKnZpbgCTfH/1NLIlOduP/V+WRXzC2MOz3Qo8xmxk8C5GudJLgK5QyLVXOSWy3ParAH7Eemurl3xjv/WXYFvMA==", 1803 | "dev": true 1804 | }, 1805 | "is-buffer": { 1806 | "version": "1.1.6", 1807 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", 1808 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", 1809 | "dev": true 1810 | }, 1811 | "is-extendable": { 1812 | "version": "0.1.1", 1813 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", 1814 | "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", 1815 | "dev": true 1816 | }, 1817 | "is-fullwidth-code-point": { 1818 | "version": "3.0.0", 1819 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1820 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1821 | "dev": true 1822 | }, 1823 | "is-ip": { 1824 | "version": "3.1.0", 1825 | "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-3.1.0.tgz", 1826 | "integrity": "sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==", 1827 | "dev": true, 1828 | "requires": { 1829 | "ip-regex": "^4.0.0" 1830 | } 1831 | }, 1832 | "is-online": { 1833 | "version": "8.2.0", 1834 | "resolved": "https://registry.npmjs.org/is-online/-/is-online-8.2.0.tgz", 1835 | "integrity": "sha512-dvTrzRlziHPdl+uazMK+9ypLlwOA3szkaGfAWqI/MKuUutgNxOFBl2gfu2BTkV8C7A2YcYHNlVcsxHzZik3wUQ==", 1836 | "dev": true, 1837 | "requires": { 1838 | "got": "^9.6.0", 1839 | "p-any": "^2.0.0", 1840 | "p-timeout": "^3.0.0", 1841 | "public-ip": "^3.0.0" 1842 | } 1843 | }, 1844 | "is-promise": { 1845 | "version": "2.1.0", 1846 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", 1847 | "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", 1848 | "dev": true 1849 | }, 1850 | "is-stream": { 1851 | "version": "2.0.0", 1852 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", 1853 | "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", 1854 | "dev": true 1855 | }, 1856 | "is-typedarray": { 1857 | "version": "1.0.0", 1858 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 1859 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", 1860 | "dev": true 1861 | }, 1862 | "is-windows": { 1863 | "version": "0.2.0", 1864 | "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", 1865 | "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=", 1866 | "dev": true 1867 | }, 1868 | "is-wsl": { 1869 | "version": "1.1.0", 1870 | "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", 1871 | "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", 1872 | "dev": true 1873 | }, 1874 | "isarray": { 1875 | "version": "1.0.0", 1876 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1877 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 1878 | "dev": true 1879 | }, 1880 | "isexe": { 1881 | "version": "2.0.0", 1882 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1883 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 1884 | "dev": true 1885 | }, 1886 | "isstream": { 1887 | "version": "0.1.2", 1888 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 1889 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", 1890 | "dev": true 1891 | }, 1892 | "jquery": { 1893 | "version": "3.4.1", 1894 | "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.1.tgz", 1895 | "integrity": "sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw==", 1896 | "dev": true 1897 | }, 1898 | "jsbn": { 1899 | "version": "0.1.1", 1900 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 1901 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", 1902 | "dev": true 1903 | }, 1904 | "json-bigint": { 1905 | "version": "0.3.0", 1906 | "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-0.3.0.tgz", 1907 | "integrity": "sha1-DM2RLEuCcNBfBW+9E4FLU9OCWx4=", 1908 | "dev": true, 1909 | "requires": { 1910 | "bignumber.js": "^7.0.0" 1911 | } 1912 | }, 1913 | "json-buffer": { 1914 | "version": "3.0.0", 1915 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", 1916 | "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", 1917 | "dev": true 1918 | }, 1919 | "json-schema": { 1920 | "version": "0.2.3", 1921 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 1922 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", 1923 | "dev": true 1924 | }, 1925 | "json-schema-traverse": { 1926 | "version": "0.4.1", 1927 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 1928 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 1929 | "dev": true 1930 | }, 1931 | "json-stable-stringify": { 1932 | "version": "0.0.1", 1933 | "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", 1934 | "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", 1935 | "dev": true, 1936 | "requires": { 1937 | "jsonify": "~0.0.0" 1938 | } 1939 | }, 1940 | "json-stringify-safe": { 1941 | "version": "5.0.1", 1942 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 1943 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", 1944 | "dev": true 1945 | }, 1946 | "jsonfile": { 1947 | "version": "3.0.1", 1948 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", 1949 | "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", 1950 | "dev": true, 1951 | "requires": { 1952 | "graceful-fs": "^4.1.6" 1953 | } 1954 | }, 1955 | "jsonify": { 1956 | "version": "0.0.0", 1957 | "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", 1958 | "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", 1959 | "dev": true 1960 | }, 1961 | "jsonparse": { 1962 | "version": "1.3.1", 1963 | "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", 1964 | "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", 1965 | "dev": true 1966 | }, 1967 | "jsprim": { 1968 | "version": "1.4.1", 1969 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 1970 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 1971 | "dev": true, 1972 | "requires": { 1973 | "assert-plus": "1.0.0", 1974 | "extsprintf": "1.3.0", 1975 | "json-schema": "0.2.3", 1976 | "verror": "1.10.0" 1977 | } 1978 | }, 1979 | "juice": { 1980 | "version": "5.2.0", 1981 | "resolved": "https://registry.npmjs.org/juice/-/juice-5.2.0.tgz", 1982 | "integrity": "sha512-0l6GZmT3efexyaaay3SchKT5kG311N59TEFP5lfvEy0nz9SNqjx311plJ3b4jze7arsmDsiHQLh/xnAuk0HFTQ==", 1983 | "dev": true, 1984 | "requires": { 1985 | "cheerio": "^0.22.0", 1986 | "commander": "^2.15.1", 1987 | "cross-spawn": "^6.0.5", 1988 | "deep-extend": "^0.6.0", 1989 | "mensch": "^0.3.3", 1990 | "slick": "^1.12.2", 1991 | "web-resource-inliner": "^4.3.1" 1992 | }, 1993 | "dependencies": { 1994 | "commander": { 1995 | "version": "2.20.3", 1996 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 1997 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 1998 | "dev": true 1999 | } 2000 | } 2001 | }, 2002 | "jwa": { 2003 | "version": "1.4.1", 2004 | "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", 2005 | "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", 2006 | "dev": true, 2007 | "requires": { 2008 | "buffer-equal-constant-time": "1.0.1", 2009 | "ecdsa-sig-formatter": "1.0.11", 2010 | "safe-buffer": "^5.0.1" 2011 | } 2012 | }, 2013 | "jws": { 2014 | "version": "3.2.2", 2015 | "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", 2016 | "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", 2017 | "dev": true, 2018 | "requires": { 2019 | "jwa": "^1.4.1", 2020 | "safe-buffer": "^5.0.1" 2021 | } 2022 | }, 2023 | "keyv": { 2024 | "version": "3.1.0", 2025 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", 2026 | "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", 2027 | "dev": true, 2028 | "requires": { 2029 | "json-buffer": "3.0.0" 2030 | } 2031 | }, 2032 | "kind-of": { 2033 | "version": "3.2.2", 2034 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 2035 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 2036 | "dev": true, 2037 | "requires": { 2038 | "is-buffer": "^1.1.5" 2039 | } 2040 | }, 2041 | "labeled-stream-splicer": { 2042 | "version": "2.0.2", 2043 | "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", 2044 | "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==", 2045 | "dev": true, 2046 | "requires": { 2047 | "inherits": "^2.0.1", 2048 | "stream-splicer": "^2.0.0" 2049 | } 2050 | }, 2051 | "lazy-cache": { 2052 | "version": "2.0.2", 2053 | "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", 2054 | "integrity": "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=", 2055 | "dev": true, 2056 | "requires": { 2057 | "set-getter": "^0.1.0" 2058 | } 2059 | }, 2060 | "locate-path": { 2061 | "version": "5.0.0", 2062 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", 2063 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", 2064 | "dev": true, 2065 | "requires": { 2066 | "p-locate": "^4.1.0" 2067 | } 2068 | }, 2069 | "lodash": { 2070 | "version": "4.17.15", 2071 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", 2072 | "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", 2073 | "dev": true 2074 | }, 2075 | "lodash.assignin": { 2076 | "version": "4.2.0", 2077 | "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", 2078 | "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=", 2079 | "dev": true 2080 | }, 2081 | "lodash.bind": { 2082 | "version": "4.2.1", 2083 | "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", 2084 | "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=", 2085 | "dev": true 2086 | }, 2087 | "lodash.defaults": { 2088 | "version": "4.2.0", 2089 | "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", 2090 | "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", 2091 | "dev": true 2092 | }, 2093 | "lodash.filter": { 2094 | "version": "4.6.0", 2095 | "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", 2096 | "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=", 2097 | "dev": true 2098 | }, 2099 | "lodash.flatten": { 2100 | "version": "4.4.0", 2101 | "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", 2102 | "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", 2103 | "dev": true 2104 | }, 2105 | "lodash.foreach": { 2106 | "version": "4.5.0", 2107 | "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", 2108 | "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=", 2109 | "dev": true 2110 | }, 2111 | "lodash.map": { 2112 | "version": "4.6.0", 2113 | "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", 2114 | "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=", 2115 | "dev": true 2116 | }, 2117 | "lodash.memoize": { 2118 | "version": "3.0.4", 2119 | "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", 2120 | "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", 2121 | "dev": true 2122 | }, 2123 | "lodash.merge": { 2124 | "version": "4.6.2", 2125 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 2126 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 2127 | "dev": true 2128 | }, 2129 | "lodash.pick": { 2130 | "version": "4.4.0", 2131 | "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", 2132 | "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=", 2133 | "dev": true 2134 | }, 2135 | "lodash.reduce": { 2136 | "version": "4.6.0", 2137 | "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", 2138 | "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=", 2139 | "dev": true 2140 | }, 2141 | "lodash.reject": { 2142 | "version": "4.6.0", 2143 | "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", 2144 | "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=", 2145 | "dev": true 2146 | }, 2147 | "lodash.some": { 2148 | "version": "4.6.0", 2149 | "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", 2150 | "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=", 2151 | "dev": true 2152 | }, 2153 | "lodash.unescape": { 2154 | "version": "4.0.1", 2155 | "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", 2156 | "integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=", 2157 | "dev": true 2158 | }, 2159 | "lowercase-keys": { 2160 | "version": "1.0.1", 2161 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", 2162 | "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", 2163 | "dev": true 2164 | }, 2165 | "lru-cache": { 2166 | "version": "5.1.1", 2167 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", 2168 | "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", 2169 | "dev": true, 2170 | "requires": { 2171 | "yallist": "^3.0.2" 2172 | } 2173 | }, 2174 | "md5.js": { 2175 | "version": "1.3.5", 2176 | "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", 2177 | "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", 2178 | "dev": true, 2179 | "requires": { 2180 | "hash-base": "^3.0.0", 2181 | "inherits": "^2.0.1", 2182 | "safe-buffer": "^5.1.2" 2183 | } 2184 | }, 2185 | "mensch": { 2186 | "version": "0.3.4", 2187 | "resolved": "https://registry.npmjs.org/mensch/-/mensch-0.3.4.tgz", 2188 | "integrity": "sha512-IAeFvcOnV9V0Yk+bFhYR07O3yNina9ANIN5MoXBKYJ/RLYPurd2d0yw14MDhpr9/momp0WofT1bPUh3hkzdi/g==", 2189 | "dev": true 2190 | }, 2191 | "merge": { 2192 | "version": "1.2.1", 2193 | "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", 2194 | "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", 2195 | "dev": true 2196 | }, 2197 | "miller-rabin": { 2198 | "version": "4.0.1", 2199 | "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", 2200 | "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", 2201 | "dev": true, 2202 | "requires": { 2203 | "bn.js": "^4.0.0", 2204 | "brorand": "^1.0.1" 2205 | } 2206 | }, 2207 | "mime": { 2208 | "version": "2.4.4", 2209 | "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", 2210 | "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", 2211 | "dev": true 2212 | }, 2213 | "mime-db": { 2214 | "version": "1.40.0", 2215 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", 2216 | "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", 2217 | "dev": true 2218 | }, 2219 | "mime-types": { 2220 | "version": "2.1.24", 2221 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", 2222 | "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", 2223 | "dev": true, 2224 | "requires": { 2225 | "mime-db": "1.40.0" 2226 | } 2227 | }, 2228 | "mimer": { 2229 | "version": "1.0.0", 2230 | "resolved": "https://registry.npmjs.org/mimer/-/mimer-1.0.0.tgz", 2231 | "integrity": "sha512-4ZJvCzfcwsBgPbkKXUzGoVZMWjv8IDIygkGzVc7uUYhgnK0t2LmGxxjdgH1i+pn0/KQfB5F/VKUJlfyTSOFQjg==", 2232 | "dev": true 2233 | }, 2234 | "mimic-fn": { 2235 | "version": "2.1.0", 2236 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 2237 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", 2238 | "dev": true 2239 | }, 2240 | "mimic-response": { 2241 | "version": "1.0.1", 2242 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", 2243 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", 2244 | "dev": true 2245 | }, 2246 | "minimalistic-assert": { 2247 | "version": "1.0.1", 2248 | "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", 2249 | "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", 2250 | "dev": true 2251 | }, 2252 | "minimalistic-crypto-utils": { 2253 | "version": "1.0.1", 2254 | "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", 2255 | "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", 2256 | "dev": true 2257 | }, 2258 | "minimatch": { 2259 | "version": "3.0.4", 2260 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 2261 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 2262 | "dev": true, 2263 | "requires": { 2264 | "brace-expansion": "^1.1.7" 2265 | } 2266 | }, 2267 | "minimist": { 2268 | "version": "0.0.8", 2269 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 2270 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 2271 | "dev": true 2272 | }, 2273 | "mkdirp": { 2274 | "version": "0.5.1", 2275 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 2276 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 2277 | "dev": true, 2278 | "requires": { 2279 | "minimist": "0.0.8" 2280 | } 2281 | }, 2282 | "module-deps": { 2283 | "version": "6.2.1", 2284 | "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.1.tgz", 2285 | "integrity": "sha512-UnEn6Ah36Tu4jFiBbJVUtt0h+iXqxpLqDvPS8nllbw5RZFmNJ1+Mz5BjYnM9ieH80zyxHkARGLnMIHlPK5bu6A==", 2286 | "dev": true, 2287 | "requires": { 2288 | "JSONStream": "^1.0.3", 2289 | "browser-resolve": "^1.7.0", 2290 | "cached-path-relative": "^1.0.2", 2291 | "concat-stream": "~1.6.0", 2292 | "defined": "^1.0.0", 2293 | "detective": "^5.0.2", 2294 | "duplexer2": "^0.1.2", 2295 | "inherits": "^2.0.1", 2296 | "parents": "^1.0.0", 2297 | "readable-stream": "^2.0.2", 2298 | "resolve": "^1.4.0", 2299 | "stream-combiner2": "^1.1.1", 2300 | "subarg": "^1.0.0", 2301 | "through2": "^2.0.0", 2302 | "xtend": "^4.0.0" 2303 | } 2304 | }, 2305 | "ms": { 2306 | "version": "2.1.2", 2307 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 2308 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 2309 | "dev": true 2310 | }, 2311 | "multimatch": { 2312 | "version": "4.0.0", 2313 | "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz", 2314 | "integrity": "sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==", 2315 | "dev": true, 2316 | "requires": { 2317 | "@types/minimatch": "^3.0.3", 2318 | "array-differ": "^3.0.0", 2319 | "array-union": "^2.1.0", 2320 | "arrify": "^2.0.1", 2321 | "minimatch": "^3.0.4" 2322 | } 2323 | }, 2324 | "mute-stream": { 2325 | "version": "0.0.8", 2326 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", 2327 | "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", 2328 | "dev": true 2329 | }, 2330 | "nice-try": { 2331 | "version": "1.0.5", 2332 | "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", 2333 | "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", 2334 | "dev": true 2335 | }, 2336 | "node-fetch": { 2337 | "version": "2.6.0", 2338 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", 2339 | "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==", 2340 | "dev": true 2341 | }, 2342 | "node-forge": { 2343 | "version": "0.9.1", 2344 | "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.1.tgz", 2345 | "integrity": "sha512-G6RlQt5Sb4GMBzXvhfkeFmbqR6MzhtnT7VTHuLadjkii3rdYHNdw0m8zA4BTxVIh68FicCQ2NSUANpsqkr9jvQ==", 2346 | "dev": true 2347 | }, 2348 | "normalize-newline": { 2349 | "version": "3.0.0", 2350 | "resolved": "https://registry.npmjs.org/normalize-newline/-/normalize-newline-3.0.0.tgz", 2351 | "integrity": "sha1-HL6oBKukNgAfg5OKsh7AOdaa6dM=", 2352 | "dev": true 2353 | }, 2354 | "normalize-url": { 2355 | "version": "4.5.0", 2356 | "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", 2357 | "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", 2358 | "dev": true 2359 | }, 2360 | "nth-check": { 2361 | "version": "1.0.2", 2362 | "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", 2363 | "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", 2364 | "dev": true, 2365 | "requires": { 2366 | "boolbase": "~1.0.0" 2367 | } 2368 | }, 2369 | "oauth-sign": { 2370 | "version": "0.9.0", 2371 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", 2372 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", 2373 | "dev": true 2374 | }, 2375 | "object-assign": { 2376 | "version": "4.1.1", 2377 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 2378 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", 2379 | "dev": true 2380 | }, 2381 | "once": { 2382 | "version": "1.4.0", 2383 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2384 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 2385 | "dev": true, 2386 | "requires": { 2387 | "wrappy": "1" 2388 | } 2389 | }, 2390 | "onetime": { 2391 | "version": "5.1.0", 2392 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", 2393 | "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", 2394 | "dev": true, 2395 | "requires": { 2396 | "mimic-fn": "^2.1.0" 2397 | } 2398 | }, 2399 | "open": { 2400 | "version": "6.4.0", 2401 | "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", 2402 | "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", 2403 | "dev": true, 2404 | "requires": { 2405 | "is-wsl": "^1.1.0" 2406 | } 2407 | }, 2408 | "os-browserify": { 2409 | "version": "0.3.0", 2410 | "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", 2411 | "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", 2412 | "dev": true 2413 | }, 2414 | "os-homedir": { 2415 | "version": "1.0.2", 2416 | "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", 2417 | "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", 2418 | "dev": true 2419 | }, 2420 | "os-tmpdir": { 2421 | "version": "1.0.2", 2422 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 2423 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", 2424 | "dev": true 2425 | }, 2426 | "p-any": { 2427 | "version": "2.1.0", 2428 | "resolved": "https://registry.npmjs.org/p-any/-/p-any-2.1.0.tgz", 2429 | "integrity": "sha512-JAERcaMBLYKMq+voYw36+x5Dgh47+/o7yuv2oQYuSSUml4YeqJEFznBrY2UeEkoSHqBua6hz518n/PsowTYLLg==", 2430 | "dev": true, 2431 | "requires": { 2432 | "p-cancelable": "^2.0.0", 2433 | "p-some": "^4.0.0", 2434 | "type-fest": "^0.3.0" 2435 | }, 2436 | "dependencies": { 2437 | "p-cancelable": { 2438 | "version": "2.0.0", 2439 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.0.0.tgz", 2440 | "integrity": "sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg==", 2441 | "dev": true 2442 | }, 2443 | "type-fest": { 2444 | "version": "0.3.1", 2445 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", 2446 | "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", 2447 | "dev": true 2448 | } 2449 | } 2450 | }, 2451 | "p-cancelable": { 2452 | "version": "1.1.0", 2453 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", 2454 | "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", 2455 | "dev": true 2456 | }, 2457 | "p-finally": { 2458 | "version": "1.0.0", 2459 | "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", 2460 | "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", 2461 | "dev": true 2462 | }, 2463 | "p-limit": { 2464 | "version": "2.2.1", 2465 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", 2466 | "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", 2467 | "dev": true, 2468 | "requires": { 2469 | "p-try": "^2.0.0" 2470 | } 2471 | }, 2472 | "p-locate": { 2473 | "version": "4.1.0", 2474 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", 2475 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", 2476 | "dev": true, 2477 | "requires": { 2478 | "p-limit": "^2.2.0" 2479 | } 2480 | }, 2481 | "p-some": { 2482 | "version": "4.1.0", 2483 | "resolved": "https://registry.npmjs.org/p-some/-/p-some-4.1.0.tgz", 2484 | "integrity": "sha512-MF/HIbq6GeBqTrTIl5OJubzkGU+qfFhAFi0gnTAK6rgEIJIknEiABHOTtQu4e6JiXjIwuMPMUFQzyHh5QjCl1g==", 2485 | "dev": true, 2486 | "requires": { 2487 | "aggregate-error": "^3.0.0", 2488 | "p-cancelable": "^2.0.0" 2489 | }, 2490 | "dependencies": { 2491 | "p-cancelable": { 2492 | "version": "2.0.0", 2493 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.0.0.tgz", 2494 | "integrity": "sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg==", 2495 | "dev": true 2496 | } 2497 | } 2498 | }, 2499 | "p-timeout": { 2500 | "version": "3.2.0", 2501 | "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", 2502 | "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", 2503 | "dev": true, 2504 | "requires": { 2505 | "p-finally": "^1.0.0" 2506 | } 2507 | }, 2508 | "p-try": { 2509 | "version": "2.2.0", 2510 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 2511 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", 2512 | "dev": true 2513 | }, 2514 | "pako": { 2515 | "version": "1.0.10", 2516 | "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", 2517 | "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==", 2518 | "dev": true 2519 | }, 2520 | "parents": { 2521 | "version": "1.0.1", 2522 | "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", 2523 | "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", 2524 | "dev": true, 2525 | "requires": { 2526 | "path-platform": "~0.11.15" 2527 | } 2528 | }, 2529 | "parse-asn1": { 2530 | "version": "5.1.5", 2531 | "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", 2532 | "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", 2533 | "dev": true, 2534 | "requires": { 2535 | "asn1.js": "^4.0.0", 2536 | "browserify-aes": "^1.0.0", 2537 | "create-hash": "^1.1.0", 2538 | "evp_bytestokey": "^1.0.0", 2539 | "pbkdf2": "^3.0.3", 2540 | "safe-buffer": "^5.1.1" 2541 | } 2542 | }, 2543 | "parse-passwd": { 2544 | "version": "1.0.0", 2545 | "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", 2546 | "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", 2547 | "dev": true 2548 | }, 2549 | "path-browserify": { 2550 | "version": "0.0.1", 2551 | "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", 2552 | "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", 2553 | "dev": true 2554 | }, 2555 | "path-exists": { 2556 | "version": "4.0.0", 2557 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 2558 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 2559 | "dev": true 2560 | }, 2561 | "path-is-absolute": { 2562 | "version": "1.0.1", 2563 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2564 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 2565 | "dev": true 2566 | }, 2567 | "path-key": { 2568 | "version": "2.0.1", 2569 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", 2570 | "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", 2571 | "dev": true 2572 | }, 2573 | "path-parse": { 2574 | "version": "1.0.6", 2575 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", 2576 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", 2577 | "dev": true 2578 | }, 2579 | "path-platform": { 2580 | "version": "0.11.15", 2581 | "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", 2582 | "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", 2583 | "dev": true 2584 | }, 2585 | "pbkdf2": { 2586 | "version": "3.0.17", 2587 | "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", 2588 | "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", 2589 | "dev": true, 2590 | "requires": { 2591 | "create-hash": "^1.1.2", 2592 | "create-hmac": "^1.1.4", 2593 | "ripemd160": "^2.0.1", 2594 | "safe-buffer": "^5.0.1", 2595 | "sha.js": "^2.4.8" 2596 | } 2597 | }, 2598 | "performance-now": { 2599 | "version": "2.1.0", 2600 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 2601 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", 2602 | "dev": true 2603 | }, 2604 | "pluralize": { 2605 | "version": "8.0.0", 2606 | "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", 2607 | "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", 2608 | "dev": true 2609 | }, 2610 | "prepend-http": { 2611 | "version": "2.0.0", 2612 | "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", 2613 | "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", 2614 | "dev": true 2615 | }, 2616 | "process": { 2617 | "version": "0.11.10", 2618 | "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", 2619 | "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", 2620 | "dev": true 2621 | }, 2622 | "process-nextick-args": { 2623 | "version": "2.0.1", 2624 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 2625 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", 2626 | "dev": true 2627 | }, 2628 | "psl": { 2629 | "version": "1.4.0", 2630 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.4.0.tgz", 2631 | "integrity": "sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw==", 2632 | "dev": true 2633 | }, 2634 | "public-encrypt": { 2635 | "version": "4.0.3", 2636 | "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", 2637 | "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", 2638 | "dev": true, 2639 | "requires": { 2640 | "bn.js": "^4.1.0", 2641 | "browserify-rsa": "^4.0.0", 2642 | "create-hash": "^1.1.0", 2643 | "parse-asn1": "^5.0.0", 2644 | "randombytes": "^2.0.1", 2645 | "safe-buffer": "^5.1.2" 2646 | } 2647 | }, 2648 | "public-ip": { 2649 | "version": "3.2.0", 2650 | "resolved": "https://registry.npmjs.org/public-ip/-/public-ip-3.2.0.tgz", 2651 | "integrity": "sha512-DBq4o955zhrhESG4z6GkLN9mtY9NT/JOjEV8pvnYy3bjVQOQF0J5lJNwWLbEWwNstyNFJlY7JxCPFq4bdXSabw==", 2652 | "dev": true, 2653 | "requires": { 2654 | "dns-socket": "^4.2.0", 2655 | "got": "^9.6.0", 2656 | "is-ip": "^3.1.0" 2657 | } 2658 | }, 2659 | "pump": { 2660 | "version": "3.0.0", 2661 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 2662 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 2663 | "dev": true, 2664 | "requires": { 2665 | "end-of-stream": "^1.1.0", 2666 | "once": "^1.3.1" 2667 | } 2668 | }, 2669 | "punycode": { 2670 | "version": "1.4.1", 2671 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 2672 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", 2673 | "dev": true 2674 | }, 2675 | "qs": { 2676 | "version": "6.9.1", 2677 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.1.tgz", 2678 | "integrity": "sha512-Cxm7/SS/y/Z3MHWSxXb8lIFqgqBowP5JMlTUFyJN88y0SGQhVmZnqFK/PeuMX9LzUyWsqqhNxIyg0jlzq946yA==", 2679 | "dev": true 2680 | }, 2681 | "querystring": { 2682 | "version": "0.2.0", 2683 | "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", 2684 | "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", 2685 | "dev": true 2686 | }, 2687 | "querystring-es3": { 2688 | "version": "0.2.1", 2689 | "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", 2690 | "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", 2691 | "dev": true 2692 | }, 2693 | "randombytes": { 2694 | "version": "2.1.0", 2695 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 2696 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 2697 | "dev": true, 2698 | "requires": { 2699 | "safe-buffer": "^5.1.0" 2700 | } 2701 | }, 2702 | "randomfill": { 2703 | "version": "1.0.4", 2704 | "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", 2705 | "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", 2706 | "dev": true, 2707 | "requires": { 2708 | "randombytes": "^2.0.5", 2709 | "safe-buffer": "^5.1.0" 2710 | } 2711 | }, 2712 | "read-only-stream": { 2713 | "version": "2.0.0", 2714 | "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", 2715 | "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", 2716 | "dev": true, 2717 | "requires": { 2718 | "readable-stream": "^2.0.2" 2719 | } 2720 | }, 2721 | "readable-stream": { 2722 | "version": "2.3.6", 2723 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", 2724 | "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", 2725 | "dev": true, 2726 | "requires": { 2727 | "core-util-is": "~1.0.0", 2728 | "inherits": "~2.0.3", 2729 | "isarray": "~1.0.0", 2730 | "process-nextick-args": "~2.0.0", 2731 | "safe-buffer": "~5.1.1", 2732 | "string_decoder": "~1.1.1", 2733 | "util-deprecate": "~1.0.1" 2734 | }, 2735 | "dependencies": { 2736 | "safe-buffer": { 2737 | "version": "5.1.2", 2738 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 2739 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 2740 | "dev": true 2741 | }, 2742 | "string_decoder": { 2743 | "version": "1.1.1", 2744 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 2745 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 2746 | "dev": true, 2747 | "requires": { 2748 | "safe-buffer": "~5.1.0" 2749 | } 2750 | } 2751 | } 2752 | }, 2753 | "recursive-readdir": { 2754 | "version": "2.2.2", 2755 | "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", 2756 | "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", 2757 | "dev": true, 2758 | "requires": { 2759 | "minimatch": "3.0.4" 2760 | } 2761 | }, 2762 | "request": { 2763 | "version": "2.88.0", 2764 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", 2765 | "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", 2766 | "dev": true, 2767 | "requires": { 2768 | "aws-sign2": "~0.7.0", 2769 | "aws4": "^1.8.0", 2770 | "caseless": "~0.12.0", 2771 | "combined-stream": "~1.0.6", 2772 | "extend": "~3.0.2", 2773 | "forever-agent": "~0.6.1", 2774 | "form-data": "~2.3.2", 2775 | "har-validator": "~5.1.0", 2776 | "http-signature": "~1.2.0", 2777 | "is-typedarray": "~1.0.0", 2778 | "isstream": "~0.1.2", 2779 | "json-stringify-safe": "~5.0.1", 2780 | "mime-types": "~2.1.19", 2781 | "oauth-sign": "~0.9.0", 2782 | "performance-now": "^2.1.0", 2783 | "qs": "~6.5.2", 2784 | "safe-buffer": "^5.1.2", 2785 | "tough-cookie": "~2.4.3", 2786 | "tunnel-agent": "^0.6.0", 2787 | "uuid": "^3.3.2" 2788 | }, 2789 | "dependencies": { 2790 | "qs": { 2791 | "version": "6.5.2", 2792 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 2793 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", 2794 | "dev": true 2795 | } 2796 | } 2797 | }, 2798 | "resolve": { 2799 | "version": "1.12.0", 2800 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", 2801 | "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", 2802 | "dev": true, 2803 | "requires": { 2804 | "path-parse": "^1.0.6" 2805 | } 2806 | }, 2807 | "resolve-dir": { 2808 | "version": "0.1.1", 2809 | "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz", 2810 | "integrity": "sha1-shklmlYC+sXFxJatiUpujMQwJh4=", 2811 | "dev": true, 2812 | "requires": { 2813 | "expand-tilde": "^1.2.2", 2814 | "global-modules": "^0.2.3" 2815 | }, 2816 | "dependencies": { 2817 | "expand-tilde": { 2818 | "version": "1.2.2", 2819 | "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", 2820 | "integrity": "sha1-C4HrqJflo9MdHD0QL48BRB5VlEk=", 2821 | "dev": true, 2822 | "requires": { 2823 | "os-homedir": "^1.0.1" 2824 | } 2825 | } 2826 | } 2827 | }, 2828 | "resolve-file": { 2829 | "version": "0.3.0", 2830 | "resolved": "https://registry.npmjs.org/resolve-file/-/resolve-file-0.3.0.tgz", 2831 | "integrity": "sha1-EeH7RkVm06fFAMt+lIHo8LAKFO8=", 2832 | "dev": true, 2833 | "requires": { 2834 | "cwd": "^0.10.0", 2835 | "expand-tilde": "^2.0.2", 2836 | "extend-shallow": "^2.0.1", 2837 | "fs-exists-sync": "^0.1.0", 2838 | "homedir-polyfill": "^1.0.1", 2839 | "lazy-cache": "^2.0.2", 2840 | "resolve": "^1.2.0" 2841 | } 2842 | }, 2843 | "resolve-path": { 2844 | "version": "1.4.0", 2845 | "resolved": "https://registry.npmjs.org/resolve-path/-/resolve-path-1.4.0.tgz", 2846 | "integrity": "sha1-xL2p9e+y/OZSR4c6s2u02DT+Fvc=", 2847 | "dev": true, 2848 | "requires": { 2849 | "http-errors": "~1.6.2", 2850 | "path-is-absolute": "1.0.1" 2851 | } 2852 | }, 2853 | "responselike": { 2854 | "version": "1.0.2", 2855 | "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", 2856 | "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", 2857 | "dev": true, 2858 | "requires": { 2859 | "lowercase-keys": "^1.0.0" 2860 | } 2861 | }, 2862 | "restore-cursor": { 2863 | "version": "3.1.0", 2864 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", 2865 | "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", 2866 | "dev": true, 2867 | "requires": { 2868 | "onetime": "^5.1.0", 2869 | "signal-exit": "^3.0.2" 2870 | } 2871 | }, 2872 | "ripemd160": { 2873 | "version": "2.0.2", 2874 | "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", 2875 | "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", 2876 | "dev": true, 2877 | "requires": { 2878 | "hash-base": "^3.0.0", 2879 | "inherits": "^2.0.1" 2880 | } 2881 | }, 2882 | "run-async": { 2883 | "version": "2.3.0", 2884 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", 2885 | "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", 2886 | "dev": true, 2887 | "requires": { 2888 | "is-promise": "^2.1.0" 2889 | } 2890 | }, 2891 | "rxjs": { 2892 | "version": "6.5.3", 2893 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz", 2894 | "integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==", 2895 | "dev": true, 2896 | "requires": { 2897 | "tslib": "^1.9.0" 2898 | } 2899 | }, 2900 | "safe-buffer": { 2901 | "version": "5.2.0", 2902 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", 2903 | "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", 2904 | "dev": true 2905 | }, 2906 | "safer-buffer": { 2907 | "version": "2.1.2", 2908 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 2909 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 2910 | "dev": true 2911 | }, 2912 | "semver": { 2913 | "version": "5.7.1", 2914 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 2915 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 2916 | "dev": true 2917 | }, 2918 | "set-getter": { 2919 | "version": "0.1.0", 2920 | "resolved": "https://registry.npmjs.org/set-getter/-/set-getter-0.1.0.tgz", 2921 | "integrity": "sha1-12nBgsnVpR9AkUXy+6guXoboA3Y=", 2922 | "dev": true, 2923 | "requires": { 2924 | "to-object-path": "^0.3.0" 2925 | } 2926 | }, 2927 | "setprototypeof": { 2928 | "version": "1.1.0", 2929 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", 2930 | "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", 2931 | "dev": true 2932 | }, 2933 | "sha.js": { 2934 | "version": "2.4.11", 2935 | "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", 2936 | "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", 2937 | "dev": true, 2938 | "requires": { 2939 | "inherits": "^2.0.1", 2940 | "safe-buffer": "^5.0.1" 2941 | } 2942 | }, 2943 | "shasum": { 2944 | "version": "1.0.2", 2945 | "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", 2946 | "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", 2947 | "dev": true, 2948 | "requires": { 2949 | "json-stable-stringify": "~0.0.0", 2950 | "sha.js": "~2.4.4" 2951 | } 2952 | }, 2953 | "shasum-object": { 2954 | "version": "1.0.0", 2955 | "resolved": "https://registry.npmjs.org/shasum-object/-/shasum-object-1.0.0.tgz", 2956 | "integrity": "sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==", 2957 | "dev": true, 2958 | "requires": { 2959 | "fast-safe-stringify": "^2.0.7" 2960 | } 2961 | }, 2962 | "shebang-command": { 2963 | "version": "1.2.0", 2964 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", 2965 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", 2966 | "dev": true, 2967 | "requires": { 2968 | "shebang-regex": "^1.0.0" 2969 | } 2970 | }, 2971 | "shebang-regex": { 2972 | "version": "1.0.0", 2973 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", 2974 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", 2975 | "dev": true 2976 | }, 2977 | "shell-quote": { 2978 | "version": "1.7.2", 2979 | "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", 2980 | "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", 2981 | "dev": true 2982 | }, 2983 | "signal-exit": { 2984 | "version": "3.0.2", 2985 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 2986 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", 2987 | "dev": true 2988 | }, 2989 | "simple-concat": { 2990 | "version": "1.0.0", 2991 | "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", 2992 | "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=", 2993 | "dev": true 2994 | }, 2995 | "slick": { 2996 | "version": "1.12.2", 2997 | "resolved": "https://registry.npmjs.org/slick/-/slick-1.12.2.tgz", 2998 | "integrity": "sha1-vQSN23TefRymkV+qSldXCzVQwtc=", 2999 | "dev": true 3000 | }, 3001 | "source-map": { 3002 | "version": "0.5.7", 3003 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 3004 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 3005 | "dev": true 3006 | }, 3007 | "source-map-support": { 3008 | "version": "0.5.16", 3009 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", 3010 | "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", 3011 | "dev": true, 3012 | "requires": { 3013 | "buffer-from": "^1.0.0", 3014 | "source-map": "^0.6.0" 3015 | }, 3016 | "dependencies": { 3017 | "source-map": { 3018 | "version": "0.6.1", 3019 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 3020 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 3021 | "dev": true 3022 | } 3023 | } 3024 | }, 3025 | "split-lines": { 3026 | "version": "2.0.0", 3027 | "resolved": "https://registry.npmjs.org/split-lines/-/split-lines-2.0.0.tgz", 3028 | "integrity": "sha512-gaIdhbqxkB5/VflPXsJwZvEzh/kdwiRPF9iqpkxX4us+lzB8INedFwjCyo6vwuz5x2Ddlnav2zh270CEjCG8mA==", 3029 | "dev": true 3030 | }, 3031 | "sshpk": { 3032 | "version": "1.16.1", 3033 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", 3034 | "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", 3035 | "dev": true, 3036 | "requires": { 3037 | "asn1": "~0.2.3", 3038 | "assert-plus": "^1.0.0", 3039 | "bcrypt-pbkdf": "^1.0.0", 3040 | "dashdash": "^1.12.0", 3041 | "ecc-jsbn": "~0.1.1", 3042 | "getpass": "^0.1.1", 3043 | "jsbn": "~0.1.0", 3044 | "safer-buffer": "^2.0.2", 3045 | "tweetnacl": "~0.14.0" 3046 | } 3047 | }, 3048 | "statuses": { 3049 | "version": "1.5.0", 3050 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 3051 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", 3052 | "dev": true 3053 | }, 3054 | "stream-browserify": { 3055 | "version": "2.0.2", 3056 | "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", 3057 | "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", 3058 | "dev": true, 3059 | "requires": { 3060 | "inherits": "~2.0.1", 3061 | "readable-stream": "^2.0.2" 3062 | } 3063 | }, 3064 | "stream-combiner2": { 3065 | "version": "1.1.1", 3066 | "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", 3067 | "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", 3068 | "dev": true, 3069 | "requires": { 3070 | "duplexer2": "~0.1.0", 3071 | "readable-stream": "^2.0.2" 3072 | } 3073 | }, 3074 | "stream-http": { 3075 | "version": "3.1.0", 3076 | "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.1.0.tgz", 3077 | "integrity": "sha512-cuB6RgO7BqC4FBYzmnvhob5Do3wIdIsXAgGycHJnW+981gHqoYcYz9lqjJrk8WXRddbwPuqPYRl+bag6mYv4lw==", 3078 | "dev": true, 3079 | "requires": { 3080 | "builtin-status-codes": "^3.0.0", 3081 | "inherits": "^2.0.1", 3082 | "readable-stream": "^3.0.6", 3083 | "xtend": "^4.0.0" 3084 | }, 3085 | "dependencies": { 3086 | "readable-stream": { 3087 | "version": "3.4.0", 3088 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", 3089 | "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", 3090 | "dev": true, 3091 | "requires": { 3092 | "inherits": "^2.0.3", 3093 | "string_decoder": "^1.1.1", 3094 | "util-deprecate": "^1.0.1" 3095 | } 3096 | } 3097 | } 3098 | }, 3099 | "stream-splicer": { 3100 | "version": "2.0.1", 3101 | "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz", 3102 | "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==", 3103 | "dev": true, 3104 | "requires": { 3105 | "inherits": "^2.0.1", 3106 | "readable-stream": "^2.0.2" 3107 | } 3108 | }, 3109 | "string-width": { 3110 | "version": "4.2.0", 3111 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", 3112 | "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", 3113 | "dev": true, 3114 | "requires": { 3115 | "emoji-regex": "^8.0.0", 3116 | "is-fullwidth-code-point": "^3.0.0", 3117 | "strip-ansi": "^6.0.0" 3118 | }, 3119 | "dependencies": { 3120 | "strip-ansi": { 3121 | "version": "6.0.0", 3122 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 3123 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 3124 | "dev": true, 3125 | "requires": { 3126 | "ansi-regex": "^5.0.0" 3127 | } 3128 | } 3129 | } 3130 | }, 3131 | "string_decoder": { 3132 | "version": "1.3.0", 3133 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 3134 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 3135 | "dev": true, 3136 | "requires": { 3137 | "safe-buffer": "~5.2.0" 3138 | } 3139 | }, 3140 | "strip-ansi": { 3141 | "version": "5.2.0", 3142 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 3143 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 3144 | "dev": true, 3145 | "requires": { 3146 | "ansi-regex": "^4.1.0" 3147 | }, 3148 | "dependencies": { 3149 | "ansi-regex": { 3150 | "version": "4.1.0", 3151 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 3152 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", 3153 | "dev": true 3154 | } 3155 | } 3156 | }, 3157 | "strip-bom": { 3158 | "version": "4.0.0", 3159 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", 3160 | "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", 3161 | "dev": true 3162 | }, 3163 | "subarg": { 3164 | "version": "1.0.0", 3165 | "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", 3166 | "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", 3167 | "dev": true, 3168 | "requires": { 3169 | "minimist": "^1.1.0" 3170 | }, 3171 | "dependencies": { 3172 | "minimist": { 3173 | "version": "1.2.0", 3174 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 3175 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", 3176 | "dev": true 3177 | } 3178 | } 3179 | }, 3180 | "supports-color": { 3181 | "version": "5.5.0", 3182 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 3183 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 3184 | "dev": true, 3185 | "requires": { 3186 | "has-flag": "^3.0.0" 3187 | } 3188 | }, 3189 | "syntax-error": { 3190 | "version": "1.4.0", 3191 | "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", 3192 | "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", 3193 | "dev": true, 3194 | "requires": { 3195 | "acorn-node": "^1.2.0" 3196 | } 3197 | }, 3198 | "terser": { 3199 | "version": "3.17.0", 3200 | "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", 3201 | "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", 3202 | "dev": true, 3203 | "requires": { 3204 | "commander": "^2.19.0", 3205 | "source-map": "~0.6.1", 3206 | "source-map-support": "~0.5.10" 3207 | }, 3208 | "dependencies": { 3209 | "commander": { 3210 | "version": "2.20.3", 3211 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 3212 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 3213 | "dev": true 3214 | }, 3215 | "source-map": { 3216 | "version": "0.6.1", 3217 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 3218 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 3219 | "dev": true 3220 | } 3221 | } 3222 | }, 3223 | "through": { 3224 | "version": "2.3.8", 3225 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 3226 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", 3227 | "dev": true 3228 | }, 3229 | "through2": { 3230 | "version": "2.0.5", 3231 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", 3232 | "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", 3233 | "dev": true, 3234 | "requires": { 3235 | "readable-stream": "~2.3.6", 3236 | "xtend": "~4.0.1" 3237 | } 3238 | }, 3239 | "timers-browserify": { 3240 | "version": "1.4.2", 3241 | "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", 3242 | "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", 3243 | "dev": true, 3244 | "requires": { 3245 | "process": "~0.11.0" 3246 | } 3247 | }, 3248 | "tmp": { 3249 | "version": "0.0.33", 3250 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", 3251 | "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", 3252 | "dev": true, 3253 | "requires": { 3254 | "os-tmpdir": "~1.0.2" 3255 | } 3256 | }, 3257 | "to-object-path": { 3258 | "version": "0.3.0", 3259 | "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", 3260 | "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", 3261 | "dev": true, 3262 | "requires": { 3263 | "kind-of": "^3.0.2" 3264 | } 3265 | }, 3266 | "to-readable-stream": { 3267 | "version": "1.0.0", 3268 | "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", 3269 | "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", 3270 | "dev": true 3271 | }, 3272 | "tough-cookie": { 3273 | "version": "2.4.3", 3274 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", 3275 | "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", 3276 | "dev": true, 3277 | "requires": { 3278 | "psl": "^1.1.24", 3279 | "punycode": "^1.4.1" 3280 | } 3281 | }, 3282 | "ts2gas": { 3283 | "version": "3.4.4", 3284 | "resolved": "https://registry.npmjs.org/ts2gas/-/ts2gas-3.4.4.tgz", 3285 | "integrity": "sha512-u49TaxHUn+y88XqAJSyun488Yc7oqjZUCi/swOT1OP3qiHa/wJTeUH68842US+3OXxKk/As5SRmUHfChTcG3Ng==", 3286 | "dev": true, 3287 | "requires": { 3288 | "typescript": "^3.4.4" 3289 | } 3290 | }, 3291 | "tslib": { 3292 | "version": "1.10.0", 3293 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", 3294 | "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", 3295 | "dev": true 3296 | }, 3297 | "tty-browserify": { 3298 | "version": "0.0.1", 3299 | "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", 3300 | "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", 3301 | "dev": true 3302 | }, 3303 | "tunnel-agent": { 3304 | "version": "0.6.0", 3305 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 3306 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 3307 | "dev": true, 3308 | "requires": { 3309 | "safe-buffer": "^5.0.1" 3310 | } 3311 | }, 3312 | "tweetnacl": { 3313 | "version": "0.14.5", 3314 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 3315 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", 3316 | "dev": true 3317 | }, 3318 | "type-fest": { 3319 | "version": "0.5.2", 3320 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz", 3321 | "integrity": "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==", 3322 | "dev": true 3323 | }, 3324 | "typedarray": { 3325 | "version": "0.0.6", 3326 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 3327 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", 3328 | "dev": true 3329 | }, 3330 | "typescript": { 3331 | "version": "3.7.2", 3332 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.2.tgz", 3333 | "integrity": "sha512-ml7V7JfiN2Xwvcer+XAf2csGO1bPBdRbFCkYBczNZggrBZ9c7G3riSUeJmqEU5uOtXNPMhE3n+R4FA/3YOAWOQ==", 3334 | "dev": true 3335 | }, 3336 | "uglify-es": { 3337 | "version": "3.3.9", 3338 | "resolved": "https://unpm.uberinternal.com/uglify-es/-/uglify-es-3.3.9.tgz", 3339 | "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", 3340 | "dev": true, 3341 | "requires": { 3342 | "commander": "~2.13.0", 3343 | "source-map": "~0.6.1" 3344 | }, 3345 | "dependencies": { 3346 | "commander": { 3347 | "version": "2.13.0", 3348 | "resolved": "https://unpm.uberinternal.com/commander/-/commander-2.13.0.tgz", 3349 | "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", 3350 | "dev": true 3351 | }, 3352 | "source-map": { 3353 | "version": "0.6.1", 3354 | "resolved": "https://unpm.uberinternal.com/source-map/-/source-map-0.6.1.tgz", 3355 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 3356 | "dev": true 3357 | } 3358 | } 3359 | }, 3360 | "uglifyify": { 3361 | "version": "5.0.2", 3362 | "resolved": "https://registry.npmjs.org/uglifyify/-/uglifyify-5.0.2.tgz", 3363 | "integrity": "sha512-NcSk6pgoC+IgwZZ2tVLVHq+VNKSvLPlLkF5oUiHPVOJI0s/OlSVYEGXG9PCAH0hcyFZLyvt4KBdPAQBRlVDn1Q==", 3364 | "dev": true, 3365 | "requires": { 3366 | "convert-source-map": "~1.1.0", 3367 | "minimatch": "^3.0.2", 3368 | "terser": "^3.7.5", 3369 | "through": "~2.3.4", 3370 | "xtend": "^4.0.1" 3371 | } 3372 | }, 3373 | "umd": { 3374 | "version": "3.0.3", 3375 | "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", 3376 | "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", 3377 | "dev": true 3378 | }, 3379 | "undeclared-identifiers": { 3380 | "version": "1.1.3", 3381 | "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", 3382 | "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", 3383 | "dev": true, 3384 | "requires": { 3385 | "acorn-node": "^1.3.0", 3386 | "dash-ast": "^1.0.0", 3387 | "get-assigned-identifiers": "^1.2.0", 3388 | "simple-concat": "^1.0.0", 3389 | "xtend": "^4.0.1" 3390 | } 3391 | }, 3392 | "universalify": { 3393 | "version": "0.1.2", 3394 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 3395 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", 3396 | "dev": true 3397 | }, 3398 | "uri-js": { 3399 | "version": "4.2.2", 3400 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", 3401 | "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", 3402 | "dev": true, 3403 | "requires": { 3404 | "punycode": "^2.1.0" 3405 | }, 3406 | "dependencies": { 3407 | "punycode": { 3408 | "version": "2.1.1", 3409 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 3410 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 3411 | "dev": true 3412 | } 3413 | } 3414 | }, 3415 | "url": { 3416 | "version": "0.11.0", 3417 | "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", 3418 | "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", 3419 | "dev": true, 3420 | "requires": { 3421 | "punycode": "1.3.2", 3422 | "querystring": "0.2.0" 3423 | }, 3424 | "dependencies": { 3425 | "punycode": { 3426 | "version": "1.3.2", 3427 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", 3428 | "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", 3429 | "dev": true 3430 | } 3431 | } 3432 | }, 3433 | "url-parse-lax": { 3434 | "version": "3.0.0", 3435 | "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", 3436 | "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", 3437 | "dev": true, 3438 | "requires": { 3439 | "prepend-http": "^2.0.0" 3440 | } 3441 | }, 3442 | "url-template": { 3443 | "version": "2.0.8", 3444 | "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", 3445 | "integrity": "sha1-/FZaPMy/93MMd19WQflVV5FDnyE=", 3446 | "dev": true 3447 | }, 3448 | "util": { 3449 | "version": "0.10.4", 3450 | "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", 3451 | "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", 3452 | "dev": true, 3453 | "requires": { 3454 | "inherits": "2.0.3" 3455 | } 3456 | }, 3457 | "util-deprecate": { 3458 | "version": "1.0.2", 3459 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 3460 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 3461 | "dev": true 3462 | }, 3463 | "uuid": { 3464 | "version": "3.3.3", 3465 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", 3466 | "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==", 3467 | "dev": true 3468 | }, 3469 | "valid-data-url": { 3470 | "version": "2.0.0", 3471 | "resolved": "https://registry.npmjs.org/valid-data-url/-/valid-data-url-2.0.0.tgz", 3472 | "integrity": "sha512-dyCZnv3aCey7yfTgIqdZanKl7xWAEEKCbgmR7SKqyK6QT/Z07ROactrgD1eA37C69ODRj7rNOjzKWVPh0EUjBA==", 3473 | "dev": true 3474 | }, 3475 | "verror": { 3476 | "version": "1.10.0", 3477 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 3478 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 3479 | "dev": true, 3480 | "requires": { 3481 | "assert-plus": "^1.0.0", 3482 | "core-util-is": "1.0.2", 3483 | "extsprintf": "^1.2.0" 3484 | } 3485 | }, 3486 | "vm-browserify": { 3487 | "version": "1.1.2", 3488 | "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", 3489 | "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", 3490 | "dev": true 3491 | }, 3492 | "watch": { 3493 | "version": "1.0.2", 3494 | "resolved": "https://registry.npmjs.org/watch/-/watch-1.0.2.tgz", 3495 | "integrity": "sha1-NApxe952Vyb6CqB9ch4BR6VR3ww=", 3496 | "dev": true, 3497 | "requires": { 3498 | "exec-sh": "^0.2.0", 3499 | "minimist": "^1.2.0" 3500 | }, 3501 | "dependencies": { 3502 | "minimist": { 3503 | "version": "1.2.0", 3504 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 3505 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", 3506 | "dev": true 3507 | } 3508 | } 3509 | }, 3510 | "web-resource-inliner": { 3511 | "version": "4.3.3", 3512 | "resolved": "https://registry.npmjs.org/web-resource-inliner/-/web-resource-inliner-4.3.3.tgz", 3513 | "integrity": "sha512-Qk19pohqZs3SoFUW4ZlOHlM8hsOnXhTpCrQ16b1qtJtKzJgO7NZLGP+/lcb2g3hWDQD39/LE/JYOn1Sjy7tn1A==", 3514 | "dev": true, 3515 | "requires": { 3516 | "async": "^3.1.0", 3517 | "chalk": "^2.4.2", 3518 | "datauri": "^2.0.0", 3519 | "htmlparser2": "^3.9.2", 3520 | "lodash.unescape": "^4.0.1", 3521 | "request": "^2.78.0", 3522 | "safer-buffer": "^2.1.2", 3523 | "valid-data-url": "^2.0.0", 3524 | "xtend": "^4.0.2" 3525 | } 3526 | }, 3527 | "which": { 3528 | "version": "1.3.1", 3529 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 3530 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 3531 | "dev": true, 3532 | "requires": { 3533 | "isexe": "^2.0.0" 3534 | } 3535 | }, 3536 | "wrappy": { 3537 | "version": "1.0.2", 3538 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3539 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 3540 | "dev": true 3541 | }, 3542 | "xtend": { 3543 | "version": "4.0.2", 3544 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 3545 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", 3546 | "dev": true 3547 | }, 3548 | "yallist": { 3549 | "version": "3.1.1", 3550 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", 3551 | "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", 3552 | "dev": true 3553 | } 3554 | } 3555 | } 3556 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "code-blocks", 3 | "version": "1.4.2", 4 | "repository": "https://github.com/alexwforsythe/code-blocks", 5 | "license": "MIT", 6 | "engines": { 7 | "node": ">=4.2.0" 8 | }, 9 | "devDependencies": { 10 | "@google/clasp": "2.3.0", 11 | "@types/google-apps-script": "1.0.2", 12 | "browserify": "16.5.0", 13 | "clean-css-cli": "4.3.0", 14 | "highlight.js": "9.16.2", 15 | "highlightjs-graphql": "^1.0.2", 16 | "jquery": "3.4.1", 17 | "juice": "5.2.0", 18 | "uglify-es": "3.3.9", 19 | "uglifyify": "5.0.2" 20 | }, 21 | "scripts": { 22 | "clean": "rm -rf dist/*", 23 | "build:gas": "./build.sh gas", 24 | "build:js": "./build.sh js", 25 | "build:static": "./build.sh static", 26 | "build": "npm run build:gas && npm run build:js && npm run build:static", 27 | "pull": "clasp pull", 28 | "pushOnly": "clasp push", 29 | "push:js": "npm run build:js && npm run pushOnly", 30 | "push:gas": "npm run build:gas && npm run pushOnly", 31 | "prepush": "npm run clean && npm run build", 32 | "push": "npm run pushOnly" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /privacy-policy.md: -------------------------------------------------------------------------------- 1 | # Privacy Policy 2 | 3 | Your privacy is important to us. It is Code Blocks' policy to respect your privacy regarding any information we may collect from you through our app, Code Blocks. 4 | 5 | We only ask for personal information when we truly need it to provide a service to you. We collect it by fair and lawful means, with your knowledge and consent. We also let you know why we’re collecting it and how it will be used. 6 | 7 | We only retain collected information for as long as necessary to provide you with your requested service. What data we store, we’ll protect within commercially acceptable means to prevent loss and theft, as well as unauthorized access, disclosure, copying, use or modification. 8 | 9 | We don’t share any personally identifying information publicly or with third-parties, except when required to by law. 10 | 11 | Our app may link to external sites that are not operated by us. Please be aware that we have no control over the content and practices of these sites, and cannot accept responsibility or liability for their respective privacy policies. 12 | 13 | You are free to refuse our request for your personal information, with the understanding that we may be unable to provide you with some of your desired services. 14 | 15 | Your continued use of our website will be regarded as acceptance of our practices around privacy and personal information. If you have any questions about how we handle user data and personal information, feel free to contact us. 16 | This policy is effective as of 28 October 2019. 17 | 18 | --- 19 | 20 | [Homepage](https://www.alexwforsythe.com/code-blocks/) | [G Suite Marketplace](https://chrome.google.com/webstore/detail/code-blocks/ebieibfdjgmmimpldgengceekpfefmfd) | [Privacy Policy](https://www.alexwforsythe.com/code-blocks/privacy-policy) | [Terms of Service](https://www.alexwforsythe.com/code-blocks/terms-of-service) 21 | -------------------------------------------------------------------------------- /server/colors.js: -------------------------------------------------------------------------------- 1 | var rgbPattern = /^rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/i; 2 | 3 | /** 4 | * Converts a color of type RGB or any variety of hex to a hex string 5 | * representation of that color. This function is used to get hex colors to 6 | * use in HTML tags. 7 | * 8 | * @param {string} color as RGB or hex 9 | * @returns {string} color as six-digit hex, e.g. #0000ff 10 | */ 11 | function colorToHex(color) { 12 | color = color.toString(); 13 | 14 | var start = color.indexOf('#'); 15 | if (start !== -1) { 16 | color = color.slice(start); 17 | if (color.length === 7) { 18 | return color; 19 | } 20 | 21 | color = color.substr(0, 7); 22 | return padHex(color); 23 | } 24 | 25 | var rgb = color.match(rgbPattern); 26 | if (rgb) { 27 | color = rgb.slice(1, 4).reduce(function toBase16(result, i) { 28 | return result + parseInt(i, 10).toString(16); 29 | }, ''); 30 | 31 | return padHex(color); 32 | } 33 | 34 | return colors[color]; 35 | } 36 | 37 | /** 38 | * @param {string} hex color as hex 39 | * @returns {string} color as six-digit hex, e.g. #0000ff 40 | */ 41 | function padHex(hex) { 42 | if (hex.indexOf('#') === 0) { 43 | hex = hex.slice(1); 44 | } 45 | 46 | if (hex.length === 3) { 47 | // this is a thing: 48 | // https://en.wikipedia.org/wiki/Web_colors#Shorthand_hexadecimal_form 49 | var expanded = hex.split('').reduce(function expand(result, c) { 50 | return result + c + c; 51 | }, ''); 52 | 53 | return '#' + expanded; 54 | } 55 | 56 | var zeros = new Array(6 - hex.length + 1).join('0'); 57 | return '#' + zeros + hex; 58 | } 59 | 60 | var colors = { 61 | aliceblue: '#f0f8ff', 62 | antiquewhite: '#faebd7', 63 | aqua: '#00ffff', 64 | aquamarine: '#7fffd4', 65 | azure: '#f0ffff', 66 | beige: '#f5f5dc', 67 | bisque: '#ffe4c4', 68 | black: '#000000', 69 | blanchedalmond: '#ffebcd', 70 | blue: '#0000ff', 71 | blueviolet: '#8a2be2', 72 | brown: '#a52a2a', 73 | burlywood: '#deb887', 74 | cadetblue: '#5f9ea0', 75 | chartreuse: '#7fff00', 76 | chocolate: '#d2691e', 77 | coral: '#ff7f50', 78 | cornflowerblue: '#6495ed', 79 | cornsilk: '#fff8dc', 80 | crimson: '#dc143c', 81 | cyan: '#00ffff', 82 | darkblue: '#00008b', 83 | darkcyan: '#008b8b', 84 | darkgoldenrod: '#b8860b', 85 | darkgray: '#a9a9a9', 86 | darkgreen: '#006400', 87 | darkkhaki: '#bdb76b', 88 | darkmagenta: '#8b008b', 89 | darkolivegreen: '#556b2f', 90 | darkorange: '#ff8c00', 91 | darkorchid: '#9932cc', 92 | darkred: '#8b0000', 93 | darksalmon: '#e9967a', 94 | darkseagreen: '#8fbc8f', 95 | darkslateblue: '#483d8b', 96 | darkslategray: '#2f4f4f', 97 | darkturquoise: '#00ced1', 98 | darkviolet: '#9400d3', 99 | deeppink: '#ff1493', 100 | deepskyblue: '#00bfff', 101 | dimgray: '#696969', 102 | dodgerblue: '#1e90ff', 103 | firebrick: '#b22222', 104 | floralwhite: '#fffaf0', 105 | forestgreen: '#228b22', 106 | fuchsia: '#ff00ff', 107 | gainsboro: '#dcdcdc', 108 | ghostwhite: '#f8f8ff', 109 | gold: '#ffd700', 110 | goldenrod: '#daa520', 111 | gray: '#808080', 112 | green: '#008000', 113 | greenyellow: '#adff2f', 114 | honeydew: '#f0fff0', 115 | hotpink: '#ff69b4', 116 | indianred : '#cd5c5c', 117 | indigo: '#4b0082', 118 | ivory: '#fffff0', 119 | khaki: '#f0e68c', 120 | lavender: '#e6e6fa', 121 | lavenderblush: '#fff0f5', 122 | lawngreen: '#7cfc00', 123 | lemonchiffon: '#fffacd', 124 | lightblue: '#add8e6', 125 | lightcoral: '#f08080', 126 | lightcyan: '#e0ffff', 127 | lightgoldenrodyellow: '#fafad2', 128 | lightgrey: '#d3d3d3', 129 | lightgreen: '#90ee90', 130 | lightpink: '#ffb6c1', 131 | lightsalmon: '#ffa07a', 132 | lightseagreen: '#20b2aa', 133 | lightskyblue: '#87cefa', 134 | lightslategray: '#778899', 135 | lightsteelblue: '#b0c4de', 136 | lightyellow: '#ffffe0', 137 | lime: '#00ff00', 138 | limegreen: '#32cd32', 139 | linen: '#faf0e6', 140 | magenta: '#ff00ff', 141 | maroon: '#800000', 142 | mediumaquamarine: '#66cdaa', 143 | mediumblue: '#0000cd', 144 | mediumorchid: '#ba55d3', 145 | mediumpurple: '#9370d8', 146 | mediumseagreen: '#3cb371', 147 | mediumslateblue: '#7b68ee', 148 | mediumspringgreen: '#00fa9a', 149 | mediumturquoise: '#48d1cc', 150 | mediumvioletred: '#c71585', 151 | midnightblue: '#191970', 152 | mintcream: '#f5fffa', 153 | mistyrose: '#ffe4e1', 154 | moccasin: '#ffe4b5', 155 | navajowhite: '#ffdead', 156 | navy: '#000080', 157 | oldlace: '#fdf5e6', 158 | olive: '#808000', 159 | olivedrab: '#6b8e23', 160 | orange: '#ffa500', 161 | orangered: '#ff4500', 162 | orchid: '#da70d6', 163 | palegoldenrod: '#eee8aa', 164 | palegreen: '#98fb98', 165 | paleturquoise: '#afeeee', 166 | palevioletred: '#d87093', 167 | papayawhip: '#ffefd5', 168 | peachpuff: '#ffdab9', 169 | peru: '#cd853f', 170 | pink: '#ffc0cb', 171 | plum: '#dda0dd', 172 | powderblue: '#b0e0e6', 173 | purple: '#800080', 174 | red: '#ff0000', 175 | rosybrown: '#bc8f8f', 176 | royalblue: '#4169e1', 177 | saddlebrown: '#8b4513', 178 | salmon: '#fa8072', 179 | sandybrown: '#f4a460', 180 | seagreen: '#2e8b57', 181 | seashell: '#fff5ee', 182 | sienna: '#a0522d', 183 | silver: '#c0c0c0', 184 | skyblue: '#87ceeb', 185 | slateblue: '#6a5acd', 186 | slategray: '#708090', 187 | snow: '#fffafa', 188 | springgreen: '#00ff7f', 189 | steelblue: '#4682b4', 190 | tan: '#d2b48c', 191 | teal: '#008080', 192 | thistle: '#d8bfd8', 193 | tomato: '#ff6347', 194 | turquoise: '#40e0d0', 195 | violet: '#ee82ee', 196 | wheat: '#f5deb3', 197 | white: '#ffffff', 198 | whitesmoke: '#f5f5f5', 199 | yellow: '#ffff00', 200 | yellowgreen: '#9acd32' 201 | }; 202 | -------------------------------------------------------------------------------- /server/constants.js: -------------------------------------------------------------------------------- 1 | var constants = { 2 | title: 'Code Blocks', 3 | cache: { 4 | ttl: 14400, // in seconds 5 | previewText: 'preview_text' 6 | }, 7 | errors: { 8 | insert: 'Can\'t insert here.', 9 | getUserPreferences: 'Couldn\'t get user preferences.', 10 | selectText: 'Please select some text.', 11 | themeNotFound: 'Couldn\'t get theme.', 12 | getSelection: 'Couldn\'t get selection.', 13 | multipleBlocks: 'Can\'t format multiple blocks.' 14 | }, 15 | themes: { 16 | base: 'default' 17 | }, 18 | document: { 19 | font: 'Consolas', 20 | /** 21 | * A map of CSS attributes to document attributes. 22 | */ 23 | docAttrs: { 24 | background: DocumentApp.Attribute.BACKGROUND_COLOR, 25 | bold: DocumentApp.Attribute.BOLD, 26 | bolder: DocumentApp.Attribute.BOLD, 27 | '700': DocumentApp.Attribute.BOLD, // juice transforms bold to 700 28 | normal: undefined, // to reset bold 29 | '400': undefined, 30 | color: DocumentApp.Attribute.FOREGROUND_COLOR, 31 | italic: DocumentApp.Attribute.ITALIC, 32 | 'line-through': DocumentApp.Attribute.STRIKETHROUGH, 33 | underline: DocumentApp.Attribute.UNDERLINE 34 | }, 35 | cssAttrs: { 36 | fontWeight: 'font-weight', 37 | fontStyle: 'font-style', 38 | textDecoration: 'text-decoration', 39 | background: 'background', 40 | color: 'color' 41 | } 42 | } 43 | }; 44 | -------------------------------------------------------------------------------- /server/document.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Gets the user's current selection if it exists. If there is no selection 3 | * but the cursor is in a table cell, sets the user's selection to the entire 4 | * cell and returns it. Otherwise, throws an error. 5 | * 6 | * @returns {GoogleAppsScript.Document.Range} 7 | */ 8 | function getSelection() { 9 | var selection = DocumentApp.getActiveDocument().getSelection(); 10 | 11 | if (selection) { 12 | // highlighting multiple cells is not supported 13 | if (hasMultipleCells(selection)) { 14 | throw constants.errors.multipleBlocks; 15 | } 16 | return selection; 17 | } 18 | 19 | // if the cursor is already in a cell, just select it for the user 20 | var document = DocumentApp.getActiveDocument(); 21 | var container = document 22 | .getCursor() 23 | .getElement() 24 | .getParent(); 25 | 26 | if (!isCell(container)) { 27 | container = container.getParent(); 28 | } 29 | if (!isCell(container)) { 30 | throw constants.errors.selectText; 31 | } 32 | 33 | selection = document 34 | .newRange() 35 | .addElement(container) 36 | .build(); 37 | 38 | document.setSelection(selection); 39 | 40 | return selection; 41 | } 42 | 43 | /** 44 | * Gets the text the user has selected. If there is no selection, 45 | * this function displays an error message. 46 | * 47 | * @param {GoogleAppsScript.Document.Range} selection 48 | * @return {string} the selected text 49 | */ 50 | function getTextFromSelection(selection) { 51 | var elements = selection.getRangeElements(); 52 | try { 53 | var result = elements.map(function (e) { 54 | var element = e.getElement(); 55 | var text = element.asText().getText(); 56 | 57 | if (e.isPartial()) { 58 | var startIndex = e.getStartOffset(); 59 | var endIndex = e.getEndOffsetInclusive(); 60 | return text.slice(startIndex, endIndex + 1); 61 | } else if (element.editAsText) { 62 | return text; 63 | } 64 | }); 65 | } catch (err) { 66 | logError(constants.errors.getSelection, err); 67 | throw constants.errors.getSelection; 68 | } 69 | 70 | if (!result) { 71 | throw constants.errors.selectText; 72 | } 73 | 74 | return result.join('\n'); 75 | } 76 | 77 | /** 78 | * Replaces the current selection with the provided HTML. This is gnarly. 79 | * 80 | * @param {GoogleAppsScript.Document.Range} selection 81 | * @param {string} html 82 | * @param {boolean} noBackground 83 | */ 84 | function replaceSelection(selection, html, noBackground) { 85 | var document = DocumentApp.getActiveDocument(); 86 | var body = document.getBody(); 87 | 88 | var block = XmlService.parse(html); 89 | var root = block.getRootElement(); 90 | 91 | var replaced = false; 92 | var ranges = selection.getRangeElements(); 93 | for (var i = ranges.length - 1; i >= 0; i--) { 94 | var range = ranges[i]; 95 | var element = range.getElement(); 96 | 97 | // handle partials first 98 | if (range.isPartial()) { 99 | var parent = element.getParent(); 100 | var asText = element.editAsText(); 101 | var text = asText.getText(); 102 | var start = range.getStartOffset(); 103 | var end = range.getEndOffsetInclusive(); 104 | 105 | // keep copies of surrounding text 106 | var before = start !== -1 && text.slice(0, start); 107 | var after = end !== -1 && text.slice(end + 1); 108 | var beforeEndsWithCr = before && 109 | before.charAt(before.length - 1) === '\r'; 110 | var afterStartsWithCr = after && 111 | after.charAt(0) === '\r'; 112 | 113 | if (beforeEndsWithCr && afterStartsWithCr) { 114 | // e.g. selection is full line with text above and below 115 | if (!replaced) { 116 | // copy before & after as text elements (with attrs) 117 | var copyBefore = asText.copy(); 118 | var copyAfter = asText.copy(); 119 | copyBefore = copyBefore.deleteText(start, text.length - 1); 120 | copyAfter = copyAfter.deleteText(0, end); 121 | 122 | // remove original element 123 | element.removeFromParent(); 124 | 125 | // append to parent: before, table, after 126 | parent.appendText(copyBefore); 127 | var table = insertHtmlAsCell(parent, root, noBackground); 128 | var index = body.getChildIndex(table); 129 | var par = body.insertParagraph(index + 1, ''); 130 | par.appendText(copyAfter); 131 | replaced = true; 132 | } 133 | } else if (before || after) { 134 | // e.g. selection is full line with empty line above or below 135 | if (!after && beforeEndsWithCr) { 136 | if (!replaced) { 137 | insertHtmlAsCell(parent, root, noBackground); 138 | replaced = true; 139 | } 140 | } else if (!before && afterStartsWithCr) { 141 | if (!replaced) { 142 | var nextContainer = parent.getPreviousSibling(); 143 | insertHtmlAsCell(nextContainer, root, noBackground); 144 | replaced = true; 145 | } 146 | } 147 | // e.g. selection is part of a line 148 | asText.deleteText(start, end); 149 | if (!replaced) { 150 | // just insert text with no table 151 | insertHtmlAsText(element, root, start, noBackground); 152 | replaced = true; 153 | } 154 | } else if (!replaced) { 155 | // e.g. selection is line with empty lines above and below 156 | insertHtmlAsCell(parent, root, noBackground); 157 | try { 158 | var parentIndex = document.getBody().getChildIndex(parent); 159 | if (parentIndex && !isCell(element) && !isCell(parent)) { 160 | parent.removeFromParent(); 161 | } 162 | } catch (e) { 163 | // ignore: paragraph was already removed from table cell 164 | } 165 | replaced = true; 166 | } 167 | } else { 168 | // e.g. selection is full container element 169 | if (!replaced) { 170 | insertHtmlAsCell(element, root, noBackground); 171 | if (!isCell(element)) { 172 | element.removeFromParent(); 173 | } 174 | replaced = true; 175 | } else { 176 | element.removeFromParent(); 177 | } 178 | } 179 | } 180 | } 181 | 182 | function insertHtmlAsCell(element, root, noBackground) { 183 | var cell; 184 | if (element.getType() === DocumentApp.ElementType.TABLE_CELL) { 185 | element.clear(); 186 | cell = element; 187 | } else { 188 | var parent = element.getParent(); 189 | if (parent.getType() === DocumentApp.ElementType.TABLE_CELL) { 190 | parent.clear(); 191 | cell = parent; 192 | } else { 193 | // insert table 194 | var body = DocumentApp.getActiveDocument().getBody(); 195 | var index = body.getChildIndex(element); 196 | var table = body.insertTable(index + 1); 197 | 198 | // remove border 199 | table.setBorderWidth(0); 200 | 201 | // append cell with paragraph 202 | cell = table.appendTableRow().appendTableCell(); 203 | } 204 | } 205 | 206 | // set cell background color 207 | if (!noBackground) { 208 | var rootStyle = root.getAttribute('style'); 209 | var rootAttrs = extendFromStyle({}, rootStyle); 210 | var rootBgc = rootAttrs[DocumentApp.Attribute.BACKGROUND_COLOR]; 211 | if (rootBgc) { 212 | rootBgc = colorToHex(rootBgc); 213 | cell.setBackgroundColor(rootBgc); 214 | } 215 | } 216 | 217 | var par = cell.appendParagraph(''); 218 | insertHtmlAsText(par, root, 0, noBackground); 219 | 220 | // clean up cell (remove initial paragraph) 221 | cell.getChild(0).removeFromParent(); 222 | 223 | return table; 224 | } 225 | 226 | /** 227 | * Parses an HTML block as XML and inserts all of its children into the 228 | * document, respecting the 'style' attribute when possible. Each child node 229 | * inherits style properties from its parent. 230 | * 231 | * @param {GoogleAppsScript.Document.ContainerElement} element 232 | * @param {GoogleAppsScript.XML.Document.Element} root 233 | * @param {number} index 234 | * @param {boolean} noBackground 235 | */ 236 | function insertHtmlAsText(element, root, index, noBackground) { 237 | var baseAttrs = {}; 238 | baseAttrs[DocumentApp.Attribute.FONT_FAMILY] = constants.document.font; 239 | 240 | // disable font style attrs so they don't carry over to new elements 241 | delete baseAttrs[DocumentApp.Attribute.BOLD]; 242 | delete baseAttrs[DocumentApp.Attribute.ITALIC]; 243 | delete baseAttrs[DocumentApp.Attribute.UNDERLINE]; 244 | delete baseAttrs[DocumentApp.Attribute.STRIKETHROUGH]; 245 | 246 | var textToAppend = ''; 247 | var groupedAttrs = []; 248 | 249 | // insert nodes 250 | var children = [{ 251 | node: root, 252 | attrs: baseAttrs 253 | }]; 254 | while (children.length > 0) { 255 | var child = children.pop(); 256 | var type = child.node.getType(); 257 | 258 | if (type === XmlService.ContentTypes.TEXT) { 259 | var str = child.node.getText(); 260 | groupedAttrs.push({ 261 | start: textToAppend.length, 262 | end: textToAppend.length + str.length - 1, 263 | attrs: child.attrs 264 | }); 265 | textToAppend += str; 266 | } else if (type === XmlService.ContentTypes.ELEMENT) { 267 | // pass new style attributes down the stack 268 | var e = child.node.asElement(); 269 | var style = e.getAttribute('style'); 270 | var childAttrs = extendFromStyle(child.attrs, style, noBackground); 271 | 272 | var newNodes = e.getAllContent(); 273 | for (var i = newNodes.length - 1; i >= 0; i--) { 274 | children.push({ 275 | node: newNodes[i], 276 | attrs: childAttrs 277 | }); 278 | } 279 | } 280 | } 281 | 282 | // append the full text and set its attributes in groups 283 | var asText = element.editAsText(); 284 | asText.insertText(index, textToAppend); 285 | groupedAttrs.forEach(function setAttrs(group) { 286 | asText.setAttributes( 287 | index + group.start, 288 | index + group.end, 289 | group.attrs 290 | ); 291 | }); 292 | } 293 | 294 | function extendFromStyle(oldAttrs, style, noBackground) { 295 | var attrs = cloneObj(oldAttrs); 296 | if (!style) { 297 | return attrs; 298 | } 299 | 300 | var styleVal = style.getValue(); 301 | var styles = styleVal.split(';'); 302 | 303 | return styles.reduce(function addStyle(result, style) { 304 | var pieces = style.split(':'); 305 | if (pieces.length === 2 && pieces[0] && pieces[1]) { 306 | var prop = pieces[0].trim().toLowerCase(); 307 | var val = pieces[1].trim().toLowerCase(); 308 | setDocAttr(result, prop, val, noBackground); 309 | } 310 | return result; 311 | }, attrs); 312 | } 313 | 314 | /** 315 | * Sets an element's Document.Attribute based on the given CSS property. 316 | * 317 | * @param {Object} attrs 318 | * @param {string} prop 319 | * @param {string} val 320 | * @param {boolean} noBackground 321 | */ 322 | function setDocAttr(attrs, prop, val, noBackground) { 323 | // handle special cases 324 | // noinspection FallThroughInSwitchStatementJS 325 | switch (prop) { 326 | // font style 327 | case constants.document.cssAttrs.fontWeight: 328 | case constants.document.cssAttrs.fontStyle: 329 | case constants.document.cssAttrs.textDecoration: 330 | attrName = constants.document.docAttrs[val]; 331 | if (attrName) { 332 | attrs[attrName] = true; 333 | } 334 | return; 335 | case constants.document.cssAttrs.background: 336 | if (noBackground) { 337 | return; 338 | } 339 | case constants.document.cssAttrs.color: 340 | val = colorToHex(val); 341 | break; 342 | } 343 | 344 | // everything else 345 | var attrName = constants.document.docAttrs[prop]; 346 | if (attrName) { 347 | attrs[attrName] = val; 348 | } 349 | } 350 | 351 | /** 352 | * @param {GoogleAppsScript.Document.Range} range 353 | * @returns {boolean} whether the range contains multiple table cells 354 | */ 355 | function hasMultipleCells(range) { 356 | var ranges = range.getRangeElements(); 357 | var numCells = ranges.filter(hasCell).length; 358 | return ranges.some(hasTable) || numCells > 1; 359 | } 360 | 361 | /** 362 | * @param {GoogleAppsScript.Document.RangeElement} rangeElement 363 | * @returns {boolean} whether rangeElement contains a table 364 | */ 365 | function hasTable(rangeElement) { 366 | var element = rangeElement.getElement(); 367 | return element.getType() === DocumentApp.ElementType.TABLE; 368 | } 369 | 370 | /** 371 | * @param {GoogleAppsScript.Document.RangeElement} rangeElement 372 | * @returns {boolean} whether rangeElement contains a table cell 373 | */ 374 | function hasCell(rangeElement) { 375 | var element = rangeElement.getElement(); 376 | return isCell(element); 377 | } 378 | 379 | /** 380 | * @param {GoogleAppsScript.Document.Element| 381 | * GoogleAppsScript.Document.ContainerElement} element 382 | * @returns {boolean} whether element is a table cell 383 | */ 384 | function isCell(element) { 385 | return element.getType() === DocumentApp.ElementType.TABLE_CELL; 386 | } 387 | -------------------------------------------------------------------------------- /server/main.js: -------------------------------------------------------------------------------- 1 | //noinspection JSUnusedLocalSymbols 2 | /** 3 | * Creates a menu entry in the Google Docs UI when the document is opened. 4 | * 5 | * @param {Object} e The event parameter for a simple onOpen trigger. To 6 | * determine which authorization mode the trigger is running in, inspect 7 | * e.authMode. 8 | */ 9 | function onOpen(e) { 10 | DocumentApp.getUi().createAddonMenu() 11 | .addItem('Start', 'showSidebar') 12 | .addToUi(); 13 | } 14 | 15 | //noinspection JSUnusedGlobalSymbols 16 | /** 17 | * Runs when the add-on is installed. 18 | * 19 | * @param {Object} e The event parameter for a simple onInstall trigger. 20 | */ 21 | function onInstall(e) { 22 | onOpen(e); 23 | } 24 | 25 | /** 26 | * Opens a sidebar in the document containing the add-on's user interface. 27 | */ 28 | function showSidebar() { 29 | var ui = HtmlService.createTemplateFromFile('sidebar').evaluate() 30 | .setSandboxMode(HtmlService.SandboxMode.IFRAME) 31 | .setTitle(constants.title); 32 | 33 | DocumentApp.getUi().showSidebar(ui); 34 | } 35 | 36 | // noinspection JSUnusedGlobalSymbols 37 | /** 38 | * @returns {{ 39 | * themes: Array., 40 | * prefs: {language: string, theme: string, noBackground: string} 41 | * }} 42 | */ 43 | function getThemesAndUserPrefs() { 44 | var scriptCache = CacheService.getScriptCache(); 45 | 46 | return { 47 | themes: loadThemes(scriptCache), 48 | prefs: getUserPrefs() 49 | }; 50 | } 51 | 52 | // noinspection JSUnusedGlobalSymbols 53 | /** 54 | * Saves the user's preferences and gets the user-selected text and CSS for 55 | * the selected theme. 56 | * 57 | * @param {Object} prefs 58 | * @param {string} prefs.language 59 | * @param {string} prefs.theme 60 | * @param {boolean} prefs.noBackground 61 | * @returns {{selection: string, css: string}} 62 | */ 63 | function getSelectionAndThemeCssForPreview(prefs) { 64 | var selection = getSelection(); 65 | var selectedText = getTextFromSelection(selection); 66 | var css = getThemeCss(prefs.theme); 67 | 68 | cacheSelection(selectedText); 69 | saveUserPrefs(prefs); 70 | 71 | return { 72 | selection: selectedText, 73 | css: css 74 | }; 75 | } 76 | 77 | // noinspection JSUnusedGlobalSymbols 78 | /** 79 | * Replaces the text of the current selection with the provided block, or 80 | * throws an error if there is no selection. If multiple elements are selected, 81 | * only inserts the block in the last element that can contain text and 82 | * removes the other elements. 83 | * 84 | * @param {string} html the HTML to replace the current selection with 85 | * @param {boolean} noBackground 86 | * @param {GoogleAppsScript.Document.Range} [selection] 87 | */ 88 | function insertCode(html, noBackground, selection) { 89 | if (!selection) { 90 | selection = getSelection(); 91 | } 92 | try { 93 | replaceSelection(selection, html, noBackground) 94 | } catch (err) { 95 | logError(constants.errors.insert, err); 96 | throw constants.errors.insert; 97 | } 98 | } 99 | 100 | // noinspection JSUnusedGlobalSymbols 101 | /** 102 | * Replaces the text of the current selection with the provided block if the 103 | * user's selection has not changed since the last preview was rendered, or 104 | * gets the user-selected text and CSS for the selected theme. 105 | * 106 | * @param {string} html the preview HTML with inline CSS 107 | * @param {Object} prefs 108 | * @param {string} prefs.language 109 | * @param {string} prefs.theme 110 | * @param {boolean} prefs.noBackground 111 | * @returns {{selection: string, css: string}|undefined} 112 | */ 113 | function insertCodeOrGetSelectionAndThemeCss(html, prefs) { 114 | var selection = getSelection(); 115 | var selectedText = getTextFromSelection(selection); 116 | 117 | if (alreadySelected(selectedText) && alreadySaved(prefs)) { 118 | // the selection hasn't changed since the last preview, 119 | // so we can insert the provided html 120 | insertCode(html, prefs.noBackground, selection); 121 | } else { 122 | saveUserPrefs(prefs); 123 | 124 | return { 125 | selection: selectedText, 126 | css: getThemeCss(prefs.theme) 127 | }; 128 | } 129 | } 130 | 131 | // noinspection JSUnusedGlobalSymbols 132 | /** 133 | * Helper function that puts external JS / CSS into the HTML file. 134 | * 135 | * @param {string} filename 136 | * @returns {string} file contents 137 | */ 138 | function include(filename) { 139 | return HtmlService.createHtmlOutputFromFile(filename).getContent(); 140 | } 141 | -------------------------------------------------------------------------------- /server/util.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @returns {Object} The user's preferences, if they exist. 3 | */ 4 | /** 5 | * @returns {Object} the users's preferences 6 | */ 7 | function getUserPrefs() { 8 | try { 9 | var userProps = PropertiesService.getUserProperties().getProperties(); 10 | } catch (err) { 11 | logError(constants.errors.getUserPreferences, err); 12 | throw constants.errors.getUserPreferences; 13 | } 14 | 15 | return { 16 | language: userProps.language, 17 | theme: userProps.theme, 18 | noBackground: userProps.noBackground === 'true' 19 | } 20 | } 21 | 22 | /** 23 | * @param {Object} prefs 24 | * @param {string} prefs.language 25 | * @param {string} prefs.theme 26 | * @param {boolean} prefs.noBackground 27 | */ 28 | function saveUserPrefs(prefs) { 29 | PropertiesService.getUserProperties().setProperties(prefs); 30 | } 31 | 32 | /** 33 | * todo: doc 34 | * 35 | * @param {Object} prefs 36 | * @param {string} prefs.language 37 | * @param {string} prefs.theme 38 | * @param {boolean} prefs.noBackground 39 | * @returns {boolean} 40 | */ 41 | function alreadySaved(prefs) { 42 | var userPrefs = getUserPrefs(); 43 | return prefs.language === userPrefs.language && 44 | prefs.theme === userPrefs.theme && 45 | prefs.noBackground === userPrefs.noBackground; 46 | } 47 | 48 | /** 49 | * todo: doc 50 | * 51 | * @param {string} selectedText 52 | * @returns {boolean} 53 | */ 54 | function alreadySelected(selectedText) { 55 | var userCache = CacheService.getUserCache(); 56 | var previewTextDigest = userCache.get(constants.cache.previewText); 57 | previewTextDigest = JSON.parse(previewTextDigest); 58 | if (previewTextDigest) { 59 | var selectedTextDigest = Utilities.computeDigest( 60 | Utilities.DigestAlgorithm.MD5, selectedText 61 | ); 62 | } 63 | return arraysAreEqual(selectedTextDigest, previewTextDigest); 64 | } 65 | 66 | /** 67 | * todo: doc 68 | * 69 | * @param {string} selectedText 70 | */ 71 | function cacheSelection(selectedText) { 72 | var userCache = CacheService.getUserCache(); 73 | var hash = Utilities.computeDigest( 74 | Utilities.DigestAlgorithm.MD5, selectedText 75 | ); 76 | var hashVal = JSON.stringify(hash); 77 | userCache.put(constants.cache.previewText, hashVal); 78 | } 79 | 80 | /** 81 | * Gets the list of supported color themes, caching their CSS if necessary. 82 | * 83 | * @param {GoogleAppsScript.Cache.Cache} scriptCache 84 | * @returns {Array.} a list of all theme names 85 | */ 86 | function loadThemes(scriptCache) { 87 | var html = HtmlService.createHtmlOutputFromFile('styles.html'); 88 | var xml = XmlService.parse(html.getContent()); 89 | var root = xml.getRootElement(); 90 | var styles = root.getChildren(); 91 | 92 | var defaultCss = scriptCache.get(constants.themes.base); 93 | if (defaultCss) { 94 | // css is still cached 95 | return styles.map(function toThemeName(style) { 96 | return style.getAttribute('id').getValue(); 97 | }); 98 | } 99 | 100 | // need to cache themes 101 | return styles.map(function toThemeNameAndCacheCss(style) { 102 | var themeName = style.getAttribute('id').getValue(); 103 | var css = style.getText(); 104 | 105 | try { 106 | scriptCache.put(themeName, css, constants.cache.ttl); 107 | } catch (e) { 108 | logError('Failed to cache CSS', e); 109 | } 110 | 111 | return themeName; 112 | }); 113 | } 114 | 115 | /** 116 | * Gets a theme's CSS, caching it if necessary. 117 | * 118 | * @param {string} themeName 119 | * @returns {string} the theme's CSS 120 | */ 121 | function getThemeCss(themeName) { 122 | var scriptCache = CacheService.getScriptCache(); 123 | 124 | var css = getThemeCssFromCache(scriptCache, themeName); 125 | if (css === null) { 126 | // reload and cache the theme css 127 | loadThemes(scriptCache); 128 | 129 | css = getThemeCssFromCache(scriptCache, themeName); 130 | if (css === null) { 131 | throw constants.errors.themeNotFound; 132 | } 133 | } 134 | 135 | return css; 136 | } 137 | 138 | /** 139 | * Gets a theme's CSS from the provided cache. 140 | * 141 | * @param {GoogleAppsScript.Cache.Cache} scriptCache 142 | * @param {string} themeName 143 | * @returns {string|null} the theme's CSS if cached, null otherwise 144 | */ 145 | function getThemeCssFromCache(scriptCache, themeName) { 146 | if (themeName !== constants.themes.base) { 147 | return scriptCache.get(themeName); 148 | } 149 | 150 | // prepend default css to the theme 151 | var cached = scriptCache.getAll([constants.themes.base, themeName]); 152 | var baseCss = cached[constants.themes.base]; 153 | var css = cached[themeName]; 154 | 155 | return (baseCss && css) ? baseCss + css : null; 156 | } 157 | 158 | function cloneObj(obj) { 159 | // todo: optimize? 160 | return JSON.parse(JSON.stringify(obj)); 161 | } 162 | 163 | /** 164 | * @param {*} lhs 165 | * @param {*} rhs 166 | * @returns {boolean} 167 | */ 168 | function arraysAreEqual(lhs, rhs) { 169 | if (lhs === rhs) { 170 | return true; 171 | } 172 | if (lhs === null || rhs === null) { 173 | return false; 174 | } 175 | if (lhs.length !== rhs.length) { 176 | return false; 177 | } 178 | 179 | for (var i = 0; i < lhs.length; i++) { 180 | if (lhs[i] !== rhs[i]) { 181 | return false; 182 | } 183 | } 184 | 185 | return true; 186 | } 187 | 188 | function logError(msg, err) { 189 | Logger.log(msg + ': %s', err); 190 | } 191 | -------------------------------------------------------------------------------- /terms-of-service.md: -------------------------------------------------------------------------------- 1 | # Code Blocks Terms of Service 2 | 3 | ## 1. Terms 4 | 5 | By accessing our app, Code Blocks, you are agreeing to be bound by these terms of service, all applicable laws and regulations, and agree that you are responsible for compliance with any applicable local laws. If you do not agree with any of these terms, you are prohibited from using or accessing Code Blocks. The materials contained in Code Blocks are protected by applicable copyright and trademark law. 6 | 7 | ## 2. Use License 8 | 9 | 1. Permission is granted to temporarily download multiple copies of Code Blocks per device for personal or commercial transitory viewing only. This is the grant of a license, not a transfer of title, and under this license you may not: 10 | 1. remove any copyright or other proprietary notations from the materials; 11 | 1. This license shall automatically terminate if you violate any of these restrictions and may be terminated by Code Blocks at any time. Upon terminating your viewing of these materials or upon the termination of this license, you must destroy any downloaded materials in your possession whether in electronic or printed format. 12 | 13 | ## 1. Disclaimer 14 | 15 | 1. The materials within Code Blocks are provided on an 'as is' basis. Code Blocks makes no warranties, expressed or implied, and hereby disclaims and negates all other warranties including, without limitation, implied warranties or conditions of merchantability, fitness for a particular purpose, or non-infringement of intellectual property or other violation of rights. 16 | 17 | 2. Further, Code Blocks does not warrant or make any representations concerning the accuracy, likely results, or reliability of the use of the materials on its website or otherwise relating to such materials or on any sites linked to Code Blocks. 18 | 19 | ## 4. Limitations 20 | 21 | In no event shall Code Blocks or its suppliers be liable for any damages (including, without limitation, damages for loss of data or profit, or due to business interruption) arising out of the use or inability to use Code Blocks, even if Code Blocks or a Code Blocks authorized representative has been notified orally or in writing of the possibility of such damage. Because some jurisdictions do not allow limitations on implied warranties, or limitations of liability for consequential or incidental damages, these limitations may not apply to you. 22 | 23 | ## 5. Accuracy of materials 24 | 25 | The materials appearing in Code Blocks could include technical, typographical, or photographic errors. Code Blocks does not warrant that any of the materials on Code Blocks are accurate, complete or current. Code Blocks may make changes to the materials contained in Code Blocks at any time without notice. However Code Blocks does not make any commitment to update the materials. 26 | 27 | ## 6. Links 28 | 29 | Code Blocks has not reviewed all of the sites linked to its app and is not responsible for the contents of any such linked site. The inclusion of any link does not imply endorsement by Code Blocks of the site. Use of any such linked website is at the user's own risk. 30 | 31 | ## 7. Modifications 32 | 33 | Code Blocks may revise these terms of service for its app at any time without notice. By using Code Blocks you are agreeing to be bound by the then current version of these terms of service. 34 | 35 | ## 8. Governing Law 36 | 37 | These terms and conditions are governed by and construed in accordance with the laws of California and you irrevocably submit to the exclusive jurisdiction of the courts in that State or location. 38 | 39 | --- 40 | 41 | [Homepage](https://www.alexwforsythe.com/code-blocks/) | [G Suite Marketplace](https://chrome.google.com/webstore/detail/code-blocks/ebieibfdjgmmimpldgengceekpfefmfd) | [Privacy Policy](https://www.alexwforsythe.com/code-blocks/privacy-policy) | [Terms of Service](https://www.alexwforsythe.com/code-blocks/terms-of-service) 42 | --------------------------------------------------------------------------------