├── .eslintrc.js ├── .gitignore ├── LICENSE.md ├── README.md ├── highlight.html ├── highlight.js ├── index.html ├── main.js ├── package-lock.json ├── package.json ├── preload.js ├── renderer.js └── styles.css /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | "env": { 3 | "browser": true, 4 | "es6": true 5 | }, 6 | "globals": { 7 | "Atomics": "readonly", 8 | "SharedArrayBuffer": "readonly" 9 | }, 10 | "parserOptions": { 11 | "ecmaVersion": 2018 12 | }, 13 | "rules": { 14 | } 15 | }; -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | CC0 1.0 Universal 2 | ================== 3 | 4 | Statement of Purpose 5 | --------------------- 6 | 7 | The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work"). 8 | 9 | Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others. 10 | 11 | For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights. 12 | 13 | 1. Copyright and Related Rights. 14 | -------------------------------- 15 | A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following: 16 | 17 | i. the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work; 18 | ii. moral rights retained by the original author(s) and/or performer(s); 19 | iii. publicity and privacy rights pertaining to a person's image or likeness depicted in a Work; 20 | iv. rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below; 21 | v. rights protecting the extraction, dissemination, use and reuse of data in a Work; 22 | vi. database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and 23 | vii. other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof. 24 | 25 | 2. Waiver. 26 | ----------- 27 | To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose. 28 | 29 | 3. Public License Fallback. 30 | ---------------------------- 31 | Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose. 32 | 33 | 4. Limitations and Disclaimers. 34 | -------------------------------- 35 | 36 | a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document. 37 | b. Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law. 38 | c. Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work. 39 | d. Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work. 40 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Live Chat Window 2 | 3 | A simple transparent electron window to display latest messages from the [live-chat-manager server](https://github.com/CodingGarden/live-chat-manager/tree/master/server). 4 | 5 | ## Setup 6 | 7 | > index.html and renderer.js contain CodingGarden specific reward ids and bot userids, update accordingly 8 | 9 | ```sh 10 | npm install 11 | npm start 12 | ``` 13 | 14 | ![preview](https://i.imgur.com/t4edTlG.png) 15 | -------------------------------------------------------------------------------- /highlight.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 16 | Highlight Chat 17 | 18 | 19 | 20 |
21 | 22 |
28 |
29 | 31 | 32 | 33 | 34 | 35 |
36 | 40 |
41 | 42 | 43 | 44 | 45 |
46 | 47 | 48 | 49 | 50 | {{message.author.displayName}} 51 | 52 | 53 | 54 |
55 |

56 | 57 |

58 | 59 | 60 | 61 | 62 |
63 |
64 |
65 | 67 | 68 | 69 | 70 |
71 |
72 | {{message.timesent}} 73 |
74 |
75 |
76 |
77 | 78 | 79 | 80 | -------------------------------------------------------------------------------- /highlight.js: -------------------------------------------------------------------------------- 1 | /* eslint-env browser */ 2 | (async () => { 3 | DOMPurify.addHook('afterSanitizeAttributes', (node) => { 4 | if (node.hasAttribute('src')) { 5 | node.setAttribute('src', `https://external-content.duckduckgo.com/iu/?u=${node.getAttribute('src')}`); 6 | } 7 | }); 8 | 9 | function sanitize(message) { 10 | message.sanitized = DOMPurify 11 | .sanitize(marked(message.message), { 12 | FORBID_ATTR: [ 13 | 'style', 14 | 'onerror', 15 | 'onload', 16 | 'class', 17 | ], 18 | FORBID_TAGS: [ 19 | 'table', 20 | 'script', 21 | 'audio', 22 | 'video', 23 | 'style', 24 | 'iframe', 25 | 'object', 26 | 'embed', 27 | 'textarea', 28 | 'frame', 29 | 'frameset' 30 | ], 31 | }); 32 | } 33 | 34 | function setTimesent(message) { 35 | message.timesent = timeago.format(message.publishedAt); 36 | } 37 | 38 | const rewardColors = { 39 | '19c49b5f-bf65-4b3f-b0e0-68d2666f0db8': '#454ADEEE', 40 | '87b6d20b-8c36-4bd1-8d4f-e005e29e1b9a': '#C52233EE', 41 | 'a34d5787-9270-4e93-9cc2-2594a22aa81f': '#191923EE' 42 | }; 43 | 44 | function processMessage(message) { 45 | setTimesent(message); 46 | sanitize(message); 47 | if (message.reward) { 48 | message.bgColor = rewardColors[message.rewardId] || '#496A81EE'; 49 | } 50 | message.showSource = false; 51 | message.isPotentiallyNaughty = message.message.match(/<|>/i); 52 | } 53 | 54 | new Vue({ 55 | el: '#app', 56 | data: { 57 | messages: [], 58 | focus: false, 59 | botId: '519135902', 60 | broadcasterId: '413856795', 61 | }, 62 | async created() { 63 | if (localStorage.highlightedMessage) { 64 | setTimeout(() => { 65 | this.messages = [JSON.parse(localStorage.highlightedMessage)]; 66 | setTimeout(() => { 67 | window.resizeTo(window.innerWidth, this.$refs.app.clientHeight + 10); 68 | }, 700); 69 | }, 100); 70 | setInterval(() => { 71 | this.messages.forEach(setTimesent); 72 | }, 1000); 73 | } else { 74 | window.close(); 75 | } 76 | window.addEventListener('storage', () => { 77 | if (localStorage.highlightedMessage) { 78 | this.messages = [JSON.parse(localStorage.highlightedMessage)]; 79 | setTimeout(() => { 80 | window.resizeTo(window.innerWidth, this.$refs.app.clientHeight + 10); 81 | }, 700); 82 | } 83 | }); 84 | }, 85 | methods: { 86 | clearHighlight() { 87 | this.messages = []; 88 | setTimeout(() => { 89 | window.close(); 90 | }, 700); 91 | } 92 | } 93 | }); 94 | })(); -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | Live Chat 10 | 11 | 12 | 13 |
14 |
15 | 16 |
17 | 18 |
24 |
25 | 27 | 28 | 29 | 30 | 31 |
32 | 36 |
37 | 38 | 39 | 40 | 41 |
42 | 43 | 44 | 45 | 46 | {{message.author.displayName}} 47 | 48 | 49 | 50 | 51 | 52 | 53 |
54 |

55 | 56 |

