├── .gitignore ├── README.md ├── assets ├── fonts │ └── CascadiaCode.woff2 └── icons │ └── 512x512.png ├── demo.gif ├── index.html ├── package-lock.json ├── package.json ├── src ├── completions.ts ├── editor.ts ├── instrument.ts ├── main.ts ├── menu.ts ├── output.ts ├── theme.ts └── ui.ts └── tsconfig.json /.gitignore: -------------------------------------------------------------------------------- 1 | /dist 2 | /node_modules 3 | **/.DS_Store 4 | *.js 5 | *.js.map 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # opiumJS 2 | 3 | MacOS utility app for running JavaScript snippets 4 | 5 | ![Demo](https://github.com/pb03/opium-js/raw/master/demo.gif) 6 | 7 | 8 | ## Commands / Keyboard shortcuts 9 | | Command | Function | 10 | |---|---| 11 | | `⌘ + R` | Run snippet | 12 | | `⌘ + K` | Clear output | 13 | | `⌘ + ⇧ + S` | Save current snippet | 14 | | `⌘ + ⇧ + R` | Run snippet and show code coverage | 15 | 16 | 17 | ## Auto-complete code snippets 18 | | Trigger | Snippet | 19 | |---|---| 20 | | `fn →` | function in ES6 syntax | 21 | | `fnc →` | function with console.log() | 22 | | `cl →` | console.log() | 23 | | `for →` | for loop | 24 | | `rfor →` | reverse for loop | 25 | | `fore →` | forEach loop | 26 | | `fof →` | for...of loop | 27 | | `if →` | if statement | 28 | | `ife →` | if/else statement | 29 | | `switch →` | switch case statement| 30 | | `sto →` | setTimeout function | 31 | | `si →` | setInterval function | 32 | -------------------------------------------------------------------------------- /assets/fonts/CascadiaCode.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pb03/opium-js/8a295250f9144856e62d6158f231e1a666ac0c5a/assets/fonts/CascadiaCode.woff2 -------------------------------------------------------------------------------- /assets/icons/512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pb03/opium-js/8a295250f9144856e62d6158f231e1a666ac0c5a/assets/icons/512x512.png -------------------------------------------------------------------------------- /demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pb03/opium-js/8a295250f9144856e62d6158f231e1a666ac0c5a/demo.gif -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | opiumJS 7 | 359 | 360 | 361 | 362 |
363 |
364 | 365 |
366 |

Add libraries

367 |

368 | By default it looks up for JS libraries in cdnjs, however you can enter any URL below 369 | to load a library. 370 |

