├── .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 | 
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 |
380 |
381 |
382 |
383 |
384 |
385 |
386 |
387 |
opiumJS
388 |
389 |
399 |
400 |
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 |
--------------------------------------------------------------------------------