57 | 58 | 59 | 60 | 61 |
62 |
63 | 64 |
65 | 67 | 68 | 69 | 70 |
71 |
72 | 73 | {{message.author.country_name}} 74 | 75 | {{message.timesent}} 76 |
77 |
78 |
79 |
80 | 81 | 82 | 83 | -------------------------------------------------------------------------------- /main.js: -------------------------------------------------------------------------------- 1 | // Modules to control application life and create native browser window 2 | const {app, BrowserWindow, ipcMain} = require('electron'); 3 | const path = require('path'); 4 | 5 | // Keep a global reference of the window object, if you don't, the window will 6 | // be closed automatically when the JavaScript object is garbage collected. 7 | let mainWindow; 8 | let highlightWindow; 9 | 10 | function createWindow () { 11 | // Create the browser window. 12 | mainWindow = new BrowserWindow({ 13 | title: 'Live Chat', 14 | closable: true, 15 | width: 640, 16 | height: 1080, 17 | frame: false, 18 | x: 1920 - 640, 19 | y: 30, 20 | hasShadow: false, 21 | transparent: true, 22 | titleBarStyle: 'customButtonsOnHover', 23 | minimizable: false, 24 | maximizable: false, 25 | // alwaysOnTop: true, 26 | backgroundColor: '#00FFFFFF', 27 | // type: 'desktop', 28 | webPreferences: { 29 | preload: path.join(__dirname, 'preload.js') 30 | } 31 | }); 32 | 33 | // and load the index.html of the app. 34 | mainWindow.loadFile('index.html'); 35 | 36 | // Open the DevTools. 37 | // mainWindow.webContents.openDevTools() 38 | 39 | // Emitted when the window is closed. 40 | mainWindow.on('closed', function () { 41 | // Dereference the window object, usually you would store windows 42 | // in an array if your app supports multi windows, this is the time 43 | // when you should delete the corresponding element. 44 | mainWindow = null; 45 | }); 46 | } 47 | 48 | function createHighlightWindow (message) { 49 | if (highlightWindow) { 50 | return; 51 | } 52 | // Create the browser window. 53 | highlightWindow = new BrowserWindow({ 54 | title: 'Highlight Chat', 55 | closable: true, 56 | width: 1000, 57 | height: 320, 58 | frame: false, 59 | x: 10, 60 | y: 1080 - 300, 61 | hasShadow: false, 62 | transparent: true, 63 | titleBarStyle: 'customButtonsOnHover', 64 | minimizable: false, 65 | maximizable: false, 66 | alwaysOnTop: true, 67 | backgroundColor: '#00FFFFFF', 68 | webPreferences: { 69 | preload: path.join(__dirname, 'preload.js') 70 | } 71 | }); 72 | 73 | // and load the index.html of the app. 74 | highlightWindow.loadFile('highlight.html'); 75 | 76 | // Open the DevTools. 77 | // mainWindow.webContents.openDevTools() 78 | 79 | // Emitted when the window is closed. 80 | highlightWindow.on('closed', function () { 81 | // Dereference the window object, usually you would store windows 82 | // in an array if your app supports multi windows, this is the time 83 | // when you should delete the corresponding element. 84 | highlightWindow = null; 85 | }); 86 | } 87 | 88 | // This method will be called when Electron has finished 89 | // initialization and is ready to create browser windows. 90 | // Some APIs can only be used after this event occurs. 91 | app.on('ready', createWindow); 92 | 93 | // Quit when all windows are closed. 94 | app.on('window-all-closed', function () { 95 | // On macOS it is common for applications and their menu bar 96 | // to stay active until the user quits explicitly with Cmd + Q 97 | if (process.platform !== 'darwin') app.quit(); 98 | }); 99 | 100 | app.on('web-contents-created', (e, contents) => { 101 | contents.on('will-navigate', (event, url) => { 102 | event.preventDefault(); 103 | console.log('blocked navigate:', url); 104 | }); 105 | contents.on('new-window', async (event, url) => { 106 | event.preventDefault(); 107 | console.log('blocked window:', url); 108 | }); 109 | }); 110 | 111 | app.on('activate', function () { 112 | // On macOS it's common to re-create a window in the app when the 113 | // dock icon is clicked and there are no other windows open. 114 | if (mainWindow === null) createWindow(); 115 | }); 116 | 117 | // In this file you can include the rest of your app's specific main process 118 | // code. You can also put them in separate files and require them here. 119 | 120 | ipcMain.on('highlightMessage', (message) => { 121 | createHighlightWindow(); 122 | }); 123 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "electron-quick-start", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@babel/code-frame": { 8 | "version": "7.8.3", 9 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", 10 | "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", 11 | "dev": true, 12 | "requires": { 13 | "@babel/highlight": "^7.8.3" 14 | } 15 | }, 16 | "@babel/helper-validator-identifier": { 17 | "version": "7.9.5", 18 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz", 19 | "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==", 20 | "dev": true 21 | }, 22 | "@babel/highlight": { 23 | "version": "7.9.0", 24 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", 25 | "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", 26 | "dev": true, 27 | "requires": { 28 | "@babel/helper-validator-identifier": "^7.9.0", 29 | "chalk": "^2.0.0", 30 | "js-tokens": "^4.0.0" 31 | }, 32 | "dependencies": { 33 | "chalk": { 34 | "version": "2.4.2", 35 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 36 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 37 | "dev": true, 38 | "requires": { 39 | "ansi-styles": "^3.2.1", 40 | "escape-string-regexp": "^1.0.5", 41 | "supports-color": "^5.3.0" 42 | } 43 | }, 44 | "escape-string-regexp": { 45 | "version": "1.0.5", 46 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 47 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 48 | "dev": true 49 | } 50 | } 51 | }, 52 | "@electron/get": { 53 | "version": "1.12.2", 54 | "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.12.2.tgz", 55 | "integrity": "sha512-vAuHUbfvBQpYTJ5wB7uVIDq5c/Ry0fiTBMs7lnEYAo/qXXppIVcWdfBr57u6eRnKdVso7KSiH6p/LbQAG6Izrg==", 56 | "dev": true, 57 | "requires": { 58 | "debug": "^4.1.1", 59 | "env-paths": "^2.2.0", 60 | "fs-extra": "^8.1.0", 61 | "global-agent": "^2.0.2", 62 | "global-tunnel-ng": "^2.7.1", 63 | "got": "^9.6.0", 64 | "progress": "^2.0.3", 65 | "sanitize-filename": "^1.6.2", 66 | "sumchecker": "^3.0.1" 67 | } 68 | }, 69 | "@fortawesome/fontawesome-free": { 70 | "version": "5.13.0", 71 | "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.13.0.tgz", 72 | "integrity": "sha512-xKOeQEl5O47GPZYIMToj6uuA2syyFlq9EMSl2ui0uytjY9xbe8XS0pexNWmxrdcCyNGyDmLyYw5FtKsalBUeOg==" 73 | }, 74 | "@sindresorhus/is": { 75 | "version": "0.14.0", 76 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", 77 | "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", 78 | "dev": true 79 | }, 80 | "@szmarczak/http-timer": { 81 | "version": "1.1.2", 82 | "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", 83 | "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", 84 | "dev": true, 85 | "requires": { 86 | "defer-to-connect": "^1.0.1" 87 | } 88 | }, 89 | "@types/color-name": { 90 | "version": "1.1.1", 91 | "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", 92 | "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", 93 | "dev": true 94 | }, 95 | "@types/node": { 96 | "version": "12.12.42", 97 | "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.42.tgz", 98 | "integrity": "sha512-R/9QdYFLL9dE9l5cWWzWIZByVGFd7lk7JVOJ7KD+E1SJ4gni7XJRLz9QTjyYQiHIqEAgku9VgxdLjMlhhUaAFg==", 99 | "dev": true 100 | }, 101 | "acorn": { 102 | "version": "7.2.0", 103 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.2.0.tgz", 104 | "integrity": "sha512-apwXVmYVpQ34m/i71vrApRrRKCWQnZZF1+npOD0WV5xZFfwWOmKGQ2RWlfdy9vWITsenisM8M0Qeq8agcFHNiQ==", 105 | "dev": true 106 | }, 107 | "acorn-jsx": { 108 | "version": "5.2.0", 109 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", 110 | "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", 111 | "dev": true 112 | }, 113 | "after": { 114 | "version": "0.8.2", 115 | "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", 116 | "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" 117 | }, 118 | "ajv": { 119 | "version": "6.12.2", 120 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", 121 | "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", 122 | "dev": true, 123 | "requires": { 124 | "fast-deep-equal": "^3.1.1", 125 | "fast-json-stable-stringify": "^2.0.0", 126 | "json-schema-traverse": "^0.4.1", 127 | "uri-js": "^4.2.2" 128 | } 129 | }, 130 | "ansi-escapes": { 131 | "version": "4.3.1", 132 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", 133 | "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", 134 | "dev": true, 135 | "requires": { 136 | "type-fest": "^0.11.0" 137 | }, 138 | "dependencies": { 139 | "type-fest": { 140 | "version": "0.11.0", 141 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", 142 | "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", 143 | "dev": true 144 | } 145 | } 146 | }, 147 | "ansi-regex": { 148 | "version": "5.0.0", 149 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", 150 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", 151 | "dev": true 152 | }, 153 | "ansi-styles": { 154 | "version": "3.2.1", 155 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 156 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 157 | "dev": true, 158 | "requires": { 159 | "color-convert": "^1.9.0" 160 | } 161 | }, 162 | "argparse": { 163 | "version": "1.0.10", 164 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 165 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 166 | "dev": true, 167 | "requires": { 168 | "sprintf-js": "~1.0.2" 169 | }, 170 | "dependencies": { 171 | "sprintf-js": { 172 | "version": "1.0.3", 173 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 174 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 175 | "dev": true 176 | } 177 | } 178 | }, 179 | "arraybuffer.slice": { 180 | "version": "0.0.7", 181 | "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", 182 | "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" 183 | }, 184 | "astral-regex": { 185 | "version": "1.0.0", 186 | "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", 187 | "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", 188 | "dev": true 189 | }, 190 | "async-limiter": { 191 | "version": "1.0.1", 192 | "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", 193 | "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" 194 | }, 195 | "backo2": { 196 | "version": "1.0.2", 197 | "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", 198 | "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" 199 | }, 200 | "balanced-match": { 201 | "version": "1.0.0", 202 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 203 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 204 | "dev": true 205 | }, 206 | "base64-arraybuffer": { 207 | "version": "0.1.5", 208 | "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", 209 | "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" 210 | }, 211 | "better-assert": { 212 | "version": "1.0.2", 213 | "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", 214 | "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", 215 | "requires": { 216 | "callsite": "1.0.0" 217 | } 218 | }, 219 | "blob": { 220 | "version": "0.0.5", 221 | "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", 222 | "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==" 223 | }, 224 | "boolean": { 225 | "version": "3.0.1", 226 | "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.0.1.tgz", 227 | "integrity": "sha512-HRZPIjPcbwAVQvOTxR4YE3o8Xs98NqbbL1iEZDCz7CL8ql0Lt5iOyJFxfnAB0oFs8Oh02F/lLlg30Mexv46LjA==", 228 | "dev": true, 229 | "optional": true 230 | }, 231 | "brace-expansion": { 232 | "version": "1.1.11", 233 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 234 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 235 | "dev": true, 236 | "requires": { 237 | "balanced-match": "^1.0.0", 238 | "concat-map": "0.0.1" 239 | } 240 | }, 241 | "buffer-crc32": { 242 | "version": "0.2.13", 243 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", 244 | "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", 245 | "dev": true 246 | }, 247 | "buffer-from": { 248 | "version": "1.1.1", 249 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 250 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", 251 | "dev": true 252 | }, 253 | "cacheable-request": { 254 | "version": "6.1.0", 255 | "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", 256 | "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", 257 | "dev": true, 258 | "requires": { 259 | "clone-response": "^1.0.2", 260 | "get-stream": "^5.1.0", 261 | "http-cache-semantics": "^4.0.0", 262 | "keyv": "^3.0.0", 263 | "lowercase-keys": "^2.0.0", 264 | "normalize-url": "^4.1.0", 265 | "responselike": "^1.0.2" 266 | }, 267 | "dependencies": { 268 | "get-stream": { 269 | "version": "5.1.0", 270 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", 271 | "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", 272 | "dev": true, 273 | "requires": { 274 | "pump": "^3.0.0" 275 | } 276 | }, 277 | "lowercase-keys": { 278 | "version": "2.0.0", 279 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", 280 | "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", 281 | "dev": true 282 | } 283 | } 284 | }, 285 | "callsite": { 286 | "version": "1.0.0", 287 | "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", 288 | "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" 289 | }, 290 | "callsites": { 291 | "version": "3.1.0", 292 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 293 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 294 | "dev": true 295 | }, 296 | "chalk": { 297 | "version": "4.0.0", 298 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz", 299 | "integrity": "sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==", 300 | "dev": true, 301 | "requires": { 302 | "ansi-styles": "^4.1.0", 303 | "supports-color": "^7.1.0" 304 | }, 305 | "dependencies": { 306 | "ansi-styles": { 307 | "version": "4.2.1", 308 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", 309 | "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", 310 | "dev": true, 311 | "requires": { 312 | "@types/color-name": "^1.1.1", 313 | "color-convert": "^2.0.1" 314 | } 315 | }, 316 | "color-convert": { 317 | "version": "2.0.1", 318 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 319 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 320 | "dev": true, 321 | "requires": { 322 | "color-name": "~1.1.4" 323 | } 324 | }, 325 | "color-name": { 326 | "version": "1.1.4", 327 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 328 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 329 | "dev": true 330 | }, 331 | "has-flag": { 332 | "version": "4.0.0", 333 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 334 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 335 | "dev": true 336 | }, 337 | "supports-color": { 338 | "version": "7.1.0", 339 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", 340 | "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", 341 | "dev": true, 342 | "requires": { 343 | "has-flag": "^4.0.0" 344 | } 345 | } 346 | } 347 | }, 348 | "chardet": { 349 | "version": "0.7.0", 350 | "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", 351 | "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", 352 | "dev": true 353 | }, 354 | "cli-cursor": { 355 | "version": "3.1.0", 356 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", 357 | "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", 358 | "dev": true, 359 | "requires": { 360 | "restore-cursor": "^3.1.0" 361 | } 362 | }, 363 | "cli-width": { 364 | "version": "2.2.1", 365 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", 366 | "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", 367 | "dev": true 368 | }, 369 | "clone-response": { 370 | "version": "1.0.2", 371 | "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", 372 | "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", 373 | "dev": true, 374 | "requires": { 375 | "mimic-response": "^1.0.0" 376 | } 377 | }, 378 | "color-convert": { 379 | "version": "1.9.3", 380 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 381 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 382 | "dev": true, 383 | "requires": { 384 | "color-name": "1.1.3" 385 | } 386 | }, 387 | "color-name": { 388 | "version": "1.1.3", 389 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 390 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 391 | "dev": true 392 | }, 393 | "component-bind": { 394 | "version": "1.0.0", 395 | "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", 396 | "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" 397 | }, 398 | "component-emitter": { 399 | "version": "1.2.1", 400 | "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", 401 | "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" 402 | }, 403 | "component-inherit": { 404 | "version": "0.0.3", 405 | "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", 406 | "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" 407 | }, 408 | "concat-map": { 409 | "version": "0.0.1", 410 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 411 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 412 | "dev": true 413 | }, 414 | "concat-stream": { 415 | "version": "1.6.2", 416 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", 417 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", 418 | "dev": true, 419 | "requires": { 420 | "buffer-from": "^1.0.0", 421 | "inherits": "^2.0.3", 422 | "readable-stream": "^2.2.2", 423 | "typedarray": "^0.0.6" 424 | } 425 | }, 426 | "config-chain": { 427 | "version": "1.1.12", 428 | "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", 429 | "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", 430 | "dev": true, 431 | "optional": true, 432 | "requires": { 433 | "ini": "^1.3.4", 434 | "proto-list": "~1.2.1" 435 | } 436 | }, 437 | "core-js": { 438 | "version": "3.6.5", 439 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", 440 | "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==", 441 | "dev": true, 442 | "optional": true 443 | }, 444 | "core-util-is": { 445 | "version": "1.0.2", 446 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 447 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 448 | "dev": true 449 | }, 450 | "cross-spawn": { 451 | "version": "7.0.2", 452 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.2.tgz", 453 | "integrity": "sha512-PD6G8QG3S4FK/XCGFbEQrDqO2AnMMsy0meR7lerlIOHAAbkuavGU/pOqprrlvfTNjvowivTeBsjebAL0NSoMxw==", 454 | "dev": true, 455 | "requires": { 456 | "path-key": "^3.1.0", 457 | "shebang-command": "^2.0.0", 458 | "which": "^2.0.1" 459 | } 460 | }, 461 | "debug": { 462 | "version": "4.1.1", 463 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 464 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 465 | "requires": { 466 | "ms": "^2.1.1" 467 | } 468 | }, 469 | "decompress-response": { 470 | "version": "3.3.0", 471 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", 472 | "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", 473 | "dev": true, 474 | "requires": { 475 | "mimic-response": "^1.0.0" 476 | } 477 | }, 478 | "deep-is": { 479 | "version": "0.1.3", 480 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 481 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", 482 | "dev": true 483 | }, 484 | "defer-to-connect": { 485 | "version": "1.1.3", 486 | "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", 487 | "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", 488 | "dev": true 489 | }, 490 | "define-properties": { 491 | "version": "1.1.3", 492 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 493 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 494 | "dev": true, 495 | "optional": true, 496 | "requires": { 497 | "object-keys": "^1.0.12" 498 | } 499 | }, 500 | "detect-node": { 501 | "version": "2.0.4", 502 | "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", 503 | "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", 504 | "dev": true, 505 | "optional": true 506 | }, 507 | "doctrine": { 508 | "version": "3.0.0", 509 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 510 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 511 | "dev": true, 512 | "requires": { 513 | "esutils": "^2.0.2" 514 | } 515 | }, 516 | "dompurify": { 517 | "version": "2.0.11", 518 | "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.0.11.tgz", 519 | "integrity": "sha512-qVoGPjIW9IqxRij7klDQQ2j6nSe4UNWANBhZNLnsS7ScTtLb+3YdxkRY8brNTpkUiTtcXsCJO+jS0UCDfenLuA==" 520 | }, 521 | "duplexer3": { 522 | "version": "0.1.4", 523 | "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", 524 | "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", 525 | "dev": true 526 | }, 527 | "electron": { 528 | "version": "9.0.0", 529 | "resolved": "https://registry.npmjs.org/electron/-/electron-9.0.0.tgz", 530 | "integrity": "sha512-JsaSQNPh+XDYkLj8APtVKTtvpb86KIG57W5OOss4TNrn8L3isC9LsCITwfnVmGIXHhvX6oY/weCtN5hAAytjVg==", 531 | "dev": true, 532 | "requires": { 533 | "@electron/get": "^1.0.1", 534 | "@types/node": "^12.0.12", 535 | "extract-zip": "^1.0.3" 536 | } 537 | }, 538 | "emoji-regex": { 539 | "version": "8.0.0", 540 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 541 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 542 | "dev": true 543 | }, 544 | "encodeurl": { 545 | "version": "1.0.2", 546 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 547 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", 548 | "dev": true, 549 | "optional": true 550 | }, 551 | "end-of-stream": { 552 | "version": "1.4.4", 553 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 554 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 555 | "dev": true, 556 | "requires": { 557 | "once": "^1.4.0" 558 | } 559 | }, 560 | "engine.io-client": { 561 | "version": "3.4.0", 562 | "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.4.0.tgz", 563 | "integrity": "sha512-a4J5QO2k99CM2a0b12IznnyQndoEvtA4UAldhGzKqnHf42I3Qs2W5SPnDvatZRcMaNZs4IevVicBPayxYt6FwA==", 564 | "requires": { 565 | "component-emitter": "1.2.1", 566 | "component-inherit": "0.0.3", 567 | "debug": "~4.1.0", 568 | "engine.io-parser": "~2.2.0", 569 | "has-cors": "1.1.0", 570 | "indexof": "0.0.1", 571 | "parseqs": "0.0.5", 572 | "parseuri": "0.0.5", 573 | "ws": "~6.1.0", 574 | "xmlhttprequest-ssl": "~1.5.4", 575 | "yeast": "0.1.2" 576 | } 577 | }, 578 | "engine.io-parser": { 579 | "version": "2.2.0", 580 | "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.0.tgz", 581 | "integrity": "sha512-6I3qD9iUxotsC5HEMuuGsKA0cXerGz+4uGcXQEkfBidgKf0amsjrrtwcbwK/nzpZBxclXlV7gGl9dgWvu4LF6w==", 582 | "requires": { 583 | "after": "0.8.2", 584 | "arraybuffer.slice": "~0.0.7", 585 | "base64-arraybuffer": "0.1.5", 586 | "blob": "0.0.5", 587 | "has-binary2": "~1.0.2" 588 | } 589 | }, 590 | "env-paths": { 591 | "version": "2.2.0", 592 | "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.0.tgz", 593 | "integrity": "sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==", 594 | "dev": true 595 | }, 596 | "es6-error": { 597 | "version": "4.1.1", 598 | "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", 599 | "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", 600 | "dev": true, 601 | "optional": true 602 | }, 603 | "escape-string-regexp": { 604 | "version": "2.0.0", 605 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", 606 | "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", 607 | "dev": true, 608 | "optional": true 609 | }, 610 | "eslint": { 611 | "version": "7.0.0", 612 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.0.0.tgz", 613 | "integrity": "sha512-qY1cwdOxMONHJfGqw52UOpZDeqXy8xmD0u8CT6jIstil72jkhURC704W8CFyTPDPllz4z4lu0Ql1+07PG/XdIg==", 614 | "dev": true, 615 | "requires": { 616 | "@babel/code-frame": "^7.0.0", 617 | "ajv": "^6.10.0", 618 | "chalk": "^4.0.0", 619 | "cross-spawn": "^7.0.2", 620 | "debug": "^4.0.1", 621 | "doctrine": "^3.0.0", 622 | "eslint-scope": "^5.0.0", 623 | "eslint-utils": "^2.0.0", 624 | "eslint-visitor-keys": "^1.1.0", 625 | "espree": "^7.0.0", 626 | "esquery": "^1.2.0", 627 | "esutils": "^2.0.2", 628 | "file-entry-cache": "^5.0.1", 629 | "functional-red-black-tree": "^1.0.1", 630 | "glob-parent": "^5.0.0", 631 | "globals": "^12.1.0", 632 | "ignore": "^4.0.6", 633 | "import-fresh": "^3.0.0", 634 | "imurmurhash": "^0.1.4", 635 | "inquirer": "^7.0.0", 636 | "is-glob": "^4.0.0", 637 | "js-yaml": "^3.13.1", 638 | "json-stable-stringify-without-jsonify": "^1.0.1", 639 | "levn": "^0.4.1", 640 | "lodash": "^4.17.14", 641 | "minimatch": "^3.0.4", 642 | "natural-compare": "^1.4.0", 643 | "optionator": "^0.9.1", 644 | "progress": "^2.0.0", 645 | "regexpp": "^3.1.0", 646 | "semver": "^7.2.1", 647 | "strip-ansi": "^6.0.0", 648 | "strip-json-comments": "^3.1.0", 649 | "table": "^5.2.3", 650 | "text-table": "^0.2.0", 651 | "v8-compile-cache": "^2.0.3" 652 | } 653 | }, 654 | "eslint-scope": { 655 | "version": "5.0.0", 656 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", 657 | "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", 658 | "dev": true, 659 | "requires": { 660 | "esrecurse": "^4.1.0", 661 | "estraverse": "^4.1.1" 662 | } 663 | }, 664 | "eslint-utils": { 665 | "version": "2.0.0", 666 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.0.0.tgz", 667 | "integrity": "sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA==", 668 | "dev": true, 669 | "requires": { 670 | "eslint-visitor-keys": "^1.1.0" 671 | } 672 | }, 673 | "eslint-visitor-keys": { 674 | "version": "1.1.0", 675 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", 676 | "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", 677 | "dev": true 678 | }, 679 | "espree": { 680 | "version": "7.0.0", 681 | "resolved": "https://registry.npmjs.org/espree/-/espree-7.0.0.tgz", 682 | "integrity": "sha512-/r2XEx5Mw4pgKdyb7GNLQNsu++asx/dltf/CI8RFi9oGHxmQFgvLbc5Op4U6i8Oaj+kdslhJtVlEZeAqH5qOTw==", 683 | "dev": true, 684 | "requires": { 685 | "acorn": "^7.1.1", 686 | "acorn-jsx": "^5.2.0", 687 | "eslint-visitor-keys": "^1.1.0" 688 | } 689 | }, 690 | "esprima": { 691 | "version": "4.0.1", 692 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 693 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 694 | "dev": true 695 | }, 696 | "esquery": { 697 | "version": "1.3.1", 698 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", 699 | "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", 700 | "dev": true, 701 | "requires": { 702 | "estraverse": "^5.1.0" 703 | }, 704 | "dependencies": { 705 | "estraverse": { 706 | "version": "5.1.0", 707 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz", 708 | "integrity": "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==", 709 | "dev": true 710 | } 711 | } 712 | }, 713 | "esrecurse": { 714 | "version": "4.2.1", 715 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", 716 | "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", 717 | "dev": true, 718 | "requires": { 719 | "estraverse": "^4.1.0" 720 | } 721 | }, 722 | "estraverse": { 723 | "version": "4.3.0", 724 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 725 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", 726 | "dev": true 727 | }, 728 | "esutils": { 729 | "version": "2.0.3", 730 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 731 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 732 | "dev": true 733 | }, 734 | "external-editor": { 735 | "version": "3.1.0", 736 | "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", 737 | "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", 738 | "dev": true, 739 | "requires": { 740 | "chardet": "^0.7.0", 741 | "iconv-lite": "^0.4.24", 742 | "tmp": "^0.0.33" 743 | } 744 | }, 745 | "extract-zip": { 746 | "version": "1.7.0", 747 | "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", 748 | "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", 749 | "dev": true, 750 | "requires": { 751 | "concat-stream": "^1.6.2", 752 | "debug": "^2.6.9", 753 | "mkdirp": "^0.5.4", 754 | "yauzl": "^2.10.0" 755 | }, 756 | "dependencies": { 757 | "debug": { 758 | "version": "2.6.9", 759 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 760 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 761 | "dev": true, 762 | "requires": { 763 | "ms": "2.0.0" 764 | } 765 | }, 766 | "ms": { 767 | "version": "2.0.0", 768 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 769 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 770 | "dev": true 771 | } 772 | } 773 | }, 774 | "fast-deep-equal": { 775 | "version": "3.1.1", 776 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", 777 | "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==", 778 | "dev": true 779 | }, 780 | "fast-json-stable-stringify": { 781 | "version": "2.1.0", 782 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 783 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 784 | "dev": true 785 | }, 786 | "fast-levenshtein": { 787 | "version": "2.0.6", 788 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 789 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 790 | "dev": true 791 | }, 792 | "fd-slicer": { 793 | "version": "1.1.0", 794 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", 795 | "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", 796 | "dev": true, 797 | "requires": { 798 | "pend": "~1.2.0" 799 | } 800 | }, 801 | "figures": { 802 | "version": "3.2.0", 803 | "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", 804 | "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", 805 | "dev": true, 806 | "requires": { 807 | "escape-string-regexp": "^1.0.5" 808 | }, 809 | "dependencies": { 810 | "escape-string-regexp": { 811 | "version": "1.0.5", 812 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 813 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 814 | "dev": true 815 | } 816 | } 817 | }, 818 | "file-entry-cache": { 819 | "version": "5.0.1", 820 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", 821 | "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", 822 | "dev": true, 823 | "requires": { 824 | "flat-cache": "^2.0.1" 825 | } 826 | }, 827 | "flag-icon-css": { 828 | "version": "3.4.6", 829 | "resolved": "https://registry.npmjs.org/flag-icon-css/-/flag-icon-css-3.4.6.tgz", 830 | "integrity": "sha512-rF69rt19Hr63SRQTiPBzQABaYB20LAgZhDkr/AxqSdgmCIN+tC5PRMz56Y0gxehFXJmdRwv55+GMi7R1fCRTwg==" 831 | }, 832 | "flat-cache": { 833 | "version": "2.0.1", 834 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", 835 | "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", 836 | "dev": true, 837 | "requires": { 838 | "flatted": "^2.0.0", 839 | "rimraf": "2.6.3", 840 | "write": "1.0.3" 841 | } 842 | }, 843 | "flatted": { 844 | "version": "2.0.2", 845 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", 846 | "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", 847 | "dev": true 848 | }, 849 | "fs-extra": { 850 | "version": "8.1.0", 851 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", 852 | "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", 853 | "dev": true, 854 | "requires": { 855 | "graceful-fs": "^4.2.0", 856 | "jsonfile": "^4.0.0", 857 | "universalify": "^0.1.0" 858 | } 859 | }, 860 | "fs.realpath": { 861 | "version": "1.0.0", 862 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 863 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 864 | "dev": true 865 | }, 866 | "functional-red-black-tree": { 867 | "version": "1.0.1", 868 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 869 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", 870 | "dev": true 871 | }, 872 | "get-stream": { 873 | "version": "4.1.0", 874 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", 875 | "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", 876 | "dev": true, 877 | "requires": { 878 | "pump": "^3.0.0" 879 | } 880 | }, 881 | "glob": { 882 | "version": "7.1.6", 883 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 884 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 885 | "dev": true, 886 | "requires": { 887 | "fs.realpath": "^1.0.0", 888 | "inflight": "^1.0.4", 889 | "inherits": "2", 890 | "minimatch": "^3.0.4", 891 | "once": "^1.3.0", 892 | "path-is-absolute": "^1.0.0" 893 | } 894 | }, 895 | "glob-parent": { 896 | "version": "5.1.1", 897 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", 898 | "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", 899 | "dev": true, 900 | "requires": { 901 | "is-glob": "^4.0.1" 902 | } 903 | }, 904 | "global-agent": { 905 | "version": "2.1.8", 906 | "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-2.1.8.tgz", 907 | "integrity": "sha512-VpBe/rhY6Rw2VDOTszAMNambg+4Qv8j0yiTNDYEXXXxkUNGWLHp8A3ztK4YDBbFNcWF4rgsec6/5gPyryya/+A==", 908 | "dev": true, 909 | "optional": true, 910 | "requires": { 911 | "boolean": "^3.0.0", 912 | "core-js": "^3.6.4", 913 | "es6-error": "^4.1.1", 914 | "matcher": "^2.1.0", 915 | "roarr": "^2.15.2", 916 | "semver": "^7.1.2", 917 | "serialize-error": "^5.0.0" 918 | } 919 | }, 920 | "global-tunnel-ng": { 921 | "version": "2.7.1", 922 | "resolved": "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz", 923 | "integrity": "sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg==", 924 | "dev": true, 925 | "optional": true, 926 | "requires": { 927 | "encodeurl": "^1.0.2", 928 | "lodash": "^4.17.10", 929 | "npm-conf": "^1.1.3", 930 | "tunnel": "^0.0.6" 931 | } 932 | }, 933 | "globals": { 934 | "version": "12.4.0", 935 | "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", 936 | "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", 937 | "dev": true, 938 | "requires": { 939 | "type-fest": "^0.8.1" 940 | } 941 | }, 942 | "globalthis": { 943 | "version": "1.0.1", 944 | "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.1.tgz", 945 | "integrity": "sha512-mJPRTc/P39NH/iNG4mXa9aIhNymaQikTrnspeCa2ZuJ+mH2QN/rXwtX3XwKrHqWgUQFbNZKtHM105aHzJalElw==", 946 | "dev": true, 947 | "optional": true, 948 | "requires": { 949 | "define-properties": "^1.1.3" 950 | } 951 | }, 952 | "got": { 953 | "version": "9.6.0", 954 | "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", 955 | "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", 956 | "dev": true, 957 | "requires": { 958 | "@sindresorhus/is": "^0.14.0", 959 | "@szmarczak/http-timer": "^1.1.2", 960 | "cacheable-request": "^6.0.0", 961 | "decompress-response": "^3.3.0", 962 | "duplexer3": "^0.1.4", 963 | "get-stream": "^4.1.0", 964 | "lowercase-keys": "^1.0.1", 965 | "mimic-response": "^1.0.1", 966 | "p-cancelable": "^1.0.0", 967 | "to-readable-stream": "^1.0.0", 968 | "url-parse-lax": "^3.0.0" 969 | } 970 | }, 971 | "graceful-fs": { 972 | "version": "4.2.4", 973 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", 974 | "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", 975 | "dev": true 976 | }, 977 | "has-binary2": { 978 | "version": "1.0.3", 979 | "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", 980 | "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", 981 | "requires": { 982 | "isarray": "2.0.1" 983 | }, 984 | "dependencies": { 985 | "isarray": { 986 | "version": "2.0.1", 987 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", 988 | "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" 989 | } 990 | } 991 | }, 992 | "has-cors": { 993 | "version": "1.1.0", 994 | "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", 995 | "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" 996 | }, 997 | "has-flag": { 998 | "version": "3.0.0", 999 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1000 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 1001 | "dev": true 1002 | }, 1003 | "http-cache-semantics": { 1004 | "version": "4.1.0", 1005 | "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", 1006 | "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", 1007 | "dev": true 1008 | }, 1009 | "iconv-lite": { 1010 | "version": "0.4.24", 1011 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 1012 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 1013 | "dev": true, 1014 | "requires": { 1015 | "safer-buffer": ">= 2.1.2 < 3" 1016 | } 1017 | }, 1018 | "ignore": { 1019 | "version": "4.0.6", 1020 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", 1021 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", 1022 | "dev": true 1023 | }, 1024 | "import-fresh": { 1025 | "version": "3.2.1", 1026 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", 1027 | "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", 1028 | "dev": true, 1029 | "requires": { 1030 | "parent-module": "^1.0.0", 1031 | "resolve-from": "^4.0.0" 1032 | } 1033 | }, 1034 | "imurmurhash": { 1035 | "version": "0.1.4", 1036 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 1037 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 1038 | "dev": true 1039 | }, 1040 | "indexof": { 1041 | "version": "0.0.1", 1042 | "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", 1043 | "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" 1044 | }, 1045 | "inflight": { 1046 | "version": "1.0.6", 1047 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1048 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1049 | "dev": true, 1050 | "requires": { 1051 | "once": "^1.3.0", 1052 | "wrappy": "1" 1053 | } 1054 | }, 1055 | "inherits": { 1056 | "version": "2.0.4", 1057 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1058 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1059 | "dev": true 1060 | }, 1061 | "ini": { 1062 | "version": "1.3.5", 1063 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", 1064 | "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", 1065 | "dev": true, 1066 | "optional": true 1067 | }, 1068 | "inquirer": { 1069 | "version": "7.1.0", 1070 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.1.0.tgz", 1071 | "integrity": "sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==", 1072 | "dev": true, 1073 | "requires": { 1074 | "ansi-escapes": "^4.2.1", 1075 | "chalk": "^3.0.0", 1076 | "cli-cursor": "^3.1.0", 1077 | "cli-width": "^2.0.0", 1078 | "external-editor": "^3.0.3", 1079 | "figures": "^3.0.0", 1080 | "lodash": "^4.17.15", 1081 | "mute-stream": "0.0.8", 1082 | "run-async": "^2.4.0", 1083 | "rxjs": "^6.5.3", 1084 | "string-width": "^4.1.0", 1085 | "strip-ansi": "^6.0.0", 1086 | "through": "^2.3.6" 1087 | }, 1088 | "dependencies": { 1089 | "ansi-styles": { 1090 | "version": "4.2.1", 1091 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", 1092 | "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", 1093 | "dev": true, 1094 | "requires": { 1095 | "@types/color-name": "^1.1.1", 1096 | "color-convert": "^2.0.1" 1097 | } 1098 | }, 1099 | "chalk": { 1100 | "version": "3.0.0", 1101 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", 1102 | "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", 1103 | "dev": true, 1104 | "requires": { 1105 | "ansi-styles": "^4.1.0", 1106 | "supports-color": "^7.1.0" 1107 | } 1108 | }, 1109 | "color-convert": { 1110 | "version": "2.0.1", 1111 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1112 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1113 | "dev": true, 1114 | "requires": { 1115 | "color-name": "~1.1.4" 1116 | } 1117 | }, 1118 | "color-name": { 1119 | "version": "1.1.4", 1120 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1121 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1122 | "dev": true 1123 | }, 1124 | "has-flag": { 1125 | "version": "4.0.0", 1126 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1127 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1128 | "dev": true 1129 | }, 1130 | "supports-color": { 1131 | "version": "7.1.0", 1132 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", 1133 | "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", 1134 | "dev": true, 1135 | "requires": { 1136 | "has-flag": "^4.0.0" 1137 | } 1138 | } 1139 | } 1140 | }, 1141 | "is-extglob": { 1142 | "version": "2.1.1", 1143 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1144 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 1145 | "dev": true 1146 | }, 1147 | "is-fullwidth-code-point": { 1148 | "version": "3.0.0", 1149 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1150 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1151 | "dev": true 1152 | }, 1153 | "is-glob": { 1154 | "version": "4.0.1", 1155 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 1156 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 1157 | "dev": true, 1158 | "requires": { 1159 | "is-extglob": "^2.1.1" 1160 | } 1161 | }, 1162 | "isarray": { 1163 | "version": "1.0.0", 1164 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1165 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 1166 | "dev": true 1167 | }, 1168 | "isexe": { 1169 | "version": "2.0.0", 1170 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1171 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 1172 | "dev": true 1173 | }, 1174 | "js-tokens": { 1175 | "version": "4.0.0", 1176 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1177 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 1178 | "dev": true 1179 | }, 1180 | "js-yaml": { 1181 | "version": "3.14.0", 1182 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", 1183 | "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", 1184 | "dev": true, 1185 | "requires": { 1186 | "argparse": "^1.0.7", 1187 | "esprima": "^4.0.0" 1188 | } 1189 | }, 1190 | "json-buffer": { 1191 | "version": "3.0.0", 1192 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", 1193 | "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", 1194 | "dev": true 1195 | }, 1196 | "json-schema-traverse": { 1197 | "version": "0.4.1", 1198 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 1199 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 1200 | "dev": true 1201 | }, 1202 | "json-stable-stringify-without-jsonify": { 1203 | "version": "1.0.1", 1204 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 1205 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", 1206 | "dev": true 1207 | }, 1208 | "json-stringify-safe": { 1209 | "version": "5.0.1", 1210 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 1211 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", 1212 | "dev": true, 1213 | "optional": true 1214 | }, 1215 | "jsonfile": { 1216 | "version": "4.0.0", 1217 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 1218 | "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", 1219 | "dev": true, 1220 | "requires": { 1221 | "graceful-fs": "^4.1.6" 1222 | } 1223 | }, 1224 | "keyv": { 1225 | "version": "3.1.0", 1226 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", 1227 | "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", 1228 | "dev": true, 1229 | "requires": { 1230 | "json-buffer": "3.0.0" 1231 | } 1232 | }, 1233 | "levn": { 1234 | "version": "0.4.1", 1235 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 1236 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 1237 | "dev": true, 1238 | "requires": { 1239 | "prelude-ls": "^1.2.1", 1240 | "type-check": "~0.4.0" 1241 | } 1242 | }, 1243 | "lodash": { 1244 | "version": "4.17.15", 1245 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", 1246 | "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", 1247 | "dev": true 1248 | }, 1249 | "lowercase-keys": { 1250 | "version": "1.0.1", 1251 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", 1252 | "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", 1253 | "dev": true 1254 | }, 1255 | "marked": { 1256 | "version": "1.1.0", 1257 | "resolved": "https://registry.npmjs.org/marked/-/marked-1.1.0.tgz", 1258 | "integrity": "sha512-EkE7RW6KcXfMHy2PA7Jg0YJE1l8UPEZE8k45tylzmZM30/r1M1MUXWQfJlrSbsTeh7m/XTwHbWUENvAJZpp1YA==" 1259 | }, 1260 | "matcher": { 1261 | "version": "2.1.0", 1262 | "resolved": "https://registry.npmjs.org/matcher/-/matcher-2.1.0.tgz", 1263 | "integrity": "sha512-o+nZr+vtJtgPNklyeUKkkH42OsK8WAfdgaJE2FNxcjLPg+5QbeEoT6vRj8Xq/iv18JlQ9cmKsEu0b94ixWf1YQ==", 1264 | "dev": true, 1265 | "optional": true, 1266 | "requires": { 1267 | "escape-string-regexp": "^2.0.0" 1268 | } 1269 | }, 1270 | "mimic-fn": { 1271 | "version": "2.1.0", 1272 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 1273 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", 1274 | "dev": true 1275 | }, 1276 | "mimic-response": { 1277 | "version": "1.0.1", 1278 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", 1279 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", 1280 | "dev": true 1281 | }, 1282 | "minimatch": { 1283 | "version": "3.0.4", 1284 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1285 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1286 | "dev": true, 1287 | "requires": { 1288 | "brace-expansion": "^1.1.7" 1289 | } 1290 | }, 1291 | "minimist": { 1292 | "version": "1.2.5", 1293 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 1294 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", 1295 | "dev": true 1296 | }, 1297 | "mkdirp": { 1298 | "version": "0.5.5", 1299 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", 1300 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", 1301 | "dev": true, 1302 | "requires": { 1303 | "minimist": "^1.2.5" 1304 | } 1305 | }, 1306 | "ms": { 1307 | "version": "2.1.2", 1308 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1309 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 1310 | }, 1311 | "mute-stream": { 1312 | "version": "0.0.8", 1313 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", 1314 | "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", 1315 | "dev": true 1316 | }, 1317 | "natural-compare": { 1318 | "version": "1.4.0", 1319 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 1320 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", 1321 | "dev": true 1322 | }, 1323 | "normalize-url": { 1324 | "version": "4.5.0", 1325 | "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", 1326 | "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", 1327 | "dev": true 1328 | }, 1329 | "npm-conf": { 1330 | "version": "1.1.3", 1331 | "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", 1332 | "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", 1333 | "dev": true, 1334 | "optional": true, 1335 | "requires": { 1336 | "config-chain": "^1.1.11", 1337 | "pify": "^3.0.0" 1338 | } 1339 | }, 1340 | "object-component": { 1341 | "version": "0.0.3", 1342 | "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", 1343 | "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" 1344 | }, 1345 | "object-keys": { 1346 | "version": "1.1.1", 1347 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 1348 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 1349 | "dev": true, 1350 | "optional": true 1351 | }, 1352 | "once": { 1353 | "version": "1.4.0", 1354 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1355 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1356 | "dev": true, 1357 | "requires": { 1358 | "wrappy": "1" 1359 | } 1360 | }, 1361 | "onetime": { 1362 | "version": "5.1.0", 1363 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", 1364 | "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", 1365 | "dev": true, 1366 | "requires": { 1367 | "mimic-fn": "^2.1.0" 1368 | } 1369 | }, 1370 | "optionator": { 1371 | "version": "0.9.1", 1372 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", 1373 | "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", 1374 | "dev": true, 1375 | "requires": { 1376 | "deep-is": "^0.1.3", 1377 | "fast-levenshtein": "^2.0.6", 1378 | "levn": "^0.4.1", 1379 | "prelude-ls": "^1.2.1", 1380 | "type-check": "^0.4.0", 1381 | "word-wrap": "^1.2.3" 1382 | } 1383 | }, 1384 | "os-tmpdir": { 1385 | "version": "1.0.2", 1386 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 1387 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", 1388 | "dev": true 1389 | }, 1390 | "p-cancelable": { 1391 | "version": "1.1.0", 1392 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", 1393 | "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", 1394 | "dev": true 1395 | }, 1396 | "parent-module": { 1397 | "version": "1.0.1", 1398 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 1399 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 1400 | "dev": true, 1401 | "requires": { 1402 | "callsites": "^3.0.0" 1403 | } 1404 | }, 1405 | "parseqs": { 1406 | "version": "0.0.5", 1407 | "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", 1408 | "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", 1409 | "requires": { 1410 | "better-assert": "~1.0.0" 1411 | } 1412 | }, 1413 | "parseuri": { 1414 | "version": "0.0.5", 1415 | "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", 1416 | "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", 1417 | "requires": { 1418 | "better-assert": "~1.0.0" 1419 | } 1420 | }, 1421 | "path-is-absolute": { 1422 | "version": "1.0.1", 1423 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1424 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1425 | "dev": true 1426 | }, 1427 | "path-key": { 1428 | "version": "3.1.1", 1429 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 1430 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 1431 | "dev": true 1432 | }, 1433 | "pend": { 1434 | "version": "1.2.0", 1435 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", 1436 | "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", 1437 | "dev": true 1438 | }, 1439 | "pify": { 1440 | "version": "3.0.0", 1441 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", 1442 | "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", 1443 | "dev": true, 1444 | "optional": true 1445 | }, 1446 | "prelude-ls": { 1447 | "version": "1.2.1", 1448 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 1449 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 1450 | "dev": true 1451 | }, 1452 | "prepend-http": { 1453 | "version": "2.0.0", 1454 | "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", 1455 | "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", 1456 | "dev": true 1457 | }, 1458 | "process-nextick-args": { 1459 | "version": "2.0.1", 1460 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 1461 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", 1462 | "dev": true 1463 | }, 1464 | "progress": { 1465 | "version": "2.0.3", 1466 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 1467 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 1468 | "dev": true 1469 | }, 1470 | "proto-list": { 1471 | "version": "1.2.4", 1472 | "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", 1473 | "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", 1474 | "dev": true, 1475 | "optional": true 1476 | }, 1477 | "pump": { 1478 | "version": "3.0.0", 1479 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 1480 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 1481 | "dev": true, 1482 | "requires": { 1483 | "end-of-stream": "^1.1.0", 1484 | "once": "^1.3.1" 1485 | } 1486 | }, 1487 | "punycode": { 1488 | "version": "2.1.1", 1489 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 1490 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 1491 | "dev": true 1492 | }, 1493 | "readable-stream": { 1494 | "version": "2.3.7", 1495 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 1496 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 1497 | "dev": true, 1498 | "requires": { 1499 | "core-util-is": "~1.0.0", 1500 | "inherits": "~2.0.3", 1501 | "isarray": "~1.0.0", 1502 | "process-nextick-args": "~2.0.0", 1503 | "safe-buffer": "~5.1.1", 1504 | "string_decoder": "~1.1.1", 1505 | "util-deprecate": "~1.0.1" 1506 | } 1507 | }, 1508 | "regexpp": { 1509 | "version": "3.1.0", 1510 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", 1511 | "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", 1512 | "dev": true 1513 | }, 1514 | "resolve-from": { 1515 | "version": "4.0.0", 1516 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 1517 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 1518 | "dev": true 1519 | }, 1520 | "responselike": { 1521 | "version": "1.0.2", 1522 | "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", 1523 | "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", 1524 | "dev": true, 1525 | "requires": { 1526 | "lowercase-keys": "^1.0.0" 1527 | } 1528 | }, 1529 | "restore-cursor": { 1530 | "version": "3.1.0", 1531 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", 1532 | "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", 1533 | "dev": true, 1534 | "requires": { 1535 | "onetime": "^5.1.0", 1536 | "signal-exit": "^3.0.2" 1537 | } 1538 | }, 1539 | "rimraf": { 1540 | "version": "2.6.3", 1541 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", 1542 | "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", 1543 | "dev": true, 1544 | "requires": { 1545 | "glob": "^7.1.3" 1546 | } 1547 | }, 1548 | "roarr": { 1549 | "version": "2.15.3", 1550 | "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.3.tgz", 1551 | "integrity": "sha512-AEjYvmAhlyxOeB9OqPUzQCo3kuAkNfuDk/HqWbZdFsqDFpapkTjiw+p4svNEoRLvuqNTxqfL+s+gtD4eDgZ+CA==", 1552 | "dev": true, 1553 | "optional": true, 1554 | "requires": { 1555 | "boolean": "^3.0.0", 1556 | "detect-node": "^2.0.4", 1557 | "globalthis": "^1.0.1", 1558 | "json-stringify-safe": "^5.0.1", 1559 | "semver-compare": "^1.0.0", 1560 | "sprintf-js": "^1.1.2" 1561 | } 1562 | }, 1563 | "run-async": { 1564 | "version": "2.4.1", 1565 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", 1566 | "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", 1567 | "dev": true 1568 | }, 1569 | "rxjs": { 1570 | "version": "6.5.5", 1571 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz", 1572 | "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==", 1573 | "dev": true, 1574 | "requires": { 1575 | "tslib": "^1.9.0" 1576 | } 1577 | }, 1578 | "safe-buffer": { 1579 | "version": "5.1.2", 1580 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1581 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 1582 | "dev": true 1583 | }, 1584 | "safer-buffer": { 1585 | "version": "2.1.2", 1586 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1587 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 1588 | "dev": true 1589 | }, 1590 | "sanitize-filename": { 1591 | "version": "1.6.3", 1592 | "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", 1593 | "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", 1594 | "dev": true, 1595 | "requires": { 1596 | "truncate-utf8-bytes": "^1.0.0" 1597 | } 1598 | }, 1599 | "semver": { 1600 | "version": "7.3.2", 1601 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", 1602 | "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", 1603 | "dev": true 1604 | }, 1605 | "semver-compare": { 1606 | "version": "1.0.0", 1607 | "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", 1608 | "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", 1609 | "dev": true, 1610 | "optional": true 1611 | }, 1612 | "serialize-error": { 1613 | "version": "5.0.0", 1614 | "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-5.0.0.tgz", 1615 | "integrity": "sha512-/VtpuyzYf82mHYTtI4QKtwHa79vAdU5OQpNPAmE/0UDdlGT0ZxHwC+J6gXkw29wwoVI8fMPsfcVHOwXtUQYYQA==", 1616 | "dev": true, 1617 | "optional": true, 1618 | "requires": { 1619 | "type-fest": "^0.8.0" 1620 | } 1621 | }, 1622 | "shebang-command": { 1623 | "version": "2.0.0", 1624 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 1625 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 1626 | "dev": true, 1627 | "requires": { 1628 | "shebang-regex": "^3.0.0" 1629 | } 1630 | }, 1631 | "shebang-regex": { 1632 | "version": "3.0.0", 1633 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 1634 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 1635 | "dev": true 1636 | }, 1637 | "signal-exit": { 1638 | "version": "3.0.3", 1639 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", 1640 | "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", 1641 | "dev": true 1642 | }, 1643 | "slice-ansi": { 1644 | "version": "2.1.0", 1645 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", 1646 | "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", 1647 | "dev": true, 1648 | "requires": { 1649 | "ansi-styles": "^3.2.0", 1650 | "astral-regex": "^1.0.0", 1651 | "is-fullwidth-code-point": "^2.0.0" 1652 | }, 1653 | "dependencies": { 1654 | "is-fullwidth-code-point": { 1655 | "version": "2.0.0", 1656 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 1657 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 1658 | "dev": true 1659 | } 1660 | } 1661 | }, 1662 | "socket.io-client": { 1663 | "version": "2.3.0", 1664 | "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.3.0.tgz", 1665 | "integrity": "sha512-cEQQf24gET3rfhxZ2jJ5xzAOo/xhZwK+mOqtGRg5IowZsMgwvHwnf/mCRapAAkadhM26y+iydgwsXGObBB5ZdA==", 1666 | "requires": { 1667 | "backo2": "1.0.2", 1668 | "base64-arraybuffer": "0.1.5", 1669 | "component-bind": "1.0.0", 1670 | "component-emitter": "1.2.1", 1671 | "debug": "~4.1.0", 1672 | "engine.io-client": "~3.4.0", 1673 | "has-binary2": "~1.0.2", 1674 | "has-cors": "1.1.0", 1675 | "indexof": "0.0.1", 1676 | "object-component": "0.0.3", 1677 | "parseqs": "0.0.5", 1678 | "parseuri": "0.0.5", 1679 | "socket.io-parser": "~3.3.0", 1680 | "to-array": "0.1.4" 1681 | } 1682 | }, 1683 | "socket.io-parser": { 1684 | "version": "3.3.0", 1685 | "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.0.tgz", 1686 | "integrity": "sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==", 1687 | "requires": { 1688 | "component-emitter": "1.2.1", 1689 | "debug": "~3.1.0", 1690 | "isarray": "2.0.1" 1691 | }, 1692 | "dependencies": { 1693 | "debug": { 1694 | "version": "3.1.0", 1695 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 1696 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 1697 | "requires": { 1698 | "ms": "2.0.0" 1699 | } 1700 | }, 1701 | "isarray": { 1702 | "version": "2.0.1", 1703 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", 1704 | "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" 1705 | }, 1706 | "ms": { 1707 | "version": "2.0.0", 1708 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1709 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 1710 | } 1711 | } 1712 | }, 1713 | "sprintf-js": { 1714 | "version": "1.1.2", 1715 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", 1716 | "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", 1717 | "dev": true, 1718 | "optional": true 1719 | }, 1720 | "string-width": { 1721 | "version": "4.2.0", 1722 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", 1723 | "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", 1724 | "dev": true, 1725 | "requires": { 1726 | "emoji-regex": "^8.0.0", 1727 | "is-fullwidth-code-point": "^3.0.0", 1728 | "strip-ansi": "^6.0.0" 1729 | } 1730 | }, 1731 | "string_decoder": { 1732 | "version": "1.1.1", 1733 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 1734 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 1735 | "dev": true, 1736 | "requires": { 1737 | "safe-buffer": "~5.1.0" 1738 | } 1739 | }, 1740 | "strip-ansi": { 1741 | "version": "6.0.0", 1742 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 1743 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 1744 | "dev": true, 1745 | "requires": { 1746 | "ansi-regex": "^5.0.0" 1747 | } 1748 | }, 1749 | "strip-json-comments": { 1750 | "version": "3.1.0", 1751 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz", 1752 | "integrity": "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==", 1753 | "dev": true 1754 | }, 1755 | "sumchecker": { 1756 | "version": "3.0.1", 1757 | "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", 1758 | "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", 1759 | "dev": true, 1760 | "requires": { 1761 | "debug": "^4.1.0" 1762 | } 1763 | }, 1764 | "supports-color": { 1765 | "version": "5.5.0", 1766 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1767 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1768 | "dev": true, 1769 | "requires": { 1770 | "has-flag": "^3.0.0" 1771 | } 1772 | }, 1773 | "table": { 1774 | "version": "5.4.6", 1775 | "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", 1776 | "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", 1777 | "dev": true, 1778 | "requires": { 1779 | "ajv": "^6.10.2", 1780 | "lodash": "^4.17.14", 1781 | "slice-ansi": "^2.1.0", 1782 | "string-width": "^3.0.0" 1783 | }, 1784 | "dependencies": { 1785 | "ansi-regex": { 1786 | "version": "4.1.0", 1787 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 1788 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", 1789 | "dev": true 1790 | }, 1791 | "emoji-regex": { 1792 | "version": "7.0.3", 1793 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", 1794 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", 1795 | "dev": true 1796 | }, 1797 | "is-fullwidth-code-point": { 1798 | "version": "2.0.0", 1799 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 1800 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 1801 | "dev": true 1802 | }, 1803 | "string-width": { 1804 | "version": "3.1.0", 1805 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 1806 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 1807 | "dev": true, 1808 | "requires": { 1809 | "emoji-regex": "^7.0.1", 1810 | "is-fullwidth-code-point": "^2.0.0", 1811 | "strip-ansi": "^5.1.0" 1812 | } 1813 | }, 1814 | "strip-ansi": { 1815 | "version": "5.2.0", 1816 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 1817 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 1818 | "dev": true, 1819 | "requires": { 1820 | "ansi-regex": "^4.1.0" 1821 | } 1822 | } 1823 | } 1824 | }, 1825 | "text-table": { 1826 | "version": "0.2.0", 1827 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 1828 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 1829 | "dev": true 1830 | }, 1831 | "through": { 1832 | "version": "2.3.8", 1833 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 1834 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", 1835 | "dev": true 1836 | }, 1837 | "timeago.js": { 1838 | "version": "4.0.2", 1839 | "resolved": "https://registry.npmjs.org/timeago.js/-/timeago.js-4.0.2.tgz", 1840 | "integrity": "sha512-a7wPxPdVlQL7lqvitHGGRsofhdwtkoSXPGATFuSOA2i1ZNQEPLrGnj68vOp2sOJTCFAQVXPeNMX/GctBaO9L2w==" 1841 | }, 1842 | "tmp": { 1843 | "version": "0.0.33", 1844 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", 1845 | "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", 1846 | "dev": true, 1847 | "requires": { 1848 | "os-tmpdir": "~1.0.2" 1849 | } 1850 | }, 1851 | "to-array": { 1852 | "version": "0.1.4", 1853 | "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", 1854 | "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" 1855 | }, 1856 | "to-readable-stream": { 1857 | "version": "1.0.0", 1858 | "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", 1859 | "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", 1860 | "dev": true 1861 | }, 1862 | "truncate-utf8-bytes": { 1863 | "version": "1.0.2", 1864 | "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", 1865 | "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys=", 1866 | "dev": true, 1867 | "requires": { 1868 | "utf8-byte-length": "^1.0.1" 1869 | } 1870 | }, 1871 | "tslib": { 1872 | "version": "1.13.0", 1873 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", 1874 | "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", 1875 | "dev": true 1876 | }, 1877 | "tunnel": { 1878 | "version": "0.0.6", 1879 | "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", 1880 | "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", 1881 | "dev": true, 1882 | "optional": true 1883 | }, 1884 | "type-check": { 1885 | "version": "0.4.0", 1886 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 1887 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 1888 | "dev": true, 1889 | "requires": { 1890 | "prelude-ls": "^1.2.1" 1891 | } 1892 | }, 1893 | "type-fest": { 1894 | "version": "0.8.1", 1895 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", 1896 | "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", 1897 | "dev": true 1898 | }, 1899 | "typedarray": { 1900 | "version": "0.0.6", 1901 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 1902 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", 1903 | "dev": true 1904 | }, 1905 | "universalify": { 1906 | "version": "0.1.2", 1907 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 1908 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", 1909 | "dev": true 1910 | }, 1911 | "uri-js": { 1912 | "version": "4.2.2", 1913 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", 1914 | "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", 1915 | "dev": true, 1916 | "requires": { 1917 | "punycode": "^2.1.0" 1918 | } 1919 | }, 1920 | "url-parse-lax": { 1921 | "version": "3.0.0", 1922 | "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", 1923 | "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", 1924 | "dev": true, 1925 | "requires": { 1926 | "prepend-http": "^2.0.0" 1927 | } 1928 | }, 1929 | "utf8-byte-length": { 1930 | "version": "1.0.4", 1931 | "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", 1932 | "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=", 1933 | "dev": true 1934 | }, 1935 | "util-deprecate": { 1936 | "version": "1.0.2", 1937 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1938 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 1939 | "dev": true 1940 | }, 1941 | "v8-compile-cache": { 1942 | "version": "2.1.0", 1943 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", 1944 | "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==", 1945 | "dev": true 1946 | }, 1947 | "vue": { 1948 | "version": "2.6.11", 1949 | "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.11.tgz", 1950 | "integrity": "sha512-VfPwgcGABbGAue9+sfrD4PuwFar7gPb1yl1UK1MwXoQPAw0BKSqWfoYCT/ThFrdEVWoI51dBuyCoiNU9bZDZxQ==" 1951 | }, 1952 | "which": { 1953 | "version": "2.0.2", 1954 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 1955 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 1956 | "dev": true, 1957 | "requires": { 1958 | "isexe": "^2.0.0" 1959 | } 1960 | }, 1961 | "word-wrap": { 1962 | "version": "1.2.3", 1963 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", 1964 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", 1965 | "dev": true 1966 | }, 1967 | "wrappy": { 1968 | "version": "1.0.2", 1969 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1970 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1971 | "dev": true 1972 | }, 1973 | "write": { 1974 | "version": "1.0.3", 1975 | "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", 1976 | "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", 1977 | "dev": true, 1978 | "requires": { 1979 | "mkdirp": "^0.5.1" 1980 | } 1981 | }, 1982 | "ws": { 1983 | "version": "6.1.4", 1984 | "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz", 1985 | "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==", 1986 | "requires": { 1987 | "async-limiter": "~1.0.0" 1988 | } 1989 | }, 1990 | "xmlhttprequest-ssl": { 1991 | "version": "1.5.5", 1992 | "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", 1993 | "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" 1994 | }, 1995 | "yauzl": { 1996 | "version": "2.10.0", 1997 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", 1998 | "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", 1999 | "dev": true, 2000 | "requires": { 2001 | "buffer-crc32": "~0.2.3", 2002 | "fd-slicer": "~1.1.0" 2003 | } 2004 | }, 2005 | "yeast": { 2006 | "version": "0.1.2", 2007 | "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", 2008 | "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" 2009 | } 2010 | } 2011 | } 2012 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "electron-quick-start", 3 | "version": "1.0.0", 4 | "description": "A minimal Electron application", 5 | "main": "main.js", 6 | "scripts": { 7 | "start": "electron --enable-transparent-visuals ." 8 | }, 9 | "repository": "https://github.com/electron/electron-quick-start", 10 | "keywords": [ 11 | "Electron", 12 | "quick", 13 | "start", 14 | "tutorial", 15 | "demo" 16 | ], 17 | "author": "GitHub", 18 | "license": "CC0-1.0", 19 | "devDependencies": { 20 | "electron": "^9.0.0", 21 | "eslint": "^7.0.0" 22 | }, 23 | "dependencies": { 24 | "@fortawesome/fontawesome-free": "^5.13.0", 25 | "dompurify": "^2.0.11", 26 | "flag-icon-css": "^3.4.6", 27 | "marked": "^1.1.0", 28 | "socket.io-client": "^2.3.0", 29 | "timeago.js": "^4.0.2", 30 | "vue": "^2.6.11" 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /preload.js: -------------------------------------------------------------------------------- 1 | const Vue = require('vue/dist/vue'); 2 | const io = require('socket.io-client'); 3 | const timeago = require('timeago.js'); 4 | const marked = require('marked'); 5 | const createDOMPurify = require('dompurify'); 6 | const electron = require('electron'); 7 | 8 | window.DOMPurify = createDOMPurify(window); 9 | window.marked = marked; 10 | window.Vue = Vue; 11 | window.io = io; 12 | window.timeago = timeago; 13 | window.highlightMessage = (message) => { 14 | electron.ipcRenderer.send('highlightMessage'); 15 | }; -------------------------------------------------------------------------------- /renderer.js: -------------------------------------------------------------------------------- 1 | /* eslint-env browser */ 2 | (async () => { 3 | DOMPurify.addHook('afterSanitizeAttributes', (node) => { 4 | if (node.hasAttribute('src')) { 5 | node.setAttribute('src', `https://external-content.duckduckgo.com/iu/?u=${node.getAttribute('src')}`); 6 | } 7 | }); 8 | 9 | const API_URL = 'http://localhost:5000'; 10 | const id = await fetch(`${API_URL}/streams`) 11 | .then(res => res.json()) 12 | .then((events) => { 13 | if (events.length) { 14 | const event = events[0]; 15 | return event.snippet.liveChatId; 16 | } 17 | return new Date().toLocaleDateString(); 18 | }); 19 | 20 | console.log(id); 21 | 22 | function sanitize(message) { 23 | message.sanitized = DOMPurify 24 | .sanitize(marked(message.message), { 25 | FORBID_ATTR: [ 26 | 'style', 27 | 'onerror', 28 | 'onload', 29 | 'class', 30 | ], 31 | FORBID_TAGS: [ 32 | 'table', 33 | 'script', 34 | 'audio', 35 | 'video', 36 | 'style', 37 | 'iframe', 38 | 'object', 39 | 'embed', 40 | 'textarea', 41 | 'frame', 42 | 'frameset' 43 | ], 44 | }); 45 | } 46 | 47 | function setTimesent(message) { 48 | message.timesent = timeago.format(message.publishedAt); 49 | } 50 | 51 | const rewardColors = { 52 | '19c49b5f-bf65-4b3f-b0e0-68d2666f0db8': '#454ADEEE', 53 | '87b6d20b-8c36-4bd1-8d4f-e005e29e1b9a': '#C52233EE', 54 | 'a34d5787-9270-4e93-9cc2-2594a22aa81f': '#191923EE' 55 | }; 56 | 57 | function processMessage(message) { 58 | setTimesent(message); 59 | sanitize(message); 60 | if (message.reward) { 61 | message.bgColor = rewardColors[message.rewardId] || '#496A81EE'; 62 | } 63 | message.showSource = false; 64 | message.isPotentiallyNaughty = message.message.match(/<|>/i); 65 | } 66 | 67 | const messageIds = new Set(); 68 | new Vue({ 69 | el: '#app', 70 | data: { 71 | showSearch: false, 72 | messages: [], 73 | authors: {}, 74 | focus: false, 75 | botId: '519135902', 76 | broadcasterId: '413856795', 77 | filter: '', 78 | }, 79 | async created() { 80 | this.loadMessages(); 81 | this.listen(); 82 | window.addEventListener('keydown', (event) => { 83 | if (event.code === 'KeyF' && event.metaKey) { 84 | this.showSearch = !this.showSearch; 85 | setTimeout(() => { 86 | this.$refs.input.focus(); 87 | }, 200); 88 | } 89 | }); 90 | }, 91 | computed: { 92 | filteredMessages() { 93 | if (!this.filter) return this.messages; 94 | const filterMatch = new RegExp(this.filter, 'gi'); 95 | return this.messages.filter((message) => ( 96 | message.message.match(filterMatch) 97 | || message.author.displayName.match(filterMatch) 98 | )); 99 | } 100 | }, 101 | methods: { 102 | toggleShowCountry(message) { 103 | this.$set(message, 'showCountry', !message.showCountry); 104 | }, 105 | highlightMessage(message) { 106 | localStorage.highlightedMessage = JSON.stringify(message); 107 | window.highlightMessage(); 108 | }, 109 | listen() { 110 | const socket = io(API_URL); 111 | socket.on(`messages/${id}`, this.addLatestMessages); 112 | socket.on(`authors/${id}`, this.addLatestAuthors); 113 | socket.on(`message-deleted/${id}`, (messageId) => { 114 | this.removeMessage({ id: messageId }); 115 | }); 116 | }, 117 | removeMessage(message) { 118 | localStorage.setItem(`delete-${message.id}`, true); 119 | this.messages = this.messages.filter(m => !localStorage[`delete-${m.id}`]); 120 | }, 121 | async loadMessages() { 122 | const [messages, authors] = await Promise.all([ 123 | fetch(`${API_URL}/messages?id=${id}`).then(res => res.json()), 124 | fetch(`${API_URL}/authors?id=${id}`).then(res => res.json()), 125 | ]); 126 | const allMessages = messages.reduceRight((all, message) => { 127 | if (message.author.channelId === this.botId && message.message.includes('Focus mode ended')) { 128 | this.focus = false; 129 | } 130 | if (!messageIds.has(message.id) && !message.message.match(/^!\w/)) { 131 | all.push(message); 132 | processMessage(message); 133 | messageIds.add(message.id); 134 | } else if (message.author.channelId === this.broadcasterId && message.message.startsWith('!focus')) { 135 | const command = message.message; 136 | if (command.startsWith('!focus-start') || command.startsWith('!focus-resume')) { 137 | this.focus = true; 138 | } else if (command.startsWith('!focus-pause') || command.startsWith('!focus-end')) { 139 | this.focus = false; 140 | } 141 | } 142 | return all; 143 | }, []) 144 | .filter(m => !localStorage[`delete-${m.id}`]) 145 | .sort((a, b) => new Date(b.publishedAt) - new Date(a.publishedAt)) 146 | .slice(0, 500); 147 | 148 | this.messages = allMessages; 149 | this.authors = authors; 150 | setInterval(() => { 151 | this.messages.forEach(setTimesent); 152 | }, 1000); 153 | }, 154 | addLatestMessages(data) { 155 | const newMessages = data.reduce((all, message) => { 156 | if (message.author.channelId === this.botId && message.message.includes('Focus mode ended')) { 157 | this.focus = false; 158 | } 159 | if (!messageIds.has(message.id) && !message.message.match(/^!\w/)) { 160 | all.push(message); 161 | processMessage(message); 162 | messageIds.add(message.id); 163 | } else if (message.author.channelId === this.broadcasterId && message.message.startsWith('!focus')) { 164 | const command = message.message; 165 | if (command.startsWith('!focus-start') || command.startsWith('!focus-resume')) { 166 | this.focus = true; 167 | } else if (command.startsWith('!focus-pause') || command.startsWith('!focus-end')) { 168 | this.focus = false; 169 | } 170 | } 171 | return all; 172 | }, []); 173 | this.messages = [...newMessages, ...this.messages] 174 | .filter(m => !localStorage[`delete-${m.id}`]) 175 | .sort((a, b) => new Date(b.publishedAt) - new Date(a.publishedAt)) 176 | .slice(0, 500); 177 | }, 178 | addLatestAuthors(data) { 179 | data.forEach((author) => { 180 | this.$set(this.authors, author.channelId, author); 181 | }); 182 | } 183 | } 184 | }); 185 | })(); -------------------------------------------------------------------------------- /styles.css: -------------------------------------------------------------------------------- 1 | @import './node_modules/@fortawesome/fontawesome-free/css/fontawesome.min.css'; 2 | @import './node_modules/@fortawesome/fontawesome-free/css/brands.min.css'; 3 | @import './node_modules/flag-icon-css/css/flag-icon.min.css'; 4 | 5 | [v-cloak] { display: none; } 6 | 7 | body { 8 | margin: 0; 9 | padding: 0; 10 | background: rgba(0, 0, 0, 0); 11 | border: none; 12 | font-family: 'Montserrat', sans-serif; 13 | font-size: 1.5rem; 14 | } 15 | 16 | body::-webkit-scrollbar { 17 | display: none; 18 | } 19 | 20 | .search-input { 21 | border-radius: 20px; 22 | font-size: 1.5rem; 23 | margin: 0.5rem; 24 | padding: 1rem; 25 | width: 100%; 26 | box-sizing: border-box; 27 | opacity: 0.93; 28 | } 29 | 30 | .input-wrapper { 31 | display: flex; 32 | width: 100%; 33 | justify-content: flex-end; 34 | } 35 | 36 | .search-input:focus { 37 | outline: none; 38 | } 39 | 40 | .message { 41 | color: white; 42 | background: transparent; 43 | margin: 0.5rem; 44 | border-radius: 20px; 45 | padding: 1rem; 46 | max-height: 300px; 47 | overflow-y: auto; 48 | position: relative; 49 | } 50 | 51 | .author { 52 | display: flex; 53 | font-size: 1rem; 54 | align-items: center; 55 | height: 100%; 56 | } 57 | 58 | .author img { 59 | width: 50px; 60 | height: 50px; 61 | border-radius: 25px; 62 | margin-bottom: 0.25rem; 63 | } 64 | 65 | .author img.badge { 66 | width: 20px; 67 | height: 20px; 68 | border-radius: 0; 69 | margin-left: 6px; 70 | } 71 | 72 | .author .team-badge { 73 | max-height: 20px; 74 | width: auto; 75 | border-radius: 0; 76 | margin-left: 6px; 77 | } 78 | 79 | .author .name { 80 | margin-left: 0.5rem; 81 | font-size: 1.2rem; 82 | word-break: break-all; 83 | font-family: 'Fira Sans', sans-serif; 84 | } 85 | 86 | .author .avatar { 87 | position: relative; 88 | } 89 | 90 | .author .avatar .member-badge img { 91 | position: absolute; 92 | bottom: -2px; 93 | width: 25px; 94 | height: 25px; 95 | right: -5px; 96 | } 97 | 98 | .message .content { 99 | padding: 0.25rem; 100 | flex: 5; 101 | /* word-break: break-all; */ 102 | overflow-wrap: break-word; 103 | display: block; 104 | } 105 | 106 | .message .content textarea { 107 | width: 100%; 108 | font-size: 1.5rem; 109 | font-family: 'Courier New', Courier, monospace; 110 | } 111 | 112 | .message.youtube { 113 | background: #95190CEE; 114 | } 115 | 116 | .message.twitch { 117 | background: #392F5AEE; 118 | } 119 | 120 | .message.highlight { 121 | background: #BD2D87EE; 122 | } 123 | 124 | .message.follow { 125 | background: #99B2DDEE; 126 | color: black; 127 | font-weight: bold; 128 | } 129 | 130 | .time-sent { 131 | font-size: 0.75rem; 132 | text-align: right; 133 | display: block; 134 | } 135 | 136 | p { 137 | margin: 0; 138 | padding: 0; 139 | } 140 | 141 | .bottom-bar { 142 | margin-top: 1rem; 143 | display: flex; 144 | justify-content: space-between; 145 | } 146 | 147 | .button { 148 | margin: 0.25rem; 149 | cursor: pointer; 150 | } 151 | 152 | a, 153 | a:visited { 154 | color: #E6AF2E; 155 | } 156 | 157 | .messages-item { 158 | transition: all 500ms ease-in; 159 | } 160 | 161 | .messages-move { 162 | transition: transform 500ms; 163 | } 164 | 165 | .messages-enter-active, 166 | .messages-leave-active { 167 | transition: all 500ms ease-in; 168 | } 169 | 170 | .messages-enter, 171 | .messages-leave-to { 172 | opacity: 0; 173 | transform: translateY(-200px) translateX(600px); 174 | } 175 | 176 | .moderator .star { 177 | display: block; 178 | margin-left: 0.5rem; 179 | color: #FFB700; 180 | } 181 | 182 | .member .name { 183 | color: rgb(255, 221, 18); 184 | } 185 | 186 | .moderator .name { 187 | color: #22DE1F; 188 | } 189 | 190 | .delete-button { 191 | margin-top: 0.25rem; 192 | position: absolute; 193 | top: 0.5rem; 194 | right: 0.5rem; 195 | } 196 | 197 | .delete-button svg line { 198 | stroke: white; 199 | } 200 | 201 | .delete-button svg polygon { 202 | stroke: white; 203 | } 204 | 205 | img[src$="#emote"] { 206 | height: 50px; 207 | } 208 | 209 | img.badge.moderator { 210 | background: #23CE6B; 211 | } 212 | img.badge.vip { 213 | background: #BD2D87; 214 | } 215 | 216 | .badges-and-name { 217 | display: flex; 218 | justify-content: center; 219 | height: 100%; 220 | } 221 | 222 | .messages.focus { 223 | opacity: 0.2; 224 | transition: opacity 1s linear; 225 | } 226 | 227 | .buttons { 228 | display: flex; 229 | } 230 | 231 | i.team-badge { 232 | font-size: 1.5rem; 233 | } 234 | 235 | .country { 236 | margin-left: 1rem; 237 | cursor: pointer; 238 | } 239 | 240 | .country-name { 241 | font-size: 1rem; 242 | font-style: italic; 243 | opacity: 0.5; 244 | } --------------------------------------------------------------------------------