371 | 372 |
373 |
374 | 375 |
376 | 377 |
378 |
    379 |
    380 |
    381 |
    382 | 383 |
    384 |
    385 |
    386 |
    387 | opiumJS 388 |
    389 | 390 | 391 | 393 | 394 | 396 | 397 | 398 | 399 |
    400 |
    401 | 402 |
    403 |
    404 | 405 | R 406 |
    407 |

    Run snippet

    408 |
    409 | 410 | K 411 |
    412 |

    Clear output

    413 |
    414 | 415 | 416 | S 417 |
    418 |

    Save current snippet

    419 |
    420 | 421 | 422 | R 423 |
    424 |

    Run snippet and show code coverage

    425 |
    426 |
    427 |
    428 |
    429 | 430 | 450 | 451 | 452 | 453 | 454 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "opium-js", 3 | "version": "1.2.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "7zip-bin": { 8 | "version": "5.0.3", 9 | "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.0.3.tgz", 10 | "integrity": "sha512-GLyWIFBbGvpKPGo55JyRZAo4lVbnBiD52cKlw/0Vt+wnmKvWJkpZvsjVoaIolyBXDeAQKSicRtqFNPem9w0WYA==", 11 | "dev": true 12 | }, 13 | "@babel/code-frame": { 14 | "version": "7.5.5", 15 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", 16 | "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", 17 | "requires": { 18 | "@babel/highlight": "^7.0.0" 19 | } 20 | }, 21 | "@babel/generator": { 22 | "version": "7.6.4", 23 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.6.4.tgz", 24 | "integrity": "sha512-jsBuXkFoZxk0yWLyGI9llT9oiQ2FeTASmRFE32U+aaDTfoE92t78eroO7PTpU/OrYq38hlcDM6vbfLDaOLy+7w==", 25 | "requires": { 26 | "@babel/types": "^7.6.3", 27 | "jsesc": "^2.5.1", 28 | "lodash": "^4.17.13", 29 | "source-map": "^0.5.0" 30 | }, 31 | "dependencies": { 32 | "source-map": { 33 | "version": "0.5.7", 34 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 35 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" 36 | } 37 | } 38 | }, 39 | "@babel/helper-function-name": { 40 | "version": "7.1.0", 41 | "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", 42 | "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", 43 | "requires": { 44 | "@babel/helper-get-function-arity": "^7.0.0", 45 | "@babel/template": "^7.1.0", 46 | "@babel/types": "^7.0.0" 47 | } 48 | }, 49 | "@babel/helper-get-function-arity": { 50 | "version": "7.0.0", 51 | "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", 52 | "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", 53 | "requires": { 54 | "@babel/types": "^7.0.0" 55 | } 56 | }, 57 | "@babel/helper-split-export-declaration": { 58 | "version": "7.4.4", 59 | "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", 60 | "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", 61 | "requires": { 62 | "@babel/types": "^7.4.4" 63 | } 64 | }, 65 | "@babel/highlight": { 66 | "version": "7.5.0", 67 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", 68 | "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", 69 | "requires": { 70 | "chalk": "^2.0.0", 71 | "esutils": "^2.0.2", 72 | "js-tokens": "^4.0.0" 73 | } 74 | }, 75 | "@babel/parser": { 76 | "version": "7.6.4", 77 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.6.4.tgz", 78 | "integrity": "sha512-D8RHPW5qd0Vbyo3qb+YjO5nvUVRTXFLQ/FsDxJU2Nqz4uB5EnUN0ZQSEYpvTIbRuttig1XbHWU5oMeQwQSAA+A==" 79 | }, 80 | "@babel/template": { 81 | "version": "7.6.0", 82 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.6.0.tgz", 83 | "integrity": "sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ==", 84 | "requires": { 85 | "@babel/code-frame": "^7.0.0", 86 | "@babel/parser": "^7.6.0", 87 | "@babel/types": "^7.6.0" 88 | } 89 | }, 90 | "@babel/traverse": { 91 | "version": "7.6.3", 92 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.6.3.tgz", 93 | "integrity": "sha512-unn7P4LGsijIxaAJo/wpoU11zN+2IaClkQAxcJWBNCMS6cmVh802IyLHNkAjQ0iYnRS3nnxk5O3fuXW28IMxTw==", 94 | "requires": { 95 | "@babel/code-frame": "^7.5.5", 96 | "@babel/generator": "^7.6.3", 97 | "@babel/helper-function-name": "^7.1.0", 98 | "@babel/helper-split-export-declaration": "^7.4.4", 99 | "@babel/parser": "^7.6.3", 100 | "@babel/types": "^7.6.3", 101 | "debug": "^4.1.0", 102 | "globals": "^11.1.0", 103 | "lodash": "^4.17.13" 104 | }, 105 | "dependencies": { 106 | "debug": { 107 | "version": "4.1.1", 108 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 109 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 110 | "requires": { 111 | "ms": "^2.1.1" 112 | } 113 | }, 114 | "ms": { 115 | "version": "2.1.2", 116 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 117 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 118 | } 119 | } 120 | }, 121 | "@babel/types": { 122 | "version": "7.6.3", 123 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.6.3.tgz", 124 | "integrity": "sha512-CqbcpTxMcpuQTMhjI37ZHVgjBkysg5icREQIEZ0eG1yCNwg3oy+5AaLiOKmjsCj6nqOsa6Hf0ObjRVwokb7srA==", 125 | "requires": { 126 | "esutils": "^2.0.2", 127 | "lodash": "^4.17.13", 128 | "to-fast-properties": "^2.0.0" 129 | } 130 | }, 131 | "@develar/schema-utils": { 132 | "version": "2.1.0", 133 | "resolved": "https://registry.npmjs.org/@develar/schema-utils/-/schema-utils-2.1.0.tgz", 134 | "integrity": "sha512-qjCqB4ctMig9Gz5bd6lkdFr3bO6arOdQqptdBSpF1ZpCnjofieCciEzkoS9ujY9cMGyllYSCSmBJ3x9OKHXzoA==", 135 | "dev": true, 136 | "requires": { 137 | "ajv": "^6.1.0", 138 | "ajv-keywords": "^3.1.0" 139 | } 140 | }, 141 | "@electron/get": { 142 | "version": "1.6.0", 143 | "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.6.0.tgz", 144 | "integrity": "sha512-xuvAzbN9iBApfAMvW0hKUpxHR5wPVbG9RaoSTbpu/WaHISDu0MVfMWYhfeU0X730CpBV0G2RkLgwAs9WDan3GA==", 145 | "dev": true, 146 | "requires": { 147 | "debug": "^4.1.1", 148 | "env-paths": "^2.2.0", 149 | "fs-extra": "^8.1.0", 150 | "global-agent": "^2.0.2", 151 | "global-tunnel-ng": "^2.7.1", 152 | "got": "^9.6.0", 153 | "sanitize-filename": "^1.6.2", 154 | "sumchecker": "^3.0.0" 155 | }, 156 | "dependencies": { 157 | "debug": { 158 | "version": "4.1.1", 159 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 160 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 161 | "dev": true, 162 | "requires": { 163 | "ms": "^2.1.1" 164 | } 165 | }, 166 | "get-stream": { 167 | "version": "4.1.0", 168 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", 169 | "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", 170 | "dev": true, 171 | "requires": { 172 | "pump": "^3.0.0" 173 | } 174 | }, 175 | "got": { 176 | "version": "9.6.0", 177 | "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", 178 | "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", 179 | "dev": true, 180 | "requires": { 181 | "@sindresorhus/is": "^0.14.0", 182 | "@szmarczak/http-timer": "^1.1.2", 183 | "cacheable-request": "^6.0.0", 184 | "decompress-response": "^3.3.0", 185 | "duplexer3": "^0.1.4", 186 | "get-stream": "^4.1.0", 187 | "lowercase-keys": "^1.0.1", 188 | "mimic-response": "^1.0.1", 189 | "p-cancelable": "^1.0.0", 190 | "to-readable-stream": "^1.0.0", 191 | "url-parse-lax": "^3.0.0" 192 | } 193 | }, 194 | "ms": { 195 | "version": "2.1.2", 196 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 197 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 198 | "dev": true 199 | }, 200 | "prepend-http": { 201 | "version": "2.0.0", 202 | "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", 203 | "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", 204 | "dev": true 205 | }, 206 | "sanitize-filename": { 207 | "version": "1.6.3", 208 | "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", 209 | "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", 210 | "dev": true, 211 | "requires": { 212 | "truncate-utf8-bytes": "^1.0.0" 213 | } 214 | }, 215 | "url-parse-lax": { 216 | "version": "3.0.0", 217 | "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", 218 | "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", 219 | "dev": true, 220 | "requires": { 221 | "prepend-http": "^2.0.0" 222 | } 223 | } 224 | } 225 | }, 226 | "@sindresorhus/is": { 227 | "version": "0.14.0", 228 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", 229 | "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", 230 | "dev": true 231 | }, 232 | "@szmarczak/http-timer": { 233 | "version": "1.1.2", 234 | "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", 235 | "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", 236 | "dev": true, 237 | "requires": { 238 | "defer-to-connect": "^1.0.1" 239 | } 240 | }, 241 | "@types/debug": { 242 | "version": "4.1.5", 243 | "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.5.tgz", 244 | "integrity": "sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ==", 245 | "dev": true 246 | }, 247 | "@types/node": { 248 | "version": "12.12.0", 249 | "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.0.tgz", 250 | "integrity": "sha512-6N8Sa5AaENRtJnpKXZgvc119PKxT1Lk9VPy4kfT8JF23tIe1qDfaGkBR2DRKJFIA7NptMz+fps//C6aLi1Uoug==", 251 | "dev": true 252 | }, 253 | "ajv": { 254 | "version": "6.10.2", 255 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", 256 | "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", 257 | "dev": true, 258 | "requires": { 259 | "fast-deep-equal": "^2.0.1", 260 | "fast-json-stable-stringify": "^2.0.0", 261 | "json-schema-traverse": "^0.4.1", 262 | "uri-js": "^4.2.2" 263 | } 264 | }, 265 | "ajv-keywords": { 266 | "version": "3.4.1", 267 | "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", 268 | "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", 269 | "dev": true 270 | }, 271 | "ansi-align": { 272 | "version": "3.0.0", 273 | "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", 274 | "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", 275 | "dev": true, 276 | "requires": { 277 | "string-width": "^3.0.0" 278 | } 279 | }, 280 | "ansi-regex": { 281 | "version": "4.1.0", 282 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 283 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", 284 | "dev": true 285 | }, 286 | "ansi-styles": { 287 | "version": "3.2.1", 288 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 289 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 290 | "requires": { 291 | "color-convert": "^1.9.0" 292 | } 293 | }, 294 | "app-builder-bin": { 295 | "version": "3.4.4", 296 | "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-3.4.4.tgz", 297 | "integrity": "sha512-Xib+wgdK+8zZhbZr5pma3pNB23Y4JRY5Yt6h8peou6MTFSQzXdIkqalh/ezy9SMLuS43S4b0s7jTVAmUs8WVmA==", 298 | "dev": true 299 | }, 300 | "app-builder-lib": { 301 | "version": "22.1.0", 302 | "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-22.1.0.tgz", 303 | "integrity": "sha512-jDTfWsVS/MePO4FexqiSQcsWM9Yfr81ETIYbmVbKmW05o0dn9k1DvMOMoLb0kTLQpW+pWBVvGMAOPfk68HnBrg==", 304 | "dev": true, 305 | "requires": { 306 | "7zip-bin": "~5.0.3", 307 | "@develar/schema-utils": "~2.1.0", 308 | "async-exit-hook": "^2.0.1", 309 | "bluebird-lst": "^1.0.9", 310 | "builder-util": "22.1.0", 311 | "builder-util-runtime": "8.4.0", 312 | "chromium-pickle-js": "^0.2.0", 313 | "debug": "^4.1.1", 314 | "ejs": "^2.7.1", 315 | "electron-publish": "22.1.0", 316 | "fs-extra": "^8.1.0", 317 | "hosted-git-info": "^3.0.0", 318 | "is-ci": "^2.0.0", 319 | "isbinaryfile": "^4.0.2", 320 | "js-yaml": "^3.13.1", 321 | "lazy-val": "^1.0.4", 322 | "minimatch": "^3.0.4", 323 | "normalize-package-data": "^2.5.0", 324 | "read-config-file": "5.0.0", 325 | "sanitize-filename": "^1.6.3", 326 | "semver": "^6.3.0", 327 | "temp-file": "^3.3.4" 328 | }, 329 | "dependencies": { 330 | "debug": { 331 | "version": "4.1.1", 332 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 333 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 334 | "dev": true, 335 | "requires": { 336 | "ms": "^2.1.1" 337 | } 338 | }, 339 | "ms": { 340 | "version": "2.1.2", 341 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 342 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 343 | "dev": true 344 | } 345 | } 346 | }, 347 | "argparse": { 348 | "version": "1.0.10", 349 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 350 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 351 | "dev": true, 352 | "requires": { 353 | "sprintf-js": "~1.0.2" 354 | } 355 | }, 356 | "async-exit-hook": { 357 | "version": "2.0.1", 358 | "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", 359 | "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", 360 | "dev": true 361 | }, 362 | "balanced-match": { 363 | "version": "1.0.0", 364 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 365 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 366 | "dev": true 367 | }, 368 | "bluebird": { 369 | "version": "3.7.1", 370 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.1.tgz", 371 | "integrity": "sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg==", 372 | "dev": true 373 | }, 374 | "bluebird-lst": { 375 | "version": "1.0.9", 376 | "resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.9.tgz", 377 | "integrity": "sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw==", 378 | "dev": true, 379 | "requires": { 380 | "bluebird": "^3.5.5" 381 | } 382 | }, 383 | "boolean": { 384 | "version": "2.0.2", 385 | "resolved": "https://registry.npmjs.org/boolean/-/boolean-2.0.2.tgz", 386 | "integrity": "sha512-ymsbJQlux/uogyEWfsXJUYzuyoOzPyp6NvEV71s6/ptQR7ptKO9uHF+WZL2GRATDeN52EFhNyrIu+exNZKh3Cw==", 387 | "dev": true, 388 | "optional": true 389 | }, 390 | "boxen": { 391 | "version": "3.2.0", 392 | "resolved": "https://registry.npmjs.org/boxen/-/boxen-3.2.0.tgz", 393 | "integrity": "sha512-cU4J/+NodM3IHdSL2yN8bqYqnmlBTidDR4RC7nJs61ZmtGz8VZzM3HLQX0zY5mrSmPtR3xWwsq2jOUQqFZN8+A==", 394 | "dev": true, 395 | "requires": { 396 | "ansi-align": "^3.0.0", 397 | "camelcase": "^5.3.1", 398 | "chalk": "^2.4.2", 399 | "cli-boxes": "^2.2.0", 400 | "string-width": "^3.0.0", 401 | "term-size": "^1.2.0", 402 | "type-fest": "^0.3.0", 403 | "widest-line": "^2.0.0" 404 | }, 405 | "dependencies": { 406 | "type-fest": { 407 | "version": "0.3.1", 408 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", 409 | "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", 410 | "dev": true 411 | } 412 | } 413 | }, 414 | "brace-expansion": { 415 | "version": "1.1.11", 416 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 417 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 418 | "dev": true, 419 | "requires": { 420 | "balanced-match": "^1.0.0", 421 | "concat-map": "0.0.1" 422 | } 423 | }, 424 | "buffer-from": { 425 | "version": "1.0.0", 426 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", 427 | "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==", 428 | "dev": true 429 | }, 430 | "builder-util": { 431 | "version": "22.1.0", 432 | "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-22.1.0.tgz", 433 | "integrity": "sha512-BPvpWvxQ5XOzm2WepIgmOAyo2IyaM/Bd1LJmeTYy5CtknNAtxgmAPQJfCHCikMKKQA4Obz/KYecXQiGpGJ2ThA==", 434 | "dev": true, 435 | "requires": { 436 | "7zip-bin": "~5.0.3", 437 | "@types/debug": "^4.1.5", 438 | "app-builder-bin": "3.4.4", 439 | "bluebird-lst": "^1.0.9", 440 | "builder-util-runtime": "8.4.0", 441 | "chalk": "^2.4.2", 442 | "debug": "^4.1.1", 443 | "fs-extra": "^8.1.0", 444 | "is-ci": "^2.0.0", 445 | "js-yaml": "^3.13.1", 446 | "source-map-support": "^0.5.13", 447 | "stat-mode": "^0.3.0", 448 | "temp-file": "^3.3.4" 449 | }, 450 | "dependencies": { 451 | "debug": { 452 | "version": "4.1.1", 453 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 454 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 455 | "dev": true, 456 | "requires": { 457 | "ms": "^2.1.1" 458 | } 459 | }, 460 | "ms": { 461 | "version": "2.1.2", 462 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 463 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 464 | "dev": true 465 | } 466 | } 467 | }, 468 | "builder-util-runtime": { 469 | "version": "8.4.0", 470 | "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.4.0.tgz", 471 | "integrity": "sha512-CJB/eKfPf2vHrkmirF5eicVnbDCkMBbwd5tRYlTlgud16zFeqD7QmrVUAOEXdnsrcNkiLg9dbuUsQKtl/AwsYQ==", 472 | "dev": true, 473 | "requires": { 474 | "debug": "^4.1.1", 475 | "sax": "^1.2.4" 476 | }, 477 | "dependencies": { 478 | "debug": { 479 | "version": "4.1.1", 480 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 481 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 482 | "dev": true, 483 | "requires": { 484 | "ms": "^2.1.1" 485 | } 486 | }, 487 | "ms": { 488 | "version": "2.1.2", 489 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 490 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 491 | "dev": true 492 | } 493 | } 494 | }, 495 | "cacheable-request": { 496 | "version": "6.1.0", 497 | "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", 498 | "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", 499 | "dev": true, 500 | "requires": { 501 | "clone-response": "^1.0.2", 502 | "get-stream": "^5.1.0", 503 | "http-cache-semantics": "^4.0.0", 504 | "keyv": "^3.0.0", 505 | "lowercase-keys": "^2.0.0", 506 | "normalize-url": "^4.1.0", 507 | "responselike": "^1.0.2" 508 | }, 509 | "dependencies": { 510 | "get-stream": { 511 | "version": "5.1.0", 512 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", 513 | "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", 514 | "dev": true, 515 | "requires": { 516 | "pump": "^3.0.0" 517 | } 518 | }, 519 | "lowercase-keys": { 520 | "version": "2.0.0", 521 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", 522 | "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", 523 | "dev": true 524 | } 525 | } 526 | }, 527 | "camelcase": { 528 | "version": "5.3.1", 529 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 530 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", 531 | "dev": true 532 | }, 533 | "chalk": { 534 | "version": "2.4.2", 535 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 536 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 537 | "requires": { 538 | "ansi-styles": "^3.2.1", 539 | "escape-string-regexp": "^1.0.5", 540 | "supports-color": "^5.3.0" 541 | } 542 | }, 543 | "chromium-pickle-js": { 544 | "version": "0.2.0", 545 | "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", 546 | "integrity": "sha1-BKEGZywYsIWrd02YPfo+oTjyIgU=", 547 | "dev": true 548 | }, 549 | "ci-info": { 550 | "version": "2.0.0", 551 | "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", 552 | "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", 553 | "dev": true 554 | }, 555 | "cli-boxes": { 556 | "version": "2.2.0", 557 | "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.0.tgz", 558 | "integrity": "sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w==", 559 | "dev": true 560 | }, 561 | "cliui": { 562 | "version": "5.0.0", 563 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", 564 | "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", 565 | "dev": true, 566 | "requires": { 567 | "string-width": "^3.1.0", 568 | "strip-ansi": "^5.2.0", 569 | "wrap-ansi": "^5.1.0" 570 | } 571 | }, 572 | "clone-response": { 573 | "version": "1.0.2", 574 | "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", 575 | "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", 576 | "dev": true, 577 | "requires": { 578 | "mimic-response": "^1.0.0" 579 | } 580 | }, 581 | "color-convert": { 582 | "version": "1.9.3", 583 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 584 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 585 | "requires": { 586 | "color-name": "1.1.3" 587 | } 588 | }, 589 | "color-name": { 590 | "version": "1.1.3", 591 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 592 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" 593 | }, 594 | "concat-map": { 595 | "version": "0.0.1", 596 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 597 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 598 | "dev": true 599 | }, 600 | "concat-stream": { 601 | "version": "1.6.2", 602 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", 603 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", 604 | "dev": true, 605 | "requires": { 606 | "buffer-from": "^1.0.0", 607 | "inherits": "^2.0.3", 608 | "readable-stream": "^2.2.2", 609 | "typedarray": "^0.0.6" 610 | } 611 | }, 612 | "config-chain": { 613 | "version": "1.1.12", 614 | "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", 615 | "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", 616 | "dev": true, 617 | "optional": true, 618 | "requires": { 619 | "ini": "^1.3.4", 620 | "proto-list": "~1.2.1" 621 | } 622 | }, 623 | "configstore": { 624 | "version": "4.0.0", 625 | "resolved": "https://registry.npmjs.org/configstore/-/configstore-4.0.0.tgz", 626 | "integrity": "sha512-CmquAXFBocrzaSM8mtGPMM/HiWmyIpr4CcJl/rgY2uCObZ/S7cKU0silxslqJejl+t/T9HS8E0PUNQD81JGUEQ==", 627 | "dev": true, 628 | "requires": { 629 | "dot-prop": "^4.1.0", 630 | "graceful-fs": "^4.1.2", 631 | "make-dir": "^1.0.0", 632 | "unique-string": "^1.0.0", 633 | "write-file-atomic": "^2.0.0", 634 | "xdg-basedir": "^3.0.0" 635 | } 636 | }, 637 | "core-js": { 638 | "version": "3.3.5", 639 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.3.5.tgz", 640 | "integrity": "sha512-0J3K+Par/ZydhKg8pEiTcK/9d65/nqJOzY62uMkjeBmt05fDOt/khUVjDdh8TpeIuGQDy1yLDDCjiWN/8pFIuw==", 641 | "dev": true, 642 | "optional": true 643 | }, 644 | "core-util-is": { 645 | "version": "1.0.2", 646 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 647 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 648 | "dev": true 649 | }, 650 | "cross-spawn": { 651 | "version": "5.1.0", 652 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", 653 | "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", 654 | "dev": true, 655 | "requires": { 656 | "lru-cache": "^4.0.1", 657 | "shebang-command": "^1.2.0", 658 | "which": "^1.2.9" 659 | }, 660 | "dependencies": { 661 | "lru-cache": { 662 | "version": "4.1.5", 663 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", 664 | "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", 665 | "dev": true, 666 | "requires": { 667 | "pseudomap": "^1.0.2", 668 | "yallist": "^2.1.2" 669 | } 670 | }, 671 | "yallist": { 672 | "version": "2.1.2", 673 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", 674 | "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", 675 | "dev": true 676 | } 677 | } 678 | }, 679 | "crypto-random-string": { 680 | "version": "1.0.0", 681 | "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", 682 | "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", 683 | "dev": true 684 | }, 685 | "debug": { 686 | "version": "2.6.9", 687 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 688 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 689 | "dev": true, 690 | "requires": { 691 | "ms": "2.0.0" 692 | } 693 | }, 694 | "decamelize": { 695 | "version": "1.2.0", 696 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 697 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", 698 | "dev": true 699 | }, 700 | "decompress-response": { 701 | "version": "3.3.0", 702 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", 703 | "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", 704 | "dev": true, 705 | "requires": { 706 | "mimic-response": "^1.0.0" 707 | } 708 | }, 709 | "deep-extend": { 710 | "version": "0.6.0", 711 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", 712 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", 713 | "dev": true 714 | }, 715 | "defer-to-connect": { 716 | "version": "1.0.2", 717 | "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.0.2.tgz", 718 | "integrity": "sha512-k09hcQcTDY+cwgiwa6PYKLm3jlagNzQ+RSvhjzESOGOx+MNOuXkxTfEvPrO1IOQ81tArCFYQgi631clB70RpQw==", 719 | "dev": true 720 | }, 721 | "define-properties": { 722 | "version": "1.1.3", 723 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 724 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 725 | "dev": true, 726 | "optional": true, 727 | "requires": { 728 | "object-keys": "^1.0.12" 729 | } 730 | }, 731 | "detect-node": { 732 | "version": "2.0.4", 733 | "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", 734 | "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", 735 | "dev": true, 736 | "optional": true 737 | }, 738 | "dmg-builder": { 739 | "version": "21.2.0", 740 | "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-21.2.0.tgz", 741 | "integrity": "sha512-9cJEclnGy7EyKFCoHDYDf54pub/t92CQapyiUxU0w9Bj2vUvfoDagP1PMiX4XD5rPp96141h9A+QN0OB4VgvQg==", 742 | "dev": true, 743 | "requires": { 744 | "app-builder-lib": "~21.2.0", 745 | "bluebird-lst": "^1.0.9", 746 | "builder-util": "~21.2.0", 747 | "fs-extra": "^8.1.0", 748 | "iconv-lite": "^0.5.0", 749 | "js-yaml": "^3.13.1", 750 | "sanitize-filename": "^1.6.2" 751 | }, 752 | "dependencies": { 753 | "app-builder-bin": { 754 | "version": "3.4.3", 755 | "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-3.4.3.tgz", 756 | "integrity": "sha512-qMhayIwi3juerQEVJMQ76trObEbfQT0nhUdxZz9a26/3NLT3pE6awmQ8S1cEnrGugaaM5gYqR8OElcDezfmEsg==", 757 | "dev": true 758 | }, 759 | "app-builder-lib": { 760 | "version": "21.2.0", 761 | "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-21.2.0.tgz", 762 | "integrity": "sha512-aOX/nv77/Bti6NymJDg7p9T067xD8m1ipIEJR7B4Mm1GsJWpMm9PZdXtCRiMNRjHtQS5KIljT0g17781y6qn5A==", 763 | "dev": true, 764 | "requires": { 765 | "7zip-bin": "~5.0.3", 766 | "@develar/schema-utils": "~2.1.0", 767 | "async-exit-hook": "^2.0.1", 768 | "bluebird-lst": "^1.0.9", 769 | "builder-util": "21.2.0", 770 | "builder-util-runtime": "8.3.0", 771 | "chromium-pickle-js": "^0.2.0", 772 | "debug": "^4.1.1", 773 | "ejs": "^2.6.2", 774 | "electron-publish": "21.2.0", 775 | "fs-extra": "^8.1.0", 776 | "hosted-git-info": "^2.7.1", 777 | "is-ci": "^2.0.0", 778 | "isbinaryfile": "^4.0.2", 779 | "js-yaml": "^3.13.1", 780 | "lazy-val": "^1.0.4", 781 | "minimatch": "^3.0.4", 782 | "normalize-package-data": "^2.5.0", 783 | "read-config-file": "5.0.0", 784 | "sanitize-filename": "^1.6.2", 785 | "semver": "^6.3.0", 786 | "temp-file": "^3.3.4" 787 | } 788 | }, 789 | "builder-util": { 790 | "version": "21.2.0", 791 | "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-21.2.0.tgz", 792 | "integrity": "sha512-Nd6CUb6YgDY8EXAXEIegx+1kzKqyFQ5ZM5BoYkeunAlwz/zDJoH1UCyULjoS5wQe5czNClFQy07zz2bzYD0Z4A==", 793 | "dev": true, 794 | "requires": { 795 | "7zip-bin": "~5.0.3", 796 | "@types/debug": "^4.1.4", 797 | "app-builder-bin": "3.4.3", 798 | "bluebird-lst": "^1.0.9", 799 | "builder-util-runtime": "8.3.0", 800 | "chalk": "^2.4.2", 801 | "debug": "^4.1.1", 802 | "fs-extra": "^8.1.0", 803 | "is-ci": "^2.0.0", 804 | "js-yaml": "^3.13.1", 805 | "source-map-support": "^0.5.13", 806 | "stat-mode": "^0.3.0", 807 | "temp-file": "^3.3.4" 808 | } 809 | }, 810 | "builder-util-runtime": { 811 | "version": "8.3.0", 812 | "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.3.0.tgz", 813 | "integrity": "sha512-CSOdsYqf4RXIHh1HANPbrZHlZ9JQJXSuDDloblZPcWQVN62inyYoTQuSmY3KrgefME2Sv3Kn2MxHvbGQHRf8Iw==", 814 | "dev": true, 815 | "requires": { 816 | "debug": "^4.1.1", 817 | "sax": "^1.2.4" 818 | } 819 | }, 820 | "debug": { 821 | "version": "4.1.1", 822 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 823 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 824 | "dev": true, 825 | "requires": { 826 | "ms": "^2.1.1" 827 | } 828 | }, 829 | "electron-publish": { 830 | "version": "21.2.0", 831 | "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-21.2.0.tgz", 832 | "integrity": "sha512-mWavuoWJe87iaeKd0I24dNWIaR+0yRzshjNVqGyK019H766fsPWl3caQJnVKFaEyrZRP397v4JZVG0e7s16AxA==", 833 | "dev": true, 834 | "requires": { 835 | "bluebird-lst": "^1.0.9", 836 | "builder-util": "~21.2.0", 837 | "builder-util-runtime": "8.3.0", 838 | "chalk": "^2.4.2", 839 | "fs-extra": "^8.1.0", 840 | "lazy-val": "^1.0.4", 841 | "mime": "^2.4.4" 842 | } 843 | }, 844 | "hosted-git-info": { 845 | "version": "2.8.5", 846 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", 847 | "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==", 848 | "dev": true 849 | }, 850 | "ms": { 851 | "version": "2.1.2", 852 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 853 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 854 | "dev": true 855 | } 856 | } 857 | }, 858 | "dot-prop": { 859 | "version": "4.2.0", 860 | "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", 861 | "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", 862 | "dev": true, 863 | "requires": { 864 | "is-obj": "^1.0.0" 865 | } 866 | }, 867 | "dotenv": { 868 | "version": "8.2.0", 869 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", 870 | "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==", 871 | "dev": true 872 | }, 873 | "dotenv-expand": { 874 | "version": "5.1.0", 875 | "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", 876 | "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", 877 | "dev": true 878 | }, 879 | "duplexer3": { 880 | "version": "0.1.4", 881 | "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", 882 | "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", 883 | "dev": true 884 | }, 885 | "ejs": { 886 | "version": "2.7.1", 887 | "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.1.tgz", 888 | "integrity": "sha512-kS/gEPzZs3Y1rRsbGX4UOSjtP/CeJP0CxSNZHYxGfVM/VgLcv0ZqM7C45YyTj2DI2g7+P9Dd24C+IMIg6D0nYQ==", 889 | "dev": true 890 | }, 891 | "electron": { 892 | "version": "7.0.0", 893 | "resolved": "https://registry.npmjs.org/electron/-/electron-7.0.0.tgz", 894 | "integrity": "sha512-vrF1loRW1p0vQCbduqO0EZpo8ePJOuxUT6tSoUSU3lsbGK3VnlJop+0PpCIPzbe2K4G4Gk7WexH08V9se7mJcA==", 895 | "dev": true, 896 | "requires": { 897 | "@electron/get": "^1.0.1", 898 | "@types/node": "^12.0.12", 899 | "extract-zip": "^1.0.3" 900 | } 901 | }, 902 | "electron-builder": { 903 | "version": "22.1.0", 904 | "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-22.1.0.tgz", 905 | "integrity": "sha512-uu2W9BLG38D0i2PG6dHupmOYc+q/TRL+Ztf8xitqK+2Quq33PFbeN0ipfySuVEDg4I6whDRBOgxBEWwnUYqZZQ==", 906 | "dev": true, 907 | "requires": { 908 | "app-builder-lib": "22.1.0", 909 | "bluebird-lst": "^1.0.9", 910 | "builder-util": "22.1.0", 911 | "builder-util-runtime": "8.4.0", 912 | "chalk": "^2.4.2", 913 | "dmg-builder": "21.2.0", 914 | "fs-extra": "^8.1.0", 915 | "is-ci": "^2.0.0", 916 | "lazy-val": "^1.0.4", 917 | "read-config-file": "5.0.0", 918 | "sanitize-filename": "^1.6.3", 919 | "update-notifier": "^3.0.1", 920 | "yargs": "^14.0.0" 921 | } 922 | }, 923 | "electron-publish": { 924 | "version": "22.1.0", 925 | "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-22.1.0.tgz", 926 | "integrity": "sha512-jHjMCaL2dFU+iOq8wW568F59+DW1jFJGT3vc2xqm9iXyZ8gWlQ+NVve4bq9HZG7m4iNqWbGw9StmZcOzmIBxMQ==", 927 | "dev": true, 928 | "requires": { 929 | "bluebird-lst": "^1.0.9", 930 | "builder-util": "~22.1.0", 931 | "builder-util-runtime": "8.4.0", 932 | "chalk": "^2.4.2", 933 | "fs-extra": "^8.1.0", 934 | "lazy-val": "^1.0.4", 935 | "mime": "^2.4.4" 936 | } 937 | }, 938 | "emoji-regex": { 939 | "version": "7.0.3", 940 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", 941 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", 942 | "dev": true 943 | }, 944 | "encodeurl": { 945 | "version": "1.0.2", 946 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 947 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", 948 | "dev": true, 949 | "optional": true 950 | }, 951 | "end-of-stream": { 952 | "version": "1.4.4", 953 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 954 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 955 | "dev": true, 956 | "requires": { 957 | "once": "^1.4.0" 958 | } 959 | }, 960 | "env-paths": { 961 | "version": "2.2.0", 962 | "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.0.tgz", 963 | "integrity": "sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==", 964 | "dev": true 965 | }, 966 | "es6-error": { 967 | "version": "4.1.1", 968 | "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", 969 | "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", 970 | "dev": true, 971 | "optional": true 972 | }, 973 | "escape-string-regexp": { 974 | "version": "1.0.5", 975 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 976 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 977 | }, 978 | "esprima": { 979 | "version": "4.0.1", 980 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 981 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 982 | "dev": true 983 | }, 984 | "esutils": { 985 | "version": "2.0.3", 986 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 987 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" 988 | }, 989 | "execa": { 990 | "version": "0.7.0", 991 | "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", 992 | "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", 993 | "dev": true, 994 | "requires": { 995 | "cross-spawn": "^5.0.1", 996 | "get-stream": "^3.0.0", 997 | "is-stream": "^1.1.0", 998 | "npm-run-path": "^2.0.0", 999 | "p-finally": "^1.0.0", 1000 | "signal-exit": "^3.0.0", 1001 | "strip-eof": "^1.0.0" 1002 | } 1003 | }, 1004 | "extract-zip": { 1005 | "version": "1.6.7", 1006 | "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz", 1007 | "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=", 1008 | "dev": true, 1009 | "requires": { 1010 | "concat-stream": "1.6.2", 1011 | "debug": "2.6.9", 1012 | "mkdirp": "0.5.1", 1013 | "yauzl": "2.4.1" 1014 | } 1015 | }, 1016 | "fast-deep-equal": { 1017 | "version": "2.0.1", 1018 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", 1019 | "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", 1020 | "dev": true 1021 | }, 1022 | "fast-json-stable-stringify": { 1023 | "version": "2.0.0", 1024 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", 1025 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", 1026 | "dev": true 1027 | }, 1028 | "fd-slicer": { 1029 | "version": "1.0.1", 1030 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", 1031 | "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", 1032 | "dev": true, 1033 | "requires": { 1034 | "pend": "~1.2.0" 1035 | } 1036 | }, 1037 | "find-up": { 1038 | "version": "3.0.0", 1039 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", 1040 | "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", 1041 | "dev": true, 1042 | "requires": { 1043 | "locate-path": "^3.0.0" 1044 | } 1045 | }, 1046 | "fs-extra": { 1047 | "version": "8.1.0", 1048 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", 1049 | "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", 1050 | "dev": true, 1051 | "requires": { 1052 | "graceful-fs": "^4.2.0", 1053 | "jsonfile": "^4.0.0", 1054 | "universalify": "^0.1.0" 1055 | }, 1056 | "dependencies": { 1057 | "graceful-fs": { 1058 | "version": "4.2.3", 1059 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", 1060 | "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", 1061 | "dev": true 1062 | } 1063 | } 1064 | }, 1065 | "function-bind": { 1066 | "version": "1.1.1", 1067 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1068 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 1069 | "dev": true, 1070 | "optional": true 1071 | }, 1072 | "get-caller-file": { 1073 | "version": "2.0.5", 1074 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 1075 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 1076 | "dev": true 1077 | }, 1078 | "get-stream": { 1079 | "version": "3.0.0", 1080 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", 1081 | "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", 1082 | "dev": true 1083 | }, 1084 | "global-agent": { 1085 | "version": "2.1.5", 1086 | "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-2.1.5.tgz", 1087 | "integrity": "sha512-pYJjCxxNBzYxo6iNO62JZn8iCFVbvpiM0zE4w/G5hBNIvLjnvzIeCVQPMKc3aK8ju5L7Q8NNI/oBSosU0eeSYw==", 1088 | "dev": true, 1089 | "optional": true, 1090 | "requires": { 1091 | "boolean": "^2.0.2", 1092 | "core-js": "^3.3.3", 1093 | "es6-error": "^4.1.1", 1094 | "matcher": "^2.0.0", 1095 | "roarr": "^2.14.2", 1096 | "semver": "^6.3.0", 1097 | "serialize-error": "^5.0.0" 1098 | }, 1099 | "dependencies": { 1100 | "semver": { 1101 | "version": "6.3.0", 1102 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 1103 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 1104 | "dev": true, 1105 | "optional": true 1106 | } 1107 | } 1108 | }, 1109 | "global-dirs": { 1110 | "version": "0.1.1", 1111 | "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", 1112 | "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", 1113 | "dev": true, 1114 | "requires": { 1115 | "ini": "^1.3.4" 1116 | } 1117 | }, 1118 | "global-tunnel-ng": { 1119 | "version": "2.7.1", 1120 | "resolved": "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz", 1121 | "integrity": "sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg==", 1122 | "dev": true, 1123 | "optional": true, 1124 | "requires": { 1125 | "encodeurl": "^1.0.2", 1126 | "lodash": "^4.17.10", 1127 | "npm-conf": "^1.1.3", 1128 | "tunnel": "^0.0.6" 1129 | } 1130 | }, 1131 | "globals": { 1132 | "version": "11.12.0", 1133 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", 1134 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" 1135 | }, 1136 | "globalthis": { 1137 | "version": "1.0.0", 1138 | "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.0.tgz", 1139 | "integrity": "sha512-vcCAZTJ3r5Qcu5l8/2oyVdoFwxKgfYnMTR2vwWeux/NAVZK3PwcMaWkdUIn4GJbmKuRK7xcvDsLuK+CKcXyodg==", 1140 | "dev": true, 1141 | "optional": true, 1142 | "requires": { 1143 | "define-properties": "^1.1.2", 1144 | "function-bind": "^1.1.1", 1145 | "object-keys": "^1.0.12" 1146 | } 1147 | }, 1148 | "got": { 1149 | "version": "9.6.0", 1150 | "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", 1151 | "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", 1152 | "dev": true, 1153 | "requires": { 1154 | "@sindresorhus/is": "^0.14.0", 1155 | "@szmarczak/http-timer": "^1.1.2", 1156 | "cacheable-request": "^6.0.0", 1157 | "decompress-response": "^3.3.0", 1158 | "duplexer3": "^0.1.4", 1159 | "get-stream": "^4.1.0", 1160 | "lowercase-keys": "^1.0.1", 1161 | "mimic-response": "^1.0.1", 1162 | "p-cancelable": "^1.0.0", 1163 | "to-readable-stream": "^1.0.0", 1164 | "url-parse-lax": "^3.0.0" 1165 | }, 1166 | "dependencies": { 1167 | "get-stream": { 1168 | "version": "4.1.0", 1169 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", 1170 | "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", 1171 | "dev": true, 1172 | "requires": { 1173 | "pump": "^3.0.0" 1174 | } 1175 | } 1176 | } 1177 | }, 1178 | "graceful-fs": { 1179 | "version": "4.1.11", 1180 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", 1181 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", 1182 | "dev": true 1183 | }, 1184 | "has-flag": { 1185 | "version": "3.0.0", 1186 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1187 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" 1188 | }, 1189 | "has-yarn": { 1190 | "version": "2.1.0", 1191 | "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", 1192 | "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", 1193 | "dev": true 1194 | }, 1195 | "hosted-git-info": { 1196 | "version": "3.0.2", 1197 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.2.tgz", 1198 | "integrity": "sha512-ezZMWtHXm7Eb7Rq4Mwnx2vs79WUx2QmRg3+ZqeGroKzfDO+EprOcgRPYghsOP9JuYBfK18VojmRTGCg8Ma+ktw==", 1199 | "dev": true, 1200 | "requires": { 1201 | "lru-cache": "^5.1.1" 1202 | } 1203 | }, 1204 | "http-cache-semantics": { 1205 | "version": "4.0.3", 1206 | "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.0.3.tgz", 1207 | "integrity": "sha512-TcIMG3qeVLgDr1TEd2XvHaTnMPwYQUQMIBLy+5pLSDKYFc7UIqj39w8EGzZkaxoLv/l2K8HaI0t5AVA+YYgUew==", 1208 | "dev": true 1209 | }, 1210 | "iconv-lite": { 1211 | "version": "0.5.0", 1212 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.0.tgz", 1213 | "integrity": "sha512-NnEhI9hIEKHOzJ4f697DMz9IQEXr/MMJ5w64vN2/4Ai+wRnvV7SBrL0KLoRlwaKVghOc7LQ5YkPLuX146b6Ydw==", 1214 | "dev": true, 1215 | "requires": { 1216 | "safer-buffer": ">= 2.1.2 < 3" 1217 | } 1218 | }, 1219 | "import-lazy": { 1220 | "version": "2.1.0", 1221 | "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", 1222 | "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", 1223 | "dev": true 1224 | }, 1225 | "imurmurhash": { 1226 | "version": "0.1.4", 1227 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 1228 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 1229 | "dev": true 1230 | }, 1231 | "inherits": { 1232 | "version": "2.0.4", 1233 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1234 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1235 | "dev": true 1236 | }, 1237 | "ini": { 1238 | "version": "1.3.5", 1239 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", 1240 | "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", 1241 | "dev": true 1242 | }, 1243 | "is-ci": { 1244 | "version": "2.0.0", 1245 | "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", 1246 | "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", 1247 | "dev": true, 1248 | "requires": { 1249 | "ci-info": "^2.0.0" 1250 | } 1251 | }, 1252 | "is-fullwidth-code-point": { 1253 | "version": "2.0.0", 1254 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 1255 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 1256 | "dev": true 1257 | }, 1258 | "is-installed-globally": { 1259 | "version": "0.1.0", 1260 | "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", 1261 | "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", 1262 | "dev": true, 1263 | "requires": { 1264 | "global-dirs": "^0.1.0", 1265 | "is-path-inside": "^1.0.0" 1266 | } 1267 | }, 1268 | "is-npm": { 1269 | "version": "3.0.0", 1270 | "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-3.0.0.tgz", 1271 | "integrity": "sha512-wsigDr1Kkschp2opC4G3yA6r9EgVA6NjRpWzIi9axXqeIaAATPRJc4uLujXe3Nd9uO8KoDyA4MD6aZSeXTADhA==", 1272 | "dev": true 1273 | }, 1274 | "is-obj": { 1275 | "version": "1.0.1", 1276 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", 1277 | "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", 1278 | "dev": true 1279 | }, 1280 | "is-path-inside": { 1281 | "version": "1.0.1", 1282 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", 1283 | "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", 1284 | "dev": true, 1285 | "requires": { 1286 | "path-is-inside": "^1.0.1" 1287 | } 1288 | }, 1289 | "is-stream": { 1290 | "version": "1.1.0", 1291 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 1292 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", 1293 | "dev": true 1294 | }, 1295 | "is-yarn-global": { 1296 | "version": "0.3.0", 1297 | "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", 1298 | "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", 1299 | "dev": true 1300 | }, 1301 | "isarray": { 1302 | "version": "1.0.0", 1303 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1304 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 1305 | "dev": true 1306 | }, 1307 | "isbinaryfile": { 1308 | "version": "4.0.2", 1309 | "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.2.tgz", 1310 | "integrity": "sha512-C3FSxJdNrEr2F4z6uFtNzECDM5hXk+46fxaa+cwBe5/XrWSmzdG8DDgyjfX6/NRdBB21q2JXuRAzPCUs+fclnQ==", 1311 | "dev": true 1312 | }, 1313 | "isexe": { 1314 | "version": "2.0.0", 1315 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1316 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 1317 | "dev": true 1318 | }, 1319 | "istanbul-lib-coverage": { 1320 | "version": "2.0.5", 1321 | "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", 1322 | "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==" 1323 | }, 1324 | "istanbul-lib-instrument": { 1325 | "version": "3.3.0", 1326 | "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", 1327 | "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", 1328 | "requires": { 1329 | "@babel/generator": "^7.4.0", 1330 | "@babel/parser": "^7.4.3", 1331 | "@babel/template": "^7.4.0", 1332 | "@babel/traverse": "^7.4.3", 1333 | "@babel/types": "^7.4.0", 1334 | "istanbul-lib-coverage": "^2.0.5", 1335 | "semver": "^6.0.0" 1336 | } 1337 | }, 1338 | "js-tokens": { 1339 | "version": "4.0.0", 1340 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1341 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" 1342 | }, 1343 | "js-yaml": { 1344 | "version": "3.13.1", 1345 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", 1346 | "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", 1347 | "dev": true, 1348 | "requires": { 1349 | "argparse": "^1.0.7", 1350 | "esprima": "^4.0.0" 1351 | } 1352 | }, 1353 | "jsesc": { 1354 | "version": "2.5.2", 1355 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", 1356 | "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" 1357 | }, 1358 | "json-buffer": { 1359 | "version": "3.0.0", 1360 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", 1361 | "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", 1362 | "dev": true 1363 | }, 1364 | "json-schema-traverse": { 1365 | "version": "0.4.1", 1366 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 1367 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 1368 | "dev": true 1369 | }, 1370 | "json-stringify-safe": { 1371 | "version": "5.0.1", 1372 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 1373 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", 1374 | "dev": true, 1375 | "optional": true 1376 | }, 1377 | "json5": { 1378 | "version": "2.1.1", 1379 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz", 1380 | "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==", 1381 | "dev": true, 1382 | "requires": { 1383 | "minimist": "^1.2.0" 1384 | } 1385 | }, 1386 | "jsonfile": { 1387 | "version": "4.0.0", 1388 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 1389 | "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", 1390 | "dev": true, 1391 | "requires": { 1392 | "graceful-fs": "^4.1.6" 1393 | } 1394 | }, 1395 | "keyv": { 1396 | "version": "3.1.0", 1397 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", 1398 | "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", 1399 | "dev": true, 1400 | "requires": { 1401 | "json-buffer": "3.0.0" 1402 | } 1403 | }, 1404 | "latest-version": { 1405 | "version": "5.1.0", 1406 | "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", 1407 | "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", 1408 | "dev": true, 1409 | "requires": { 1410 | "package-json": "^6.3.0" 1411 | } 1412 | }, 1413 | "lazy-val": { 1414 | "version": "1.0.4", 1415 | "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.4.tgz", 1416 | "integrity": "sha512-u93kb2fPbIrfzBuLjZE+w+fJbUUMhNDXxNmMfaqNgpfQf1CO5ZSe2LfsnBqVAk7i/2NF48OSoRj+Xe2VT+lE8Q==", 1417 | "dev": true 1418 | }, 1419 | "locate-path": { 1420 | "version": "3.0.0", 1421 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", 1422 | "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", 1423 | "dev": true, 1424 | "requires": { 1425 | "p-locate": "^3.0.0", 1426 | "path-exists": "^3.0.0" 1427 | } 1428 | }, 1429 | "lodash": { 1430 | "version": "4.17.15", 1431 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", 1432 | "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" 1433 | }, 1434 | "lowercase-keys": { 1435 | "version": "1.0.1", 1436 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", 1437 | "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", 1438 | "dev": true 1439 | }, 1440 | "lru-cache": { 1441 | "version": "5.1.1", 1442 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", 1443 | "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", 1444 | "dev": true, 1445 | "requires": { 1446 | "yallist": "^3.0.2" 1447 | } 1448 | }, 1449 | "make-dir": { 1450 | "version": "1.3.0", 1451 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", 1452 | "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", 1453 | "dev": true, 1454 | "requires": { 1455 | "pify": "^3.0.0" 1456 | } 1457 | }, 1458 | "matcher": { 1459 | "version": "2.0.0", 1460 | "resolved": "https://registry.npmjs.org/matcher/-/matcher-2.0.0.tgz", 1461 | "integrity": "sha512-nlmfSlgHBFx36j/Pl/KQPbIaqE8Zf0TqmSMjsuddHDg6PMSVgmyW9HpkLs0o0M1n2GIZ/S2BZBLIww/xjhiGng==", 1462 | "dev": true, 1463 | "optional": true, 1464 | "requires": { 1465 | "escape-string-regexp": "^2.0.0" 1466 | }, 1467 | "dependencies": { 1468 | "escape-string-regexp": { 1469 | "version": "2.0.0", 1470 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", 1471 | "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", 1472 | "dev": true, 1473 | "optional": true 1474 | } 1475 | } 1476 | }, 1477 | "mime": { 1478 | "version": "2.4.4", 1479 | "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", 1480 | "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", 1481 | "dev": true 1482 | }, 1483 | "mimic-response": { 1484 | "version": "1.0.1", 1485 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", 1486 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", 1487 | "dev": true 1488 | }, 1489 | "minimatch": { 1490 | "version": "3.0.4", 1491 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1492 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1493 | "dev": true, 1494 | "requires": { 1495 | "brace-expansion": "^1.1.7" 1496 | } 1497 | }, 1498 | "minimist": { 1499 | "version": "1.2.0", 1500 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 1501 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", 1502 | "dev": true 1503 | }, 1504 | "mkdirp": { 1505 | "version": "0.5.1", 1506 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 1507 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 1508 | "dev": true, 1509 | "requires": { 1510 | "minimist": "0.0.8" 1511 | }, 1512 | "dependencies": { 1513 | "minimist": { 1514 | "version": "0.0.8", 1515 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 1516 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 1517 | "dev": true 1518 | } 1519 | } 1520 | }, 1521 | "monaco-editor": { 1522 | "version": "0.14.3", 1523 | "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.14.3.tgz", 1524 | "integrity": "sha512-RhaO4xXmWn/p0WrkEOXe4PoZj6xOcvDYjoAh0e1kGUrQnP1IOpc0m86Ceuaa2CLEMDINqKijBSmqhvBQnsPLHQ==" 1525 | }, 1526 | "ms": { 1527 | "version": "2.0.0", 1528 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1529 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 1530 | "dev": true 1531 | }, 1532 | "normalize-package-data": { 1533 | "version": "2.5.0", 1534 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", 1535 | "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", 1536 | "dev": true, 1537 | "requires": { 1538 | "hosted-git-info": "^2.1.4", 1539 | "resolve": "^1.10.0", 1540 | "semver": "2 || 3 || 4 || 5", 1541 | "validate-npm-package-license": "^3.0.1" 1542 | }, 1543 | "dependencies": { 1544 | "hosted-git-info": { 1545 | "version": "2.8.5", 1546 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", 1547 | "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==", 1548 | "dev": true 1549 | }, 1550 | "semver": { 1551 | "version": "5.7.1", 1552 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 1553 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 1554 | "dev": true 1555 | } 1556 | } 1557 | }, 1558 | "normalize-url": { 1559 | "version": "4.5.0", 1560 | "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", 1561 | "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", 1562 | "dev": true 1563 | }, 1564 | "npm-conf": { 1565 | "version": "1.1.3", 1566 | "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", 1567 | "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", 1568 | "dev": true, 1569 | "optional": true, 1570 | "requires": { 1571 | "config-chain": "^1.1.11", 1572 | "pify": "^3.0.0" 1573 | } 1574 | }, 1575 | "npm-run-path": { 1576 | "version": "2.0.2", 1577 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", 1578 | "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", 1579 | "dev": true, 1580 | "requires": { 1581 | "path-key": "^2.0.0" 1582 | } 1583 | }, 1584 | "object-keys": { 1585 | "version": "1.1.1", 1586 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 1587 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 1588 | "dev": true, 1589 | "optional": true 1590 | }, 1591 | "once": { 1592 | "version": "1.4.0", 1593 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1594 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1595 | "dev": true, 1596 | "requires": { 1597 | "wrappy": "1" 1598 | } 1599 | }, 1600 | "p-cancelable": { 1601 | "version": "1.1.0", 1602 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", 1603 | "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", 1604 | "dev": true 1605 | }, 1606 | "p-finally": { 1607 | "version": "1.0.0", 1608 | "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", 1609 | "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", 1610 | "dev": true 1611 | }, 1612 | "p-limit": { 1613 | "version": "2.2.1", 1614 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", 1615 | "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", 1616 | "dev": true, 1617 | "requires": { 1618 | "p-try": "^2.0.0" 1619 | } 1620 | }, 1621 | "p-locate": { 1622 | "version": "3.0.0", 1623 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", 1624 | "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", 1625 | "dev": true, 1626 | "requires": { 1627 | "p-limit": "^2.0.0" 1628 | } 1629 | }, 1630 | "p-try": { 1631 | "version": "2.2.0", 1632 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 1633 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", 1634 | "dev": true 1635 | }, 1636 | "package-json": { 1637 | "version": "6.5.0", 1638 | "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", 1639 | "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", 1640 | "dev": true, 1641 | "requires": { 1642 | "got": "^9.6.0", 1643 | "registry-auth-token": "^4.0.0", 1644 | "registry-url": "^5.0.0", 1645 | "semver": "^6.2.0" 1646 | } 1647 | }, 1648 | "path-exists": { 1649 | "version": "3.0.0", 1650 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", 1651 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", 1652 | "dev": true 1653 | }, 1654 | "path-is-inside": { 1655 | "version": "1.0.2", 1656 | "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", 1657 | "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", 1658 | "dev": true 1659 | }, 1660 | "path-key": { 1661 | "version": "2.0.1", 1662 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", 1663 | "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", 1664 | "dev": true 1665 | }, 1666 | "path-parse": { 1667 | "version": "1.0.6", 1668 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", 1669 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", 1670 | "dev": true 1671 | }, 1672 | "pend": { 1673 | "version": "1.2.0", 1674 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", 1675 | "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", 1676 | "dev": true 1677 | }, 1678 | "pify": { 1679 | "version": "3.0.0", 1680 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", 1681 | "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", 1682 | "dev": true 1683 | }, 1684 | "prepend-http": { 1685 | "version": "2.0.0", 1686 | "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", 1687 | "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", 1688 | "dev": true 1689 | }, 1690 | "process-nextick-args": { 1691 | "version": "2.0.1", 1692 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 1693 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", 1694 | "dev": true 1695 | }, 1696 | "proto-list": { 1697 | "version": "1.2.4", 1698 | "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", 1699 | "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", 1700 | "dev": true, 1701 | "optional": true 1702 | }, 1703 | "pseudomap": { 1704 | "version": "1.0.2", 1705 | "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", 1706 | "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", 1707 | "dev": true 1708 | }, 1709 | "pump": { 1710 | "version": "3.0.0", 1711 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 1712 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 1713 | "dev": true, 1714 | "requires": { 1715 | "end-of-stream": "^1.1.0", 1716 | "once": "^1.3.1" 1717 | } 1718 | }, 1719 | "punycode": { 1720 | "version": "2.1.1", 1721 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 1722 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 1723 | "dev": true 1724 | }, 1725 | "rc": { 1726 | "version": "1.2.8", 1727 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", 1728 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", 1729 | "dev": true, 1730 | "requires": { 1731 | "deep-extend": "^0.6.0", 1732 | "ini": "~1.3.0", 1733 | "minimist": "^1.2.0", 1734 | "strip-json-comments": "~2.0.1" 1735 | } 1736 | }, 1737 | "read-config-file": { 1738 | "version": "5.0.0", 1739 | "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-5.0.0.tgz", 1740 | "integrity": "sha512-jIKUu+C84bfnKxyJ5j30CxCqgXWYjZLXuVE/NYlMEpeni+dhESgAeZOZd0JZbg1xTkMmnCdxksDoarkOyfEsOg==", 1741 | "dev": true, 1742 | "requires": { 1743 | "dotenv": "^8.0.0", 1744 | "dotenv-expand": "^5.1.0", 1745 | "fs-extra": "^8.1.0", 1746 | "js-yaml": "^3.13.1", 1747 | "json5": "^2.1.0", 1748 | "lazy-val": "^1.0.4" 1749 | } 1750 | }, 1751 | "readable-stream": { 1752 | "version": "2.3.6", 1753 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", 1754 | "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", 1755 | "dev": true, 1756 | "requires": { 1757 | "core-util-is": "~1.0.0", 1758 | "inherits": "~2.0.3", 1759 | "isarray": "~1.0.0", 1760 | "process-nextick-args": "~2.0.0", 1761 | "safe-buffer": "~5.1.1", 1762 | "string_decoder": "~1.1.1", 1763 | "util-deprecate": "~1.0.1" 1764 | } 1765 | }, 1766 | "registry-auth-token": { 1767 | "version": "4.0.0", 1768 | "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.0.0.tgz", 1769 | "integrity": "sha512-lpQkHxd9UL6tb3k/aHAVfnVtn+Bcs9ob5InuFLLEDqSqeq+AljB8GZW9xY0x7F+xYwEcjKe07nyoxzEYz6yvkw==", 1770 | "dev": true, 1771 | "requires": { 1772 | "rc": "^1.2.8", 1773 | "safe-buffer": "^5.0.1" 1774 | } 1775 | }, 1776 | "registry-url": { 1777 | "version": "5.1.0", 1778 | "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", 1779 | "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", 1780 | "dev": true, 1781 | "requires": { 1782 | "rc": "^1.2.8" 1783 | } 1784 | }, 1785 | "require-directory": { 1786 | "version": "2.1.1", 1787 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 1788 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", 1789 | "dev": true 1790 | }, 1791 | "require-main-filename": { 1792 | "version": "2.0.0", 1793 | "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", 1794 | "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", 1795 | "dev": true 1796 | }, 1797 | "resolve": { 1798 | "version": "1.12.0", 1799 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", 1800 | "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", 1801 | "dev": true, 1802 | "requires": { 1803 | "path-parse": "^1.0.6" 1804 | } 1805 | }, 1806 | "responselike": { 1807 | "version": "1.0.2", 1808 | "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", 1809 | "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", 1810 | "dev": true, 1811 | "requires": { 1812 | "lowercase-keys": "^1.0.0" 1813 | } 1814 | }, 1815 | "roarr": { 1816 | "version": "2.14.2", 1817 | "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.14.2.tgz", 1818 | "integrity": "sha512-ibqv70DCUhGVMfPe0JSUHBZ9PKLhxdk8VJ/Y2M7vVr+L4VakW1CdVTU9cJQBbM2STQa84CgBAzd7hJGcnALGeg==", 1819 | "dev": true, 1820 | "optional": true, 1821 | "requires": { 1822 | "boolean": "^2.0.2", 1823 | "detect-node": "^2.0.4", 1824 | "globalthis": "^1.0.0", 1825 | "json-stringify-safe": "^5.0.1", 1826 | "semver-compare": "^1.0.0", 1827 | "sprintf-js": "^1.1.2" 1828 | }, 1829 | "dependencies": { 1830 | "sprintf-js": { 1831 | "version": "1.1.2", 1832 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", 1833 | "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", 1834 | "dev": true, 1835 | "optional": true 1836 | } 1837 | } 1838 | }, 1839 | "safe-buffer": { 1840 | "version": "5.1.2", 1841 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1842 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 1843 | "dev": true 1844 | }, 1845 | "safer-buffer": { 1846 | "version": "2.1.2", 1847 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1848 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 1849 | "dev": true 1850 | }, 1851 | "sanitize-filename": { 1852 | "version": "1.6.3", 1853 | "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", 1854 | "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", 1855 | "dev": true, 1856 | "requires": { 1857 | "truncate-utf8-bytes": "^1.0.0" 1858 | } 1859 | }, 1860 | "sax": { 1861 | "version": "1.2.4", 1862 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", 1863 | "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", 1864 | "dev": true 1865 | }, 1866 | "semver": { 1867 | "version": "6.3.0", 1868 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 1869 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" 1870 | }, 1871 | "semver-compare": { 1872 | "version": "1.0.0", 1873 | "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", 1874 | "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", 1875 | "dev": true, 1876 | "optional": true 1877 | }, 1878 | "semver-diff": { 1879 | "version": "2.1.0", 1880 | "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", 1881 | "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", 1882 | "dev": true, 1883 | "requires": { 1884 | "semver": "^5.0.3" 1885 | }, 1886 | "dependencies": { 1887 | "semver": { 1888 | "version": "5.7.1", 1889 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 1890 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 1891 | "dev": true 1892 | } 1893 | } 1894 | }, 1895 | "serialize-error": { 1896 | "version": "5.0.0", 1897 | "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-5.0.0.tgz", 1898 | "integrity": "sha512-/VtpuyzYf82mHYTtI4QKtwHa79vAdU5OQpNPAmE/0UDdlGT0ZxHwC+J6gXkw29wwoVI8fMPsfcVHOwXtUQYYQA==", 1899 | "dev": true, 1900 | "optional": true, 1901 | "requires": { 1902 | "type-fest": "^0.8.0" 1903 | } 1904 | }, 1905 | "set-blocking": { 1906 | "version": "2.0.0", 1907 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 1908 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", 1909 | "dev": true 1910 | }, 1911 | "shebang-command": { 1912 | "version": "1.2.0", 1913 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", 1914 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", 1915 | "dev": true, 1916 | "requires": { 1917 | "shebang-regex": "^1.0.0" 1918 | } 1919 | }, 1920 | "shebang-regex": { 1921 | "version": "1.0.0", 1922 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", 1923 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", 1924 | "dev": true 1925 | }, 1926 | "signal-exit": { 1927 | "version": "3.0.2", 1928 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 1929 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", 1930 | "dev": true 1931 | }, 1932 | "source-map": { 1933 | "version": "0.6.1", 1934 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1935 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1936 | "dev": true 1937 | }, 1938 | "source-map-support": { 1939 | "version": "0.5.16", 1940 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", 1941 | "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", 1942 | "dev": true, 1943 | "requires": { 1944 | "buffer-from": "^1.0.0", 1945 | "source-map": "^0.6.0" 1946 | } 1947 | }, 1948 | "spdx-correct": { 1949 | "version": "3.1.0", 1950 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", 1951 | "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", 1952 | "dev": true, 1953 | "requires": { 1954 | "spdx-expression-parse": "^3.0.0", 1955 | "spdx-license-ids": "^3.0.0" 1956 | } 1957 | }, 1958 | "spdx-exceptions": { 1959 | "version": "2.2.0", 1960 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", 1961 | "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", 1962 | "dev": true 1963 | }, 1964 | "spdx-expression-parse": { 1965 | "version": "3.0.0", 1966 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", 1967 | "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", 1968 | "dev": true, 1969 | "requires": { 1970 | "spdx-exceptions": "^2.1.0", 1971 | "spdx-license-ids": "^3.0.0" 1972 | } 1973 | }, 1974 | "spdx-license-ids": { 1975 | "version": "3.0.5", 1976 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", 1977 | "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", 1978 | "dev": true 1979 | }, 1980 | "sprintf-js": { 1981 | "version": "1.0.3", 1982 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 1983 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 1984 | "dev": true 1985 | }, 1986 | "stat-mode": { 1987 | "version": "0.3.0", 1988 | "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-0.3.0.tgz", 1989 | "integrity": "sha512-QjMLR0A3WwFY2aZdV0okfFEJB5TRjkggXZjxP3A1RsWsNHNu3YPv8btmtc6iCFZ0Rul3FE93OYogvhOUClU+ng==", 1990 | "dev": true 1991 | }, 1992 | "string-width": { 1993 | "version": "3.1.0", 1994 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 1995 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 1996 | "dev": true, 1997 | "requires": { 1998 | "emoji-regex": "^7.0.1", 1999 | "is-fullwidth-code-point": "^2.0.0", 2000 | "strip-ansi": "^5.1.0" 2001 | } 2002 | }, 2003 | "string_decoder": { 2004 | "version": "1.1.1", 2005 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 2006 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 2007 | "dev": true, 2008 | "requires": { 2009 | "safe-buffer": "~5.1.0" 2010 | } 2011 | }, 2012 | "strip-ansi": { 2013 | "version": "5.2.0", 2014 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 2015 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 2016 | "dev": true, 2017 | "requires": { 2018 | "ansi-regex": "^4.1.0" 2019 | } 2020 | }, 2021 | "strip-eof": { 2022 | "version": "1.0.0", 2023 | "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", 2024 | "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", 2025 | "dev": true 2026 | }, 2027 | "strip-json-comments": { 2028 | "version": "2.0.1", 2029 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 2030 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", 2031 | "dev": true 2032 | }, 2033 | "sumchecker": { 2034 | "version": "3.0.0", 2035 | "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.0.tgz", 2036 | "integrity": "sha512-yreseuC/z4iaodVoq07XULEOO9p4jnQazO7mbrnDSvWAU/y2cbyIKs+gWJptfcGu9R+1l27K8Rkj0bfvqnBpgQ==", 2037 | "dev": true, 2038 | "requires": { 2039 | "debug": "^4.1.0" 2040 | }, 2041 | "dependencies": { 2042 | "debug": { 2043 | "version": "4.1.1", 2044 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 2045 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 2046 | "dev": true, 2047 | "requires": { 2048 | "ms": "^2.1.1" 2049 | } 2050 | }, 2051 | "ms": { 2052 | "version": "2.1.2", 2053 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 2054 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 2055 | "dev": true 2056 | } 2057 | } 2058 | }, 2059 | "supports-color": { 2060 | "version": "5.5.0", 2061 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 2062 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 2063 | "requires": { 2064 | "has-flag": "^3.0.0" 2065 | } 2066 | }, 2067 | "temp-file": { 2068 | "version": "3.3.4", 2069 | "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.3.4.tgz", 2070 | "integrity": "sha512-qSZ5W5q54iyGnP8cNl49RE0jTJc5CrzNocux5APD5yIxcgonoMuMSbsZfaZy8rTGCYo0Xz6ySVv3adagZ8gffg==", 2071 | "dev": true, 2072 | "requires": { 2073 | "async-exit-hook": "^2.0.1", 2074 | "fs-extra": "^8.1.0" 2075 | } 2076 | }, 2077 | "term-size": { 2078 | "version": "1.2.0", 2079 | "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", 2080 | "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", 2081 | "dev": true, 2082 | "requires": { 2083 | "execa": "^0.7.0" 2084 | } 2085 | }, 2086 | "to-fast-properties": { 2087 | "version": "2.0.0", 2088 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", 2089 | "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" 2090 | }, 2091 | "to-readable-stream": { 2092 | "version": "1.0.0", 2093 | "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", 2094 | "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", 2095 | "dev": true 2096 | }, 2097 | "truncate-utf8-bytes": { 2098 | "version": "1.0.2", 2099 | "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", 2100 | "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys=", 2101 | "dev": true, 2102 | "requires": { 2103 | "utf8-byte-length": "^1.0.1" 2104 | } 2105 | }, 2106 | "tunnel": { 2107 | "version": "0.0.6", 2108 | "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", 2109 | "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", 2110 | "dev": true, 2111 | "optional": true 2112 | }, 2113 | "type-fest": { 2114 | "version": "0.8.1", 2115 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", 2116 | "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", 2117 | "dev": true, 2118 | "optional": true 2119 | }, 2120 | "typedarray": { 2121 | "version": "0.0.6", 2122 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 2123 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", 2124 | "dev": true 2125 | }, 2126 | "typescript": { 2127 | "version": "3.6.4", 2128 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.6.4.tgz", 2129 | "integrity": "sha512-unoCll1+l+YK4i4F8f22TaNVPRHcD9PA3yCuZ8g5e0qGqlVlJ/8FSateOLLSagn+Yg5+ZwuPkL8LFUc0Jcvksg==", 2130 | "dev": true 2131 | }, 2132 | "unique-string": { 2133 | "version": "1.0.0", 2134 | "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", 2135 | "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", 2136 | "dev": true, 2137 | "requires": { 2138 | "crypto-random-string": "^1.0.0" 2139 | } 2140 | }, 2141 | "universalify": { 2142 | "version": "0.1.2", 2143 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 2144 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", 2145 | "dev": true 2146 | }, 2147 | "update-notifier": { 2148 | "version": "3.0.1", 2149 | "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-3.0.1.tgz", 2150 | "integrity": "sha512-grrmrB6Zb8DUiyDIaeRTBCkgISYUgETNe7NglEbVsrLWXeESnlCSP50WfRSj/GmzMPl6Uchj24S/p80nP/ZQrQ==", 2151 | "dev": true, 2152 | "requires": { 2153 | "boxen": "^3.0.0", 2154 | "chalk": "^2.0.1", 2155 | "configstore": "^4.0.0", 2156 | "has-yarn": "^2.1.0", 2157 | "import-lazy": "^2.1.0", 2158 | "is-ci": "^2.0.0", 2159 | "is-installed-globally": "^0.1.0", 2160 | "is-npm": "^3.0.0", 2161 | "is-yarn-global": "^0.3.0", 2162 | "latest-version": "^5.0.0", 2163 | "semver-diff": "^2.0.0", 2164 | "xdg-basedir": "^3.0.0" 2165 | } 2166 | }, 2167 | "uri-js": { 2168 | "version": "4.2.2", 2169 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", 2170 | "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", 2171 | "dev": true, 2172 | "requires": { 2173 | "punycode": "^2.1.0" 2174 | } 2175 | }, 2176 | "url-parse-lax": { 2177 | "version": "3.0.0", 2178 | "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", 2179 | "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", 2180 | "dev": true, 2181 | "requires": { 2182 | "prepend-http": "^2.0.0" 2183 | } 2184 | }, 2185 | "utf8-byte-length": { 2186 | "version": "1.0.4", 2187 | "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", 2188 | "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=", 2189 | "dev": true 2190 | }, 2191 | "util-deprecate": { 2192 | "version": "1.0.2", 2193 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 2194 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 2195 | "dev": true 2196 | }, 2197 | "validate-npm-package-license": { 2198 | "version": "3.0.4", 2199 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", 2200 | "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", 2201 | "dev": true, 2202 | "requires": { 2203 | "spdx-correct": "^3.0.0", 2204 | "spdx-expression-parse": "^3.0.0" 2205 | } 2206 | }, 2207 | "which": { 2208 | "version": "1.3.1", 2209 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 2210 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 2211 | "dev": true, 2212 | "requires": { 2213 | "isexe": "^2.0.0" 2214 | } 2215 | }, 2216 | "which-module": { 2217 | "version": "2.0.0", 2218 | "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", 2219 | "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", 2220 | "dev": true 2221 | }, 2222 | "widest-line": { 2223 | "version": "2.0.1", 2224 | "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", 2225 | "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", 2226 | "dev": true, 2227 | "requires": { 2228 | "string-width": "^2.1.1" 2229 | }, 2230 | "dependencies": { 2231 | "ansi-regex": { 2232 | "version": "3.0.0", 2233 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 2234 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", 2235 | "dev": true 2236 | }, 2237 | "string-width": { 2238 | "version": "2.1.1", 2239 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 2240 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 2241 | "dev": true, 2242 | "requires": { 2243 | "is-fullwidth-code-point": "^2.0.0", 2244 | "strip-ansi": "^4.0.0" 2245 | } 2246 | }, 2247 | "strip-ansi": { 2248 | "version": "4.0.0", 2249 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 2250 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 2251 | "dev": true, 2252 | "requires": { 2253 | "ansi-regex": "^3.0.0" 2254 | } 2255 | } 2256 | } 2257 | }, 2258 | "wrap-ansi": { 2259 | "version": "5.1.0", 2260 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", 2261 | "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", 2262 | "dev": true, 2263 | "requires": { 2264 | "ansi-styles": "^3.2.0", 2265 | "string-width": "^3.0.0", 2266 | "strip-ansi": "^5.0.0" 2267 | } 2268 | }, 2269 | "wrappy": { 2270 | "version": "1.0.2", 2271 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2272 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 2273 | "dev": true 2274 | }, 2275 | "write-file-atomic": { 2276 | "version": "2.4.3", 2277 | "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", 2278 | "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", 2279 | "dev": true, 2280 | "requires": { 2281 | "graceful-fs": "^4.1.11", 2282 | "imurmurhash": "^0.1.4", 2283 | "signal-exit": "^3.0.2" 2284 | } 2285 | }, 2286 | "xdg-basedir": { 2287 | "version": "3.0.0", 2288 | "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", 2289 | "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", 2290 | "dev": true 2291 | }, 2292 | "y18n": { 2293 | "version": "4.0.0", 2294 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", 2295 | "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", 2296 | "dev": true 2297 | }, 2298 | "yallist": { 2299 | "version": "3.1.1", 2300 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", 2301 | "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", 2302 | "dev": true 2303 | }, 2304 | "yargs": { 2305 | "version": "14.2.0", 2306 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.0.tgz", 2307 | "integrity": "sha512-/is78VKbKs70bVZH7w4YaZea6xcJWOAwkhbR0CFuZBmYtfTYF0xjGJF43AYd8g2Uii1yJwmS5GR2vBmrc32sbg==", 2308 | "dev": true, 2309 | "requires": { 2310 | "cliui": "^5.0.0", 2311 | "decamelize": "^1.2.0", 2312 | "find-up": "^3.0.0", 2313 | "get-caller-file": "^2.0.1", 2314 | "require-directory": "^2.1.1", 2315 | "require-main-filename": "^2.0.0", 2316 | "set-blocking": "^2.0.0", 2317 | "string-width": "^3.0.0", 2318 | "which-module": "^2.0.0", 2319 | "y18n": "^4.0.0", 2320 | "yargs-parser": "^15.0.0" 2321 | } 2322 | }, 2323 | "yargs-parser": { 2324 | "version": "15.0.0", 2325 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.0.tgz", 2326 | "integrity": "sha512-xLTUnCMc4JhxrPEPUYD5IBR1mWCK/aT6+RJ/K29JY2y1vD+FhtgKK0AXRWvI262q3QSffAQuTouFIKUuHX89wQ==", 2327 | "dev": true, 2328 | "requires": { 2329 | "camelcase": "^5.0.0", 2330 | "decamelize": "^1.2.0" 2331 | } 2332 | }, 2333 | "yauzl": { 2334 | "version": "2.4.1", 2335 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", 2336 | "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", 2337 | "dev": true, 2338 | "requires": { 2339 | "fd-slicer": "~1.0.1" 2340 | } 2341 | } 2342 | } 2343 | } 2344 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "opium-js", 3 | "productName": "opiumJS", 4 | "version": "1.2.0", 5 | "description": "MacOS utility for running JavaScript snippets", 6 | "main": "main.js", 7 | "scripts": { 8 | "build": "tsc", 9 | "watch": "tsc -w", 10 | "prestart": "npm run build", 11 | "start": "electron .", 12 | "pack": "electron-builder --dir", 13 | "dist": "electron-builder", 14 | "postinstall": "electron-builder install-app-deps" 15 | }, 16 | "author": "Prasanjit Singh", 17 | "license": "MIT", 18 | "build": { 19 | "productName": "opiumJS", 20 | "dmg": { 21 | "contents": [ 22 | { 23 | "x": 130, 24 | "y": 220 25 | }, 26 | { 27 | "x": 410, 28 | "y": 220, 29 | "type": "link", 30 | "path": "/Applications" 31 | } 32 | ] 33 | }, 34 | "directories": { 35 | "buildResources": "../assets", 36 | "output": "dist" 37 | } 38 | }, 39 | "devDependencies": { 40 | "electron": "^7.0.0", 41 | "electron-builder": "^22.1.0", 42 | "typescript": "^3.6.4" 43 | }, 44 | "dependencies": { 45 | "istanbul-lib-instrument": "^3.3.0", 46 | "monaco-editor": "^0.14.3" 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/completions.ts: -------------------------------------------------------------------------------- 1 | const completions = [ 2 | { 3 | label: 'fore', 4 | detail: 'Insert forEach statement', 5 | insertText: { 6 | value: '${1:array}.forEach(${2:el} => {\n\t$0\n})' 7 | } 8 | }, 9 | { 10 | label: 'fof', 11 | detail: 'Insert for...of statement', 12 | insertText: { 13 | value: 'for (let ${1:item} of ${2:object}) {\n\t$0\n}' 14 | } 15 | }, 16 | { 17 | label: 'for', 18 | detail: 'Insert for loop', 19 | insertText: { 20 | value: 'for (let i = 0; i < ${1:array}.length; i++) {\n\t$0\n}' 21 | } 22 | }, 23 | { 24 | label: 'rfor', 25 | detail: 'Insert reverse for loop', 26 | insertText: { 27 | value: 'for (let i = ${1:array}.length; i > 0; i--) {\n\t$0\n}' 28 | } 29 | }, 30 | { 31 | label: 'if', 32 | detail: 'Insert if statement', 33 | insertText: { 34 | value: 'if ($1) {\n\t$0\n}' 35 | } 36 | }, 37 | { 38 | label: 'ife', 39 | detail: 'Insert if/else statement', 40 | insertText: { 41 | value: 'if ($1) {\n\t$0\n} else {\n\t\n}' 42 | } 43 | }, 44 | { 45 | label: 'sw', 46 | detail: 'Insert switch case statement', 47 | insertText: { 48 | value: 'switch (${1:expr}) {\n\tcase ${2:value}:\n\t\treturn $0\n\n\tdefault:\n\t\treturn\n}' 49 | } 50 | }, 51 | { 52 | label: 'fn', 53 | detail: 'Insert function', 54 | insertText: { 55 | value: 'const ${1:myFunc} = ($2) => {\n\t$0\n}' 56 | } 57 | }, 58 | { 59 | label: 'fnc', 60 | detail: 'Insert function with console log', 61 | insertText: { 62 | value: 'const ${1:myFunc} = ($2) => {\n\t$0\n}\n\nconsole.log(${1:myFunc}())' 63 | } 64 | }, 65 | { 66 | label: 'cl', 67 | detail: 'Insert console.log', 68 | insertText: { 69 | value: 'console.log($1)$0' 70 | } 71 | }, 72 | { 73 | label: 'sto', 74 | detail: 'Insert setTimeout function', 75 | insertText: { 76 | value: 'setTimeout(() => {\n\t$0\n}, ${1:delay})' 77 | } 78 | }, 79 | { 80 | label: 'si', 81 | detail: 'Insert setInterval function', 82 | insertText: { 83 | value: 'setInterval(() => {\n\t$0\n}, ${1:interval})' 84 | } 85 | } 86 | ] 87 | 88 | module.exports = completions 89 | -------------------------------------------------------------------------------- /src/editor.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | declare const amdRequire 4 | const afeemTheme = require('./theme') 5 | const getOutput = require('./output') 6 | const autoCompletions = require('./completions') 7 | const instrument = require('./instrument') 8 | 9 | type Editor = monaco.editor.IStandaloneCodeEditor 10 | 11 | let monacoInput: Editor 12 | let monacoOutput: Editor 13 | 14 | const monacoOptions = { 15 | language: 'javascript', 16 | automaticLayout: true, 17 | folding: true, 18 | theme: 'afeemTheme', 19 | fontFamily: 'Cascadia Code, Menlo, serif', 20 | fontLigatures: true, 21 | contextmenu: false, 22 | minimap: { enabled: false }, 23 | scrollbar: { 24 | verticalScrollbarSize: 0, 25 | horizontalScrollbarSize: 0 26 | } 27 | } 28 | 29 | const visualState = { 30 | editor: { 31 | isDirty: false, 32 | coverageDots: [], 33 | clear() { 34 | this.coverageDots = [] 35 | } 36 | }, 37 | console: { 38 | errorHighlights: [], 39 | clear() { 40 | this.errorHighlights = [] 41 | }, 42 | }, 43 | } 44 | 45 | const initMonacoInput = () => { 46 | monacoInput = monaco.editor.create(document.getElementById('input'), { 47 | ...monacoOptions, 48 | value: localStorage.getItem('code') || '', 49 | fontSize: 14, 50 | lineHeight: 24, 51 | renderLineHighlight: 'none', 52 | multiCursorModifier: 'ctrlCmd' 53 | }) 54 | 55 | monacoInput.focus() 56 | 57 | monacoInput.getModel().updateOptions({ tabSize: 2 }) 58 | 59 | monacoInput.addAction({ 60 | id: 'run-function', 61 | label: 'Run', 62 | 63 | keybindings: [ 64 | monaco.KeyMod.CtrlCmd | monaco.KeyCode.KEY_R 65 | ], 66 | 67 | run: (editor: Editor) => { 68 | const code: string = editor.getValue() 69 | 70 | editor.getAction('editor.action.formatDocument').run() 71 | 72 | // const { error } = instrument(code) 73 | // if (error) { 74 | // opmAppendOutput(error, true) 75 | // } 76 | 77 | try { 78 | eval(code) 79 | } catch (error) { 80 | opmAppendOutput(error, true) 81 | } 82 | 83 | clearCoverageDots() 84 | } 85 | }) 86 | 87 | monacoInput.addAction({ 88 | id: 'code-coverage', 89 | label: 'Code coverage', 90 | 91 | keybindings: [ 92 | monaco.KeyMod.CtrlCmd | monaco.KeyMod.Shift | monaco.KeyCode.KEY_R 93 | ], 94 | 95 | run: (editor: Editor) => { 96 | const code = editor.getValue() 97 | clearCoverageDots() 98 | 99 | const { lines, error } = instrument(code) 100 | visualState.editor.coverageDots = monacoInput.deltaDecorations([], lines) 101 | visualState.editor.isDirty = false 102 | 103 | if (error) { 104 | opmAppendOutput(error, true) 105 | } 106 | } 107 | }) 108 | 109 | monacoInput.addAction({ 110 | id: 'clear-output', 111 | label: 'Clear output', 112 | 113 | keybindings: [ 114 | monaco.KeyMod.CtrlCmd | monaco.KeyCode.KEY_K 115 | ], 116 | 117 | run: () => { 118 | monacoOutput.setValue('') 119 | visualState.console.clear() 120 | } 121 | }) 122 | 123 | monacoInput.addAction({ 124 | id: 'save', 125 | label: 'Save', 126 | 127 | keybindings: [ 128 | monaco.KeyMod.CtrlCmd | monaco.KeyMod.Shift | monaco.KeyCode.KEY_S 129 | ], 130 | 131 | run: (editor: Editor) => { 132 | localStorage.setItem('code', editor.getValue()) 133 | } 134 | }) 135 | 136 | /** 137 | * Cleaning up coverage dots, when content changes. Method is noop, when `isDirty=true`. 138 | */ 139 | monacoInput.onDidChangeModelContent(() => { 140 | if (visualState.editor.isDirty) { 141 | return 142 | } 143 | 144 | clearCoverageDots() 145 | visualState.editor.isDirty = true 146 | }) 147 | } 148 | 149 | const initMonacoOutput = () => { 150 | monacoOutput = monaco.editor.create(document.getElementById('output'), { 151 | ...monacoOptions, 152 | lineNumbers: 'off', 153 | fontSize: 13, 154 | lineHeight: 21, 155 | readOnly: true, 156 | matchBrackets: false, 157 | renderLineHighlight: 'none' 158 | }) 159 | 160 | monacoOutput.getModel().updateOptions({ tabSize: 2 }) 161 | } 162 | 163 | console.log = (code: string) => { 164 | opmAppendOutput(getOutput(code), false) 165 | } 166 | 167 | const opmAppendOutput = (code: string, isError: boolean) => { 168 | const updatedValue = monacoOutput.getValue() + code + '\n\n' 169 | const totalLines = (updatedValue.match(/\n/gm) || []).length 170 | 171 | monacoOutput.setValue(updatedValue) 172 | monacoOutput.revealLine(totalLines) 173 | 174 | if (isError) { 175 | appendErrorHighlight(totalLines - 1) 176 | } 177 | 178 | monacoOutput.deltaDecorations([], visualState.console.errorHighlights) 179 | } 180 | 181 | const appendErrorHighlight = (lineNo: number) => { 182 | visualState.console.errorHighlights.push({ 183 | range: new monaco.Range(lineNo, 1, lineNo, 100), 184 | options: { inlineClassName: 'inlineDecoration' } 185 | }) 186 | } 187 | 188 | const clearCoverageDots = () => { 189 | monacoInput.deltaDecorations(visualState.editor.coverageDots, []) 190 | visualState.editor.clear() 191 | } 192 | 193 | amdRequire(['vs/editor/editor.main'], () => { 194 | monaco.editor.defineTheme('afeemTheme', afeemTheme) 195 | 196 | monaco.languages.registerCompletionItemProvider('javascript', { 197 | provideCompletionItems: () => autoCompletions 198 | }) 199 | 200 | initMonacoInput() 201 | initMonacoOutput() 202 | }) 203 | -------------------------------------------------------------------------------- /src/instrument.ts: -------------------------------------------------------------------------------- 1 | const istanbul = require('istanbul-lib-instrument') 2 | const instrumenter = istanbul.createInstrumenter({ noAutoWrap: true, compact: false }) 3 | 4 | module.exports = function instrument(code) { 5 | const filename = `f-${new Date().getTime()}` 6 | let evalError = null 7 | 8 | try { 9 | eval(instrumenter.instrumentSync(code, filename)) 10 | } catch (error) { 11 | evalError = error 12 | } 13 | 14 | /** 15 | * Return early when unable to execute the code 16 | */ 17 | if (evalError) { 18 | return { 19 | error: evalError, 20 | lines: [], 21 | } 22 | } 23 | 24 | /** 25 | * An array of executed and lines. 26 | */ 27 | const executedLines = [] 28 | // @ts-ignore 29 | const statementsMap = __coverage__[filename]['statementMap'] 30 | // @ts-ignore 31 | const statementsIterations = __coverage__[filename]['s'] 32 | 33 | Object.keys(statementsIterations).forEach((index) => { 34 | const statement = statementsMap[index] 35 | if (statementsIterations[index] > 0) { 36 | executedLines.push(statement.start.line) 37 | } 38 | }) 39 | 40 | return { 41 | error: evalError, 42 | lines: executedLines.map((line) => { 43 | return { 44 | range: { 45 | startLineNumber: line, 46 | startColumn: 1, 47 | endLineNumber: line, 48 | endColumn: 1 49 | }, 50 | options: { 51 | linesDecorationsClassName: 'dotDecoration' 52 | } 53 | } 54 | }) 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import { app, BrowserWindow, Menu } from 'electron' 2 | import menuTemplate from './menu' 3 | 4 | let appWindow: Electron.BrowserWindow 5 | 6 | const createAppWindow = () => { 7 | appWindow = new BrowserWindow({ 8 | width: 1140, 9 | height: 680, 10 | backgroundColor: '#161618', 11 | titleBarStyle: 'hidden', 12 | webPreferences: { 13 | nodeIntegration: true 14 | } 15 | }) 16 | 17 | appWindow.loadURL(`file://${__dirname}/index.html`) 18 | 19 | appWindow.on('closed', () => { 20 | appWindow = null 21 | }) 22 | 23 | // appWindow.webContents.openDevTools() 24 | 25 | const appMenu = Menu.buildFromTemplate(menuTemplate) 26 | Menu.setApplicationMenu(appMenu) 27 | } 28 | 29 | app.on('ready', createAppWindow) 30 | 31 | app.on('window-all-closed', () => { 32 | if (process.platform !== 'darwin') { 33 | app.quit() 34 | } 35 | }) 36 | 37 | app.on('activate', () => { 38 | // On OS X it's common to re-create a window in the app when the 39 | // dock icon is clicked and there are no other windows open. 40 | if (appWindow === null) { 41 | createAppWindow() 42 | } 43 | }) 44 | -------------------------------------------------------------------------------- /src/menu.ts: -------------------------------------------------------------------------------- 1 | import { app, shell } from 'electron' 2 | 3 | const edit = { 4 | label: 'Edit', 5 | submenu: [ 6 | { role: 'undo' }, 7 | { role: 'redo' }, 8 | { type: 'separator' }, 9 | { role: 'cut' }, 10 | { role: 'copy' }, 11 | { role: 'paste' }, 12 | { role: 'selectall' } 13 | ] 14 | } 15 | 16 | const view = { 17 | label: 'View', 18 | submenu: [ 19 | { role: 'resetzoom' }, 20 | { role: 'zoomin' }, 21 | { role: 'zoomout' }, 22 | { type: 'separator' }, 23 | { role: 'togglefullscreen' } 24 | ] 25 | } 26 | 27 | const window = { 28 | role: 'window', 29 | submenu: [ 30 | { role: 'close' }, 31 | { role: 'minimize' }, 32 | { role: 'zoom' } 33 | ] 34 | } 35 | 36 | const help = { 37 | role: 'help', 38 | submenu: [ 39 | { 40 | label: 'Github repo', 41 | click() { shell.openExternal('https://github.com/pb03/opium-js') } 42 | } 43 | ] 44 | } 45 | 46 | const menuTemplate: any[] = [edit, view, window, help] 47 | 48 | if (process.platform === 'darwin') { 49 | menuTemplate.unshift({ 50 | label: app.name, 51 | submenu: [ 52 | { role: 'about' }, 53 | { type: 'separator' }, 54 | { role: 'hide' }, 55 | { role: 'hideothers' }, 56 | { role: 'unhide' }, 57 | { type: 'separator' }, 58 | { role: 'quit' } 59 | ] 60 | }) 61 | } 62 | 63 | export default menuTemplate 64 | -------------------------------------------------------------------------------- /src/output.ts: -------------------------------------------------------------------------------- 1 | const { inspect } = require('util') 2 | 3 | const output = (code: any) => { 4 | if (code === console.log) return 5 | 6 | if (typeof code === 'function') { 7 | /** 8 | * Instanbul alters the input code and adds `cov` statements to know if 9 | * a function is executed or not. We need to trim them off, when 10 | * logging the function to console. 11 | */ 12 | return code.toString().split('\n').filter((line: string) => { 13 | return !line.trim().startsWith('cov') 14 | }).join('\n') 15 | } 16 | 17 | // If cyclic, ignore nested objects 18 | const depth: number = isCyclic(code) ? 0 : 100 19 | 20 | // If output is less than 55 characters long, 21 | // log it in one line 22 | const isCompact: boolean = Array.isArray(code) && inspect(code).length < 55 23 | 24 | return inspect(code, { 25 | compact: isCompact, 26 | depth: depth, 27 | breakLength: Infinity 28 | }) 29 | } 30 | 31 | const isCyclic = obj => { 32 | try { 33 | JSON.stringify(obj) 34 | } catch (error) { 35 | return error.message.includes('Converting circular structure to JSON') 36 | } 37 | return false 38 | } 39 | 40 | module.exports = output 41 | -------------------------------------------------------------------------------- /src/theme.ts: -------------------------------------------------------------------------------- 1 | const theme = { 2 | base: 'vs-dark', 3 | inherit: true, 4 | rules: [ 5 | { token: 'keyword.js', foreground: '#8074da' }, 6 | { token: 'delimiter.js', foreground: '#A7A9B2' }, 7 | { token: 'delimiter.square.js', foreground: '#A7A9B2' }, 8 | { token: 'delimiter.bracket.js', foreground: '#A7A9B2' }, 9 | { token: 'delimiter.parenthesis.js', foreground: '#A7A9B2' }, 10 | { token: 'number.js', foreground: '#EDB985' }, 11 | { token: 'string.js', foreground: '#A6C9E2' }, 12 | { token: 'comment', foreground: '#4B4B55', fontStyle: 'italic' } 13 | ], 14 | colors: { 15 | 'editor.background': '#161618', 16 | 'editorIndentGuide.background': '#313137', 17 | 'editorIndentGuide.activeBackground': '#313137', 18 | 'editorLineNumber.foreground': '#3F3F49', 19 | 'editorLineNumber.activeForeground': '#76768B', 20 | 'editorBracketMatch.border': '#3F3F49', 21 | } 22 | } 23 | 24 | module.exports = theme 25 | -------------------------------------------------------------------------------- /src/ui.ts: -------------------------------------------------------------------------------- 1 | const DOWN_ARROW_KEY_CODE = 40 2 | const UP_ARROW_KEY_CODE = 38 3 | const ESCAPE_KEY_CODE = 27 4 | 5 | type ResultItem = { 6 | name: string 7 | latest: string 8 | } 9 | 10 | /** 11 | * Package popup 12 | */ 13 | const $package = document.getElementById('package') as HTMLDivElement 14 | const $packageInput = document.getElementById('package-input') as HTMLInputElement 15 | const $loadedList = document.getElementById('loaded-list') as HTMLUListElement 16 | const $addPackageTrigger = document.getElementById('add-package-trigger') as HTMLSpanElement 17 | const $packageForm = document.getElementById('package-form') as HTMLFormElement 18 | const $packageListContainer = document.getElementById('dropdown-container') as HTMLDivElement 19 | const $closePackagePopup = document.getElementById('close-package-popup') as HTMLSpanElement 20 | 21 | let _selectedPackageName = '' 22 | let _typingTimeout = null 23 | 24 | /** 25 | * Fetches the list of packages from cdnjs.com 26 | */ 27 | const _fetchPackageList = async () => { 28 | const searchTerm: string = $packageInput.value 29 | const response = await fetch(`https://api.cdnjs.com/libraries?search=${searchTerm}`) 30 | const data = await response.json() 31 | // Always remove previous dropdown if present 32 | _removePackageDropdown() 33 | if (data.results.length) { 34 | _createDropdown(data.results) 35 | } 36 | } 37 | 38 | /** 39 | * Filters and returns only JS libraries 40 | */ 41 | const _getFilteredResults = (results: ResultItem[]) => { 42 | return results.filter(item => /\.js$/.test(item.latest)) 43 | } 44 | 45 | /** 46 | * Renders dropdown for the list of packages 47 | */ 48 | const _createDropdown = (results: ResultItem[]) => { 49 | const $ul = document.createElement('ul') 50 | $ul.setAttribute('id', 'package-list') 51 | $ul.setAttribute('class', 'package__list') 52 | $packageListContainer.appendChild($ul) 53 | 54 | const jsPackages = _getFilteredResults(results) 55 | 56 | for (let i = 0; i < jsPackages.length; i++) { 57 | const $li = document.createElement('li') 58 | $li.setAttribute('class', 'package__list-item') 59 | $li.setAttribute('data-url', jsPackages[i].latest) 60 | $li.appendChild(document.createTextNode(jsPackages[i].name)) 61 | $li.addEventListener('click', _setSelectedListItem) 62 | $li.addEventListener('mouseover', _hoverItem) 63 | $li.addEventListener('mouseout', _unhoverItem) 64 | $ul.appendChild($li) 65 | } 66 | 67 | _focusFirstItem() 68 | } 69 | 70 | const _handleDropdownNavigation = (e: KeyboardEvent) => { 71 | const $isDropdownVisible = document.getElementById('package-list') 72 | if (!$isDropdownVisible) return 73 | 74 | switch (e.keyCode) { 75 | case DOWN_ARROW_KEY_CODE: 76 | _focusNextItem() 77 | return 78 | case UP_ARROW_KEY_CODE: 79 | _focusPreviousItem() 80 | return 81 | case ESCAPE_KEY_CODE: 82 | _removePackageDropdown() 83 | return 84 | } 85 | } 86 | 87 | const _hoverItem = e => { 88 | e.target.classList.add('is-active') 89 | } 90 | 91 | const _unhoverItem = e => { 92 | e.target.classList.remove('is-active') 93 | } 94 | 95 | const _focusFirstItem = () => { 96 | document.querySelector('.package__list-item').classList.add('is-active') 97 | } 98 | 99 | const _getActiveItem = () => { 100 | return document.querySelector('.package__list-item.is-active') as HTMLLIElement 101 | } 102 | 103 | const _focusNextItem = () => { 104 | const $currentItem: HTMLLIElement = _getActiveItem() 105 | $currentItem.classList.remove('is-active') 106 | const { nextSibling } = $currentItem 107 | if (nextSibling) { 108 | // @ts-ignore 109 | nextSibling.classList.add('is-active') 110 | // @ts-ignore 111 | nextSibling.scrollIntoView({ block: 'end', behavior: 'smooth' }) 112 | } else { 113 | _focusFirstItem() 114 | } 115 | } 116 | 117 | const _focusPreviousItem = () => { 118 | const $currentItem: HTMLLIElement = _getActiveItem() 119 | const { previousSibling } = $currentItem 120 | if (previousSibling) { 121 | $currentItem.classList.remove('is-active') 122 | // @ts-ignore 123 | previousSibling.classList.add('is-active') 124 | // @ts-ignore 125 | previousSibling.scrollIntoView({ behavior: 'smooth' }) 126 | } 127 | } 128 | 129 | /** 130 | * Selects the package on click 131 | */ 132 | const _setSelectedListItem = e => { 133 | const url: string = e.target.getAttribute('data-url') 134 | _removePackageDropdown() 135 | _selectedPackageName = e.target.innerText 136 | _opiumLoadJS(url) 137 | } 138 | 139 | /** 140 | * Removes package list dropdown from DOM 141 | */ 142 | const _removePackageDropdown = () => { 143 | const $dropdown = document.getElementById('package-list') 144 | if ($dropdown) { 145 | $dropdown.remove() 146 | } 147 | } 148 | 149 | /** 150 | * Triggers on Enter press, after filling package url 151 | */ 152 | const _onPackageFormSubmit = (e: KeyboardEvent) => { 153 | e.preventDefault() 154 | let url: string 155 | const activeItem: HTMLLIElement = document.querySelector('.package__list-item.is-active') 156 | if (activeItem) { // Package selected via keyboard navigation 157 | url = activeItem.getAttribute('data-url') 158 | _selectedPackageName = activeItem.innerText 159 | } else { // Custom url 160 | url = $packageInput.value 161 | _selectedPackageName = url.substr(url.lastIndexOf('/') + 1) 162 | } 163 | _removePackageDropdown() 164 | _opiumLoadJS(url) 165 | } 166 | 167 | /** 168 | * Load the selected script 169 | */ 170 | const _opiumLoadJS = async (url: string) => { 171 | if (!/^https:\/\//.test(url)) return 172 | const script = document.createElement('script') 173 | script.src = url 174 | document.head.appendChild(script) 175 | 176 | const isValid = await _verifyPackage(url) 177 | _appendToLoadedList(isValid) 178 | 179 | // Clear input after load 180 | $packageInput.value = '' 181 | 182 | _selectedPackageName = '' 183 | $packageInput.focus() 184 | } 185 | 186 | /** 187 | * Checks if the package includes DOM operations 188 | */ 189 | const _verifyPackage = async (url: string) => { 190 | const response = await fetch(url) 191 | const data = await response.text() 192 | return !/document\./g.test(data) 193 | } 194 | 195 | /** 196 | * Append package name to the list 197 | */ 198 | const _appendToLoadedList = (isValid: boolean) => { 199 | const $li = document.createElement('li') 200 | $li.setAttribute('class', 'loaded-list__item') 201 | $li.innerHTML = isValid 202 | ? `` 203 | : `` 204 | $li.appendChild(document.createTextNode(`${_selectedPackageName} ${isValid ? '' : '(DOM not available)'}`)) 205 | $loadedList.appendChild($li) 206 | } 207 | 208 | /** 209 | * Fetch packages on type 210 | */ 211 | const _handleType = (e: KeyboardEvent) => { 212 | if (e.keyCode === UP_ARROW_KEY_CODE || e.keyCode === DOWN_ARROW_KEY_CODE) { 213 | e.preventDefault() 214 | return 215 | } 216 | 217 | clearTimeout(_typingTimeout) 218 | _typingTimeout = setTimeout(() => { 219 | const $el = e.target as HTMLInputElement 220 | if ($el.value.length > 2) { 221 | _fetchPackageList() 222 | } else { 223 | _removePackageDropdown() 224 | } 225 | }, 500) 226 | } 227 | 228 | /** 229 | * Show/hide package popup 230 | */ 231 | const _togglePackagePopup = () => { 232 | $package.classList.toggle('popup-visible') 233 | 234 | // Trigger focus after popup animation finishes 235 | if (!$package.classList.contains('popup-visible')) return 236 | setTimeout(() => { 237 | $packageInput.focus() 238 | }, 100) 239 | } 240 | 241 | const _hidePackagePopup = () => { 242 | $package.classList.remove('popup-visible') 243 | } 244 | 245 | $packageInput.onkeyup = _handleType 246 | $packageInput.onkeydown = _handleDropdownNavigation 247 | $addPackageTrigger.onclick = _togglePackagePopup 248 | $packageForm.onsubmit = _onPackageFormSubmit 249 | $closePackagePopup.onclick = _hidePackagePopup 250 | 251 | /** 252 | * Help popup 253 | */ 254 | const $help = document.getElementById('help') as HTMLDivElement 255 | const $helpTrigger = document.getElementById('help-trigger') as HTMLDivElement 256 | const $closeHelp = document.getElementById('close-help') as HTMLSpanElement 257 | 258 | $helpTrigger.addEventListener('click', () => { 259 | $help.classList.toggle('popup-visible') 260 | }) 261 | 262 | $closeHelp.addEventListener('click', () => { 263 | $help.classList.remove('popup-visible') 264 | }) 265 | 266 | /** 267 | * Removes any visible popup on Esc 268 | */ 269 | document.addEventListener('keyup', (e: KeyboardEvent) => { 270 | if (e.keyCode === ESCAPE_KEY_CODE) { 271 | _removePackageDropdown() 272 | _hidePackagePopup() 273 | $help.classList.remove('popup-visible') 274 | } 275 | }) 276 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2015", 4 | "module": "commonjs", 5 | "sourceMap": false, 6 | "rootDir": "src", 7 | "outDir": ".", 8 | }, 9 | "exclude": [ 10 | "node_modules", 11 | "dist" 12 | ] 13 | } 14 | --------------------------------------------------------------------------------