├── .gitignore ├── LICENSE.md ├── README.md ├── downloadBinary.js ├── index.html ├── main.js ├── package-lock.json ├── package.json ├── preload.js ├── renderer.js └── util.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .idea 3 | videos 4 | 5 | testing 6 | dist -------------------------------------------------------------------------------- /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 | # Video Downloader 2 | 3 | ## Powered by Electron and YouTube-DL 4 | 5 | ![alt text](https://user-images.githubusercontent.com/7200471/60479531-6273aa00-9c43-11e9-9b69-c250776efbc1.png) 6 | 7 | ## 8 | Installer for OS X available: [Here](https://github.com/mayeaux/videodownloader/releases/download/1.0.0/videodownloader-1.0.0.dmg) 9 | 10 | Installer for Windows available: [Here](https://github.com/mayeaux/videodownloader/releases/download/1.0.0/videodownloader.Setup.1.0.0.exe) 11 | 12 | NOTE: These installers are a bit outdated. The latest source code is your best bet as it has functionality to auto update youtube-dl on boot so it's always the latest version. I will recompile the app when I get a chance and update the executables here. 13 | 14 | ## To Use 15 | 16 | To clone and run this repository you'll need [Git](https://git-scm.com) and [Node.js](https://nodejs.org/en/download/) (which comes with [npm](http://npmjs.com)) installed on your computer. From your command line: 17 | 18 | ```bash 19 | # Clone this repository 20 | git clone https://github.com/mayeaux/videodownloader 21 | 22 | # Go into the repository 23 | cd videodownloader 24 | 25 | # Install dependencies 26 | npm install 27 | 28 | # Run the app 29 | npm start 30 | ``` 31 | 32 | Then paste a URL into the Video Url input, can either be a single video or a playlist, it should autopopulate the Title at which point you can change the title or the given save directory. 33 | 34 | ## Disclaimer 35 | 36 | It is your responsibility to know whether your usage conflicts with a platform's given TOS, app creators accept no responsibility for misuse of this application 37 | 38 | ## License 39 | 40 | [CC0 1.0 (Public Domain)](LICENSE.md) 41 | -------------------------------------------------------------------------------- /downloadBinary.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | const request = require('request') 4 | const mkdirp = require('mkdirp') 5 | const path = require('path') 6 | const fs = require('fs') 7 | 8 | const [, , ...flags] = process.argv 9 | 10 | const isWin = flags.includes('--platform=windows') || require('./util').isWin 11 | 12 | // First, look for the download link. 13 | let dir, filePath 14 | const defaultBin = path.join(__dirname, '..', 'bin') 15 | const defaultPath = path.join(defaultBin, 'details') 16 | const url = 'https://yt-dl.org/downloads/latest/youtube-dl' 17 | 18 | function download (url, callback) { 19 | let status 20 | 21 | // download the correct version of the binary based on the platform 22 | url = exec(url) 23 | 24 | request.get(url, { followRedirect: false, strictSSL: false }, function (err, res) { 25 | if (err) return callback(err) 26 | 27 | if (res.statusCode !== 302) { 28 | return callback( 29 | new Error( 30 | 'Did not get redirect for the latest version link. Status: ' + 31 | res.statusCode 32 | ) 33 | ) 34 | } 35 | 36 | const url = res.headers.location 37 | const downloadFile = request.get({ 38 | url, 39 | strictSSL: false 40 | }) 41 | const newVersion = /yt-dl\.org\/downloads\/(\d{4}\.\d\d\.\d\d(\.\d)?)\/youtube-dl/.exec( 42 | url 43 | )[1] 44 | 45 | downloadFile.on('response', function response (res) { 46 | if (res.statusCode !== 200) { 47 | status = new Error('Response Error: ' + res.statusCode) 48 | return 49 | } 50 | downloadFile.pipe(fs.createWriteStream(filePath, { mode: 493 })) 51 | }) 52 | 53 | downloadFile.on('error', function error (err) { 54 | callback(err) 55 | }) 56 | 57 | downloadFile.on('end', function end () { 58 | callback(status, newVersion) 59 | }) 60 | }) 61 | } 62 | 63 | const exec = path => (isWin ? path + '.exe' : path) 64 | 65 | function createBase (binDir) { 66 | dir = binDir || defaultBin 67 | mkdirp.sync(dir) 68 | if (binDir) mkdirp.sync(defaultBin) 69 | filePath = path.join(dir, exec('youtube-dl')) 70 | } 71 | 72 | function downloader (binDir, callback) { 73 | if (typeof binDir === 'function') { 74 | callback = binDir 75 | binDir = null 76 | } 77 | 78 | createBase(binDir) 79 | 80 | download(url, function error (err, newVersion) { 81 | if (err) return callback(err) 82 | fs.writeFileSync( 83 | defaultPath, 84 | JSON.stringify({ 85 | version: newVersion, 86 | path: binDir ? filePath : binDir, 87 | exec: exec('youtube-dl') 88 | }), 89 | 'utf8' 90 | ) 91 | return callback(null, 'Downloaded youtube-dl ' + newVersion) 92 | }) 93 | } 94 | 95 | module.exports = downloader 96 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Video Downloader 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 |

Video Downloader

16 | 17 |

110 Sites Supported

18 | 19 |

Code available at mayeaux/videodownloader

20 | 21 | 22 |
23 |
24 | 25 | 26 | 27 |

Download A Video

28 | 29 | 30 |
31 | 32 | 33 | 34 | 35 |
36 | 37 | 38 | 39 | 40 |
41 |
42 | 43 | 44 | 45 |
46 | 47 | 50 | 51 |
52 | 53 |
54 | 55 | 56 | 57 |
58 | 59 | 60 | 61 | 62 | 63 | 64 |
65 | 66 | 67 | 68 |
69 | 70 |
71 |
72 |
Status: Download Hasn't Started Yet
73 | 74 | 75 | 76 | 77 |
78 |
79 |
80 | 81 | 82 |
83 | 84 | 85 | 86 | 87 | 88 | 92 | 93 | -------------------------------------------------------------------------------- /main.js: -------------------------------------------------------------------------------- 1 | // Modules to control application life and create native browser window 2 | const {app, BrowserWindow} = 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 | 9 | function createWindow () { 10 | // Create the browser window. 11 | mainWindow = new BrowserWindow({ 12 | width: 800, 13 | height: 950, 14 | webPreferences: { 15 | preload: path.join(__dirname, 'preload.js'), 16 | nodeIntegration: true 17 | } 18 | }); 19 | 20 | // and load the index.html of the app. 21 | mainWindow.loadFile('index.html'); 22 | 23 | // Open the DevTools. 24 | // mainWindow.webContents.openDevTools() 25 | 26 | // Emitted when the window is closed. 27 | mainWindow.on('closed', function () { 28 | // Dereference the window object, usually you would store windows 29 | // in an array if your app supports multi windows, this is the time 30 | // when you should delete the corresponding element. 31 | mainWindow = null 32 | }) 33 | } 34 | 35 | // This method will be called when Electron has finished 36 | // initialization and is ready to create browser windows. 37 | // Some APIs can only be used after this event occurs. 38 | app.on('ready', createWindow); 39 | 40 | // Quit when all windows are closed. 41 | app.on('window-all-closed', function () { 42 | // On macOS it is common for applications and their menu bar 43 | // to stay active until the user quits explicitly with Cmd + Q 44 | if (process.platform !== 'darwin') app.quit() 45 | }); 46 | 47 | app.on('activate', function () { 48 | // On macOS it's common to re-create a window in the app when the 49 | // dock icon is clicked and there are no other windows open. 50 | if (mainWindow === null) createWindow() 51 | }); 52 | 53 | // In this file you can include the rest of your app's specific main process 54 | // code. You can also put them in separate files and require them here. 55 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "videodownloader", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "7zip-bin": { 8 | "version": "4.1.0", 9 | "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-4.1.0.tgz", 10 | "integrity": "sha512-AsnBZN3a8/JcNt+KPkGGODaA4c7l3W5+WpeKgGSbstSLxqWtTXqd1ieJGBQ8IFCtRg8DmmKUcSkIkUc0A4p3YA==", 11 | "dev": true 12 | }, 13 | "@ffmpeg-installer/darwin-x64": { 14 | "version": "4.1.0", 15 | "resolved": "https://registry.npmjs.org/@ffmpeg-installer/darwin-x64/-/darwin-x64-4.1.0.tgz", 16 | "integrity": "sha512-Z4EyG3cIFjdhlY8wI9aLUXuH8nVt7E9SlMVZtWvSPnm2sm37/yC2CwjUzyCQbJbySnef1tQwGG2Sx+uWhd9IAw==", 17 | "optional": true 18 | }, 19 | "@ffmpeg-installer/ffmpeg": { 20 | "version": "1.0.19", 21 | "resolved": "https://registry.npmjs.org/@ffmpeg-installer/ffmpeg/-/ffmpeg-1.0.19.tgz", 22 | "integrity": "sha512-cIhboAWGJSiQut6kE5DzljN2CO1RzYDaEJIje/RUl43yK1EQUHnpoeS9BLIulqM93o0ga9SRPKTqOgg76KYyfw==", 23 | "requires": { 24 | "@ffmpeg-installer/darwin-x64": "4.1.0", 25 | "@ffmpeg-installer/linux-arm": "4.1.3", 26 | "@ffmpeg-installer/linux-arm64": "4.1.3", 27 | "@ffmpeg-installer/linux-ia32": "4.1.0", 28 | "@ffmpeg-installer/linux-x64": "4.1.0", 29 | "@ffmpeg-installer/win32-ia32": "4.1.0", 30 | "@ffmpeg-installer/win32-x64": "4.1.0" 31 | } 32 | }, 33 | "@ffmpeg-installer/linux-arm": { 34 | "version": "4.1.3", 35 | "resolved": "https://registry.npmjs.org/@ffmpeg-installer/linux-arm/-/linux-arm-4.1.3.tgz", 36 | "integrity": "sha512-NDf5V6l8AfzZ8WzUGZ5mV8O/xMzRag2ETR6+TlGIsMHp81agx51cqpPItXPib/nAZYmo55Bl2L6/WOMI3A5YRg==", 37 | "optional": true 38 | }, 39 | "@ffmpeg-installer/linux-arm64": { 40 | "version": "4.1.3", 41 | "resolved": "https://registry.npmjs.org/@ffmpeg-installer/linux-arm64/-/linux-arm64-4.1.3.tgz", 42 | "integrity": "sha512-QBlK7H8H/ypnh619OJBASrikToEUUejGwLbl5H1UPNpZyLtlhhvvafDktISWAtR2qNHTfbi1ckLIgC6FMrE+lQ==", 43 | "optional": true 44 | }, 45 | "@ffmpeg-installer/linux-ia32": { 46 | "version": "4.1.0", 47 | "resolved": "https://registry.npmjs.org/@ffmpeg-installer/linux-ia32/-/linux-ia32-4.1.0.tgz", 48 | "integrity": "sha512-0LWyFQnPf+Ij9GQGD034hS6A90URNu9HCtQ5cTqo5MxOEc7Rd8gLXrJvn++UmxhU0J5RyRE9KRYstdCVUjkNOQ==", 49 | "optional": true 50 | }, 51 | "@ffmpeg-installer/linux-x64": { 52 | "version": "4.1.0", 53 | "resolved": "https://registry.npmjs.org/@ffmpeg-installer/linux-x64/-/linux-x64-4.1.0.tgz", 54 | "integrity": "sha512-Y5BWhGLU/WpQjOArNIgXD3z5mxxdV8c41C+U15nsE5yF8tVcdCGet5zPs5Zy3Ta6bU7haGpIzryutqCGQA/W8A==", 55 | "optional": true 56 | }, 57 | "@ffmpeg-installer/win32-ia32": { 58 | "version": "4.1.0", 59 | "resolved": "https://registry.npmjs.org/@ffmpeg-installer/win32-ia32/-/win32-ia32-4.1.0.tgz", 60 | "integrity": "sha512-FV2D7RlaZv/lrtdhaQ4oETwoFUsUjlUiasiZLDxhEUPdNDWcH1OU9K1xTvqz+OXLdsmYelUDuBS/zkMOTtlUAw==", 61 | "optional": true 62 | }, 63 | "@ffmpeg-installer/win32-x64": { 64 | "version": "4.1.0", 65 | "resolved": "https://registry.npmjs.org/@ffmpeg-installer/win32-x64/-/win32-x64-4.1.0.tgz", 66 | "integrity": "sha512-Drt5u2vzDnIONf4ZEkKtFlbvwj6rI3kxw1Ck9fpudmtgaZIHD4ucsWB2lCZBXRxJgXR+2IMSti+4rtM4C4rXgg==", 67 | "optional": true 68 | }, 69 | "@sindresorhus/is": { 70 | "version": "0.14.0", 71 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", 72 | "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", 73 | "dev": true 74 | }, 75 | "@szmarczak/http-timer": { 76 | "version": "1.1.2", 77 | "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", 78 | "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", 79 | "dev": true, 80 | "requires": { 81 | "defer-to-connect": "^1.0.1" 82 | } 83 | }, 84 | "@types/debug": { 85 | "version": "4.1.4", 86 | "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.4.tgz", 87 | "integrity": "sha512-D9MyoQFI7iP5VdpEyPZyjjqIJ8Y8EDNQFIFVLOmeg1rI1xiHOChyUPMPRUVfqFCerxfE+yS3vMyj37F6IdtOoQ==", 88 | "dev": true 89 | }, 90 | "@types/node": { 91 | "version": "10.14.10", 92 | "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.10.tgz", 93 | "integrity": "sha512-V8wj+w2YMNvGuhgl/MA5fmTxgjmVHVoasfIaxMMZJV6Y8Kk+Ydpi1z2whoShDCJ2BuNVoqH/h1hrygnBxkrw/Q==", 94 | "dev": true 95 | }, 96 | "ajv": { 97 | "version": "6.10.0", 98 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", 99 | "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", 100 | "requires": { 101 | "fast-deep-equal": "^2.0.1", 102 | "fast-json-stable-stringify": "^2.0.0", 103 | "json-schema-traverse": "^0.4.1", 104 | "uri-js": "^4.2.2" 105 | } 106 | }, 107 | "ajv-keywords": { 108 | "version": "3.4.0", 109 | "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", 110 | "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==", 111 | "dev": true 112 | }, 113 | "ansi-align": { 114 | "version": "3.0.0", 115 | "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", 116 | "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", 117 | "dev": true, 118 | "requires": { 119 | "string-width": "^3.0.0" 120 | }, 121 | "dependencies": { 122 | "ansi-regex": { 123 | "version": "4.1.0", 124 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 125 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", 126 | "dev": true 127 | }, 128 | "is-fullwidth-code-point": { 129 | "version": "2.0.0", 130 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 131 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 132 | "dev": true 133 | }, 134 | "string-width": { 135 | "version": "3.1.0", 136 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 137 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 138 | "dev": true, 139 | "requires": { 140 | "emoji-regex": "^7.0.1", 141 | "is-fullwidth-code-point": "^2.0.0", 142 | "strip-ansi": "^5.1.0" 143 | } 144 | }, 145 | "strip-ansi": { 146 | "version": "5.2.0", 147 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 148 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 149 | "dev": true, 150 | "requires": { 151 | "ansi-regex": "^4.1.0" 152 | } 153 | } 154 | } 155 | }, 156 | "ansi-regex": { 157 | "version": "2.1.1", 158 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 159 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", 160 | "dev": true 161 | }, 162 | "ansi-styles": { 163 | "version": "3.2.1", 164 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 165 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 166 | "dev": true, 167 | "requires": { 168 | "color-convert": "^1.9.0" 169 | } 170 | }, 171 | "app-builder-bin": { 172 | "version": "2.7.1", 173 | "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-2.7.1.tgz", 174 | "integrity": "sha512-ubIBeiL9XysjMW4HETBKxj3DC8ika6dGyC0vftPc0kZwGh1iXQ5bycsjoAqY/3t3BBEEIg0VruicvBaUl1pOSQ==", 175 | "dev": true 176 | }, 177 | "app-builder-lib": { 178 | "version": "20.44.4", 179 | "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-20.44.4.tgz", 180 | "integrity": "sha512-1K1xfrhyqDgnibwyuYMgvfwGilGLMF31YwOUJ8IXreyjRef9lUjWW+BZuBXqk4Uqd0C0EYPjhofgpuN0WoAQ+A==", 181 | "dev": true, 182 | "requires": { 183 | "7zip-bin": "~4.1.0", 184 | "app-builder-bin": "2.7.1", 185 | "async-exit-hook": "^2.0.1", 186 | "bluebird-lst": "^1.0.9", 187 | "builder-util": "10.1.2", 188 | "builder-util-runtime": "8.2.5", 189 | "chromium-pickle-js": "^0.2.0", 190 | "debug": "^4.1.1", 191 | "ejs": "^2.6.2", 192 | "electron-osx-sign": "0.4.11", 193 | "electron-publish": "20.44.4", 194 | "fs-extra-p": "^8.0.2", 195 | "hosted-git-info": "^2.7.1", 196 | "is-ci": "^2.0.0", 197 | "isbinaryfile": "^4.0.1", 198 | "js-yaml": "^3.13.1", 199 | "lazy-val": "^1.0.4", 200 | "minimatch": "^3.0.4", 201 | "normalize-package-data": "^2.5.0", 202 | "plist": "^3.0.1", 203 | "read-config-file": "3.2.2", 204 | "sanitize-filename": "^1.6.1", 205 | "semver": "^6.1.1", 206 | "temp-file": "^3.3.3" 207 | }, 208 | "dependencies": { 209 | "debug": { 210 | "version": "4.1.1", 211 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 212 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 213 | "dev": true, 214 | "requires": { 215 | "ms": "^2.1.1" 216 | } 217 | }, 218 | "semver": { 219 | "version": "6.2.0", 220 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.2.0.tgz", 221 | "integrity": "sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A==", 222 | "dev": true 223 | } 224 | } 225 | }, 226 | "argparse": { 227 | "version": "1.0.10", 228 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 229 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 230 | "dev": true, 231 | "requires": { 232 | "sprintf-js": "~1.0.2" 233 | } 234 | }, 235 | "array-find-index": { 236 | "version": "1.0.2", 237 | "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", 238 | "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", 239 | "dev": true 240 | }, 241 | "asn1": { 242 | "version": "0.2.4", 243 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", 244 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", 245 | "requires": { 246 | "safer-buffer": "~2.1.0" 247 | } 248 | }, 249 | "assert-plus": { 250 | "version": "1.0.0", 251 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 252 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 253 | }, 254 | "async-exit-hook": { 255 | "version": "2.0.1", 256 | "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", 257 | "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", 258 | "dev": true 259 | }, 260 | "asynckit": { 261 | "version": "0.4.0", 262 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 263 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 264 | }, 265 | "aws-sign2": { 266 | "version": "0.7.0", 267 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 268 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" 269 | }, 270 | "aws4": { 271 | "version": "1.8.0", 272 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", 273 | "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" 274 | }, 275 | "balanced-match": { 276 | "version": "1.0.0", 277 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 278 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 279 | "dev": true 280 | }, 281 | "base64-js": { 282 | "version": "1.3.0", 283 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", 284 | "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", 285 | "dev": true 286 | }, 287 | "bcrypt-pbkdf": { 288 | "version": "1.0.2", 289 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", 290 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", 291 | "requires": { 292 | "tweetnacl": "^0.14.3" 293 | } 294 | }, 295 | "bluebird": { 296 | "version": "3.5.5", 297 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", 298 | "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==", 299 | "dev": true 300 | }, 301 | "bluebird-lst": { 302 | "version": "1.0.9", 303 | "resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.9.tgz", 304 | "integrity": "sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw==", 305 | "dev": true, 306 | "requires": { 307 | "bluebird": "^3.5.5" 308 | } 309 | }, 310 | "boxen": { 311 | "version": "3.2.0", 312 | "resolved": "https://registry.npmjs.org/boxen/-/boxen-3.2.0.tgz", 313 | "integrity": "sha512-cU4J/+NodM3IHdSL2yN8bqYqnmlBTidDR4RC7nJs61ZmtGz8VZzM3HLQX0zY5mrSmPtR3xWwsq2jOUQqFZN8+A==", 314 | "dev": true, 315 | "requires": { 316 | "ansi-align": "^3.0.0", 317 | "camelcase": "^5.3.1", 318 | "chalk": "^2.4.2", 319 | "cli-boxes": "^2.2.0", 320 | "string-width": "^3.0.0", 321 | "term-size": "^1.2.0", 322 | "type-fest": "^0.3.0", 323 | "widest-line": "^2.0.0" 324 | }, 325 | "dependencies": { 326 | "ansi-regex": { 327 | "version": "4.1.0", 328 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 329 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", 330 | "dev": true 331 | }, 332 | "camelcase": { 333 | "version": "5.3.1", 334 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 335 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", 336 | "dev": true 337 | }, 338 | "is-fullwidth-code-point": { 339 | "version": "2.0.0", 340 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 341 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 342 | "dev": true 343 | }, 344 | "string-width": { 345 | "version": "3.1.0", 346 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 347 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 348 | "dev": true, 349 | "requires": { 350 | "emoji-regex": "^7.0.1", 351 | "is-fullwidth-code-point": "^2.0.0", 352 | "strip-ansi": "^5.1.0" 353 | } 354 | }, 355 | "strip-ansi": { 356 | "version": "5.2.0", 357 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 358 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 359 | "dev": true, 360 | "requires": { 361 | "ansi-regex": "^4.1.0" 362 | } 363 | } 364 | } 365 | }, 366 | "brace-expansion": { 367 | "version": "1.1.11", 368 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 369 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 370 | "dev": true, 371 | "requires": { 372 | "balanced-match": "^1.0.0", 373 | "concat-map": "0.0.1" 374 | } 375 | }, 376 | "buffer-alloc": { 377 | "version": "1.2.0", 378 | "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", 379 | "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", 380 | "dev": true, 381 | "requires": { 382 | "buffer-alloc-unsafe": "^1.1.0", 383 | "buffer-fill": "^1.0.0" 384 | } 385 | }, 386 | "buffer-alloc-unsafe": { 387 | "version": "1.1.0", 388 | "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", 389 | "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", 390 | "dev": true 391 | }, 392 | "buffer-fill": { 393 | "version": "1.0.0", 394 | "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", 395 | "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", 396 | "dev": true 397 | }, 398 | "buffer-from": { 399 | "version": "1.1.1", 400 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 401 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", 402 | "dev": true 403 | }, 404 | "builder-util": { 405 | "version": "10.1.2", 406 | "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-10.1.2.tgz", 407 | "integrity": "sha512-LQMh36Cg0r4ZfKqNlaUclndS/IXxZ3OdCgmXvw1vdP3QwYT2NkyE7LfMikAFIHpXOs6zsVH+iW+Fe/AX1jfFag==", 408 | "dev": true, 409 | "requires": { 410 | "7zip-bin": "~4.1.0", 411 | "@types/debug": "^4.1.4", 412 | "app-builder-bin": "2.7.1", 413 | "bluebird-lst": "^1.0.9", 414 | "builder-util-runtime": "^8.2.5", 415 | "chalk": "^2.4.2", 416 | "debug": "^4.1.1", 417 | "fs-extra-p": "^8.0.2", 418 | "is-ci": "^2.0.0", 419 | "js-yaml": "^3.13.1", 420 | "source-map-support": "^0.5.12", 421 | "stat-mode": "^0.3.0", 422 | "temp-file": "^3.3.3" 423 | }, 424 | "dependencies": { 425 | "debug": { 426 | "version": "4.1.1", 427 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 428 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 429 | "dev": true, 430 | "requires": { 431 | "ms": "^2.1.1" 432 | } 433 | } 434 | } 435 | }, 436 | "builder-util-runtime": { 437 | "version": "8.2.5", 438 | "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.2.5.tgz", 439 | "integrity": "sha512-YILT+YUlxrE3yNB6mDC1tF+Q24mr1LSYdjP5U861jbBeDZfvy1/VPDzW3boMVrDtzYnDnvkYrzLJnoh6TXA75w==", 440 | "dev": true, 441 | "requires": { 442 | "bluebird-lst": "^1.0.9", 443 | "debug": "^4.1.1", 444 | "fs-extra-p": "^8.0.2", 445 | "sax": "^1.2.4" 446 | }, 447 | "dependencies": { 448 | "debug": { 449 | "version": "4.1.1", 450 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 451 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 452 | "dev": true, 453 | "requires": { 454 | "ms": "^2.1.1" 455 | } 456 | } 457 | } 458 | }, 459 | "cacheable-request": { 460 | "version": "6.1.0", 461 | "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", 462 | "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", 463 | "dev": true, 464 | "requires": { 465 | "clone-response": "^1.0.2", 466 | "get-stream": "^5.1.0", 467 | "http-cache-semantics": "^4.0.0", 468 | "keyv": "^3.0.0", 469 | "lowercase-keys": "^2.0.0", 470 | "normalize-url": "^4.1.0", 471 | "responselike": "^1.0.2" 472 | }, 473 | "dependencies": { 474 | "get-stream": { 475 | "version": "5.1.0", 476 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", 477 | "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", 478 | "dev": true, 479 | "requires": { 480 | "pump": "^3.0.0" 481 | } 482 | }, 483 | "lowercase-keys": { 484 | "version": "2.0.0", 485 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", 486 | "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", 487 | "dev": true 488 | } 489 | } 490 | }, 491 | "camelcase": { 492 | "version": "2.1.1", 493 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", 494 | "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", 495 | "dev": true 496 | }, 497 | "camelcase-keys": { 498 | "version": "2.1.0", 499 | "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", 500 | "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", 501 | "dev": true, 502 | "requires": { 503 | "camelcase": "^2.0.0", 504 | "map-obj": "^1.0.0" 505 | } 506 | }, 507 | "caseless": { 508 | "version": "0.12.0", 509 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 510 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" 511 | }, 512 | "chalk": { 513 | "version": "2.4.2", 514 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 515 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 516 | "dev": true, 517 | "requires": { 518 | "ansi-styles": "^3.2.1", 519 | "escape-string-regexp": "^1.0.5", 520 | "supports-color": "^5.3.0" 521 | } 522 | }, 523 | "chromium-pickle-js": { 524 | "version": "0.2.0", 525 | "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", 526 | "integrity": "sha1-BKEGZywYsIWrd02YPfo+oTjyIgU=", 527 | "dev": true 528 | }, 529 | "ci-info": { 530 | "version": "2.0.0", 531 | "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", 532 | "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", 533 | "dev": true 534 | }, 535 | "cli-boxes": { 536 | "version": "2.2.0", 537 | "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.0.tgz", 538 | "integrity": "sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w==", 539 | "dev": true 540 | }, 541 | "cliui": { 542 | "version": "5.0.0", 543 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", 544 | "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", 545 | "dev": true, 546 | "requires": { 547 | "string-width": "^3.1.0", 548 | "strip-ansi": "^5.2.0", 549 | "wrap-ansi": "^5.1.0" 550 | }, 551 | "dependencies": { 552 | "ansi-regex": { 553 | "version": "4.1.0", 554 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 555 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", 556 | "dev": true 557 | }, 558 | "is-fullwidth-code-point": { 559 | "version": "2.0.0", 560 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 561 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 562 | "dev": true 563 | }, 564 | "string-width": { 565 | "version": "3.1.0", 566 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 567 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 568 | "dev": true, 569 | "requires": { 570 | "emoji-regex": "^7.0.1", 571 | "is-fullwidth-code-point": "^2.0.0", 572 | "strip-ansi": "^5.1.0" 573 | } 574 | }, 575 | "strip-ansi": { 576 | "version": "5.2.0", 577 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 578 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 579 | "dev": true, 580 | "requires": { 581 | "ansi-regex": "^4.1.0" 582 | } 583 | } 584 | } 585 | }, 586 | "clone-response": { 587 | "version": "1.0.2", 588 | "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", 589 | "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", 590 | "dev": true, 591 | "requires": { 592 | "mimic-response": "^1.0.0" 593 | } 594 | }, 595 | "code-point-at": { 596 | "version": "1.1.0", 597 | "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", 598 | "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", 599 | "dev": true 600 | }, 601 | "color-convert": { 602 | "version": "1.9.3", 603 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 604 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 605 | "dev": true, 606 | "requires": { 607 | "color-name": "1.1.3" 608 | } 609 | }, 610 | "color-name": { 611 | "version": "1.1.3", 612 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 613 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 614 | "dev": true 615 | }, 616 | "combined-stream": { 617 | "version": "1.0.8", 618 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 619 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 620 | "requires": { 621 | "delayed-stream": "~1.0.0" 622 | } 623 | }, 624 | "compare-version": { 625 | "version": "0.1.2", 626 | "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz", 627 | "integrity": "sha1-AWLsLZNR9d3VmpICy6k1NmpyUIA=", 628 | "dev": true 629 | }, 630 | "concat-map": { 631 | "version": "0.0.1", 632 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 633 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 634 | "dev": true 635 | }, 636 | "concat-stream": { 637 | "version": "1.6.2", 638 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", 639 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", 640 | "dev": true, 641 | "requires": { 642 | "buffer-from": "^1.0.0", 643 | "inherits": "^2.0.3", 644 | "readable-stream": "^2.2.2", 645 | "typedarray": "^0.0.6" 646 | }, 647 | "dependencies": { 648 | "isarray": { 649 | "version": "1.0.0", 650 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 651 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 652 | "dev": true 653 | }, 654 | "readable-stream": { 655 | "version": "2.3.6", 656 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", 657 | "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", 658 | "dev": true, 659 | "requires": { 660 | "core-util-is": "~1.0.0", 661 | "inherits": "~2.0.3", 662 | "isarray": "~1.0.0", 663 | "process-nextick-args": "~2.0.0", 664 | "safe-buffer": "~5.1.1", 665 | "string_decoder": "~1.1.1", 666 | "util-deprecate": "~1.0.1" 667 | } 668 | }, 669 | "string_decoder": { 670 | "version": "1.1.1", 671 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 672 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 673 | "dev": true, 674 | "requires": { 675 | "safe-buffer": "~5.1.0" 676 | } 677 | } 678 | } 679 | }, 680 | "configstore": { 681 | "version": "4.0.0", 682 | "resolved": "https://registry.npmjs.org/configstore/-/configstore-4.0.0.tgz", 683 | "integrity": "sha512-CmquAXFBocrzaSM8mtGPMM/HiWmyIpr4CcJl/rgY2uCObZ/S7cKU0silxslqJejl+t/T9HS8E0PUNQD81JGUEQ==", 684 | "dev": true, 685 | "requires": { 686 | "dot-prop": "^4.1.0", 687 | "graceful-fs": "^4.1.2", 688 | "make-dir": "^1.0.0", 689 | "unique-string": "^1.0.0", 690 | "write-file-atomic": "^2.0.0", 691 | "xdg-basedir": "^3.0.0" 692 | } 693 | }, 694 | "core-util-is": { 695 | "version": "1.0.2", 696 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 697 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 698 | }, 699 | "cross-spawn": { 700 | "version": "5.1.0", 701 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", 702 | "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", 703 | "dev": true, 704 | "requires": { 705 | "lru-cache": "^4.0.1", 706 | "shebang-command": "^1.2.0", 707 | "which": "^1.2.9" 708 | } 709 | }, 710 | "crypto-random-string": { 711 | "version": "1.0.0", 712 | "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", 713 | "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", 714 | "dev": true 715 | }, 716 | "currently-unhandled": { 717 | "version": "0.4.1", 718 | "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", 719 | "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", 720 | "dev": true, 721 | "requires": { 722 | "array-find-index": "^1.0.1" 723 | } 724 | }, 725 | "dashdash": { 726 | "version": "1.14.1", 727 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 728 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 729 | "requires": { 730 | "assert-plus": "^1.0.0" 731 | } 732 | }, 733 | "debug": { 734 | "version": "3.2.6", 735 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", 736 | "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", 737 | "dev": true, 738 | "requires": { 739 | "ms": "^2.1.1" 740 | } 741 | }, 742 | "decamelize": { 743 | "version": "1.2.0", 744 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 745 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", 746 | "dev": true 747 | }, 748 | "decompress-response": { 749 | "version": "3.3.0", 750 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", 751 | "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", 752 | "dev": true, 753 | "requires": { 754 | "mimic-response": "^1.0.0" 755 | } 756 | }, 757 | "deep-extend": { 758 | "version": "0.6.0", 759 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", 760 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", 761 | "dev": true 762 | }, 763 | "defer-to-connect": { 764 | "version": "1.0.2", 765 | "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.0.2.tgz", 766 | "integrity": "sha512-k09hcQcTDY+cwgiwa6PYKLm3jlagNzQ+RSvhjzESOGOx+MNOuXkxTfEvPrO1IOQ81tArCFYQgi631clB70RpQw==", 767 | "dev": true 768 | }, 769 | "delayed-stream": { 770 | "version": "1.0.0", 771 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 772 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 773 | }, 774 | "dmg-builder": { 775 | "version": "6.7.2", 776 | "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-6.7.2.tgz", 777 | "integrity": "sha512-xfYOwhHjOSOIqkk8A0h8zcaio/WyzrAWpMTu9hzV3Z5PI4tOG0Pq6a9Lh/mHr1r3bydif8R21qGvKU1Re9CpUg==", 778 | "dev": true, 779 | "requires": { 780 | "app-builder-lib": "~20.44.4", 781 | "bluebird-lst": "^1.0.9", 782 | "builder-util": "~10.1.2", 783 | "fs-extra-p": "^8.0.2", 784 | "iconv-lite": "^0.4.24", 785 | "js-yaml": "^3.13.1", 786 | "parse-color": "^1.0.0", 787 | "sanitize-filename": "^1.6.1" 788 | } 789 | }, 790 | "dot-prop": { 791 | "version": "4.2.0", 792 | "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", 793 | "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", 794 | "dev": true, 795 | "requires": { 796 | "is-obj": "^1.0.0" 797 | } 798 | }, 799 | "dotenv": { 800 | "version": "6.2.0", 801 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz", 802 | "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==", 803 | "dev": true 804 | }, 805 | "dotenv-expand": { 806 | "version": "4.2.0", 807 | "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-4.2.0.tgz", 808 | "integrity": "sha1-3vHxyl1gWdJKdm5YeULCEQbOEnU=", 809 | "dev": true 810 | }, 811 | "duplexer3": { 812 | "version": "0.1.4", 813 | "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", 814 | "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", 815 | "dev": true 816 | }, 817 | "ecc-jsbn": { 818 | "version": "0.1.2", 819 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", 820 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", 821 | "requires": { 822 | "jsbn": "~0.1.0", 823 | "safer-buffer": "^2.1.0" 824 | } 825 | }, 826 | "ejs": { 827 | "version": "2.6.2", 828 | "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.2.tgz", 829 | "integrity": "sha512-PcW2a0tyTuPHz3tWyYqtK6r1fZ3gp+3Sop8Ph+ZYN81Ob5rwmbHEzaqs10N3BEsaGTkh/ooniXK+WwszGlc2+Q==", 830 | "dev": true 831 | }, 832 | "electron": { 833 | "version": "5.0.5", 834 | "resolved": "https://registry.npmjs.org/electron/-/electron-5.0.5.tgz", 835 | "integrity": "sha512-GzVQhImBX3rSCFPyJ1u1KbxquoidAHzGeCH2FTs3lzAh1H8m4vd7xh6CNC111mT/I8pxFk5D8s3atJlJQLPAeg==", 836 | "dev": true, 837 | "requires": { 838 | "@types/node": "^10.12.18", 839 | "electron-download": "^4.1.0", 840 | "extract-zip": "^1.0.3" 841 | } 842 | }, 843 | "electron-builder": { 844 | "version": "20.44.4", 845 | "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-20.44.4.tgz", 846 | "integrity": "sha512-H8zzP01albkKh2Ec1zc0A7RGriUkHb5M99NJskaYtgKtGATTAGH+r9OIWVk5Hk9c1dLMVudbqEeaSlygMF2asw==", 847 | "dev": true, 848 | "requires": { 849 | "app-builder-lib": "20.44.4", 850 | "bluebird-lst": "^1.0.9", 851 | "builder-util": "10.1.2", 852 | "builder-util-runtime": "8.2.5", 853 | "chalk": "^2.4.2", 854 | "dmg-builder": "6.7.2", 855 | "fs-extra-p": "^8.0.2", 856 | "is-ci": "^2.0.0", 857 | "lazy-val": "^1.0.4", 858 | "read-config-file": "3.2.2", 859 | "sanitize-filename": "^1.6.1", 860 | "update-notifier": "^3.0.0", 861 | "yargs": "^13.2.4" 862 | } 863 | }, 864 | "electron-download": { 865 | "version": "4.1.1", 866 | "resolved": "https://registry.npmjs.org/electron-download/-/electron-download-4.1.1.tgz", 867 | "integrity": "sha512-FjEWG9Jb/ppK/2zToP+U5dds114fM1ZOJqMAR4aXXL5CvyPE9fiqBK/9YcwC9poIFQTEJk/EM/zyRwziziRZrg==", 868 | "dev": true, 869 | "requires": { 870 | "debug": "^3.0.0", 871 | "env-paths": "^1.0.0", 872 | "fs-extra": "^4.0.1", 873 | "minimist": "^1.2.0", 874 | "nugget": "^2.0.1", 875 | "path-exists": "^3.0.0", 876 | "rc": "^1.2.1", 877 | "semver": "^5.4.1", 878 | "sumchecker": "^2.0.2" 879 | }, 880 | "dependencies": { 881 | "fs-extra": { 882 | "version": "4.0.3", 883 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", 884 | "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", 885 | "dev": true, 886 | "requires": { 887 | "graceful-fs": "^4.1.2", 888 | "jsonfile": "^4.0.0", 889 | "universalify": "^0.1.0" 890 | } 891 | } 892 | } 893 | }, 894 | "electron-osx-sign": { 895 | "version": "0.4.11", 896 | "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.4.11.tgz", 897 | "integrity": "sha512-VVd40nrnVqymvFrY9ZkOYgHJOvexHHYTR3di/SN+mjJ0OWhR1I8BRVj3U+Yamw6hnkZZNKZp52rqL5EFAAPFkQ==", 898 | "dev": true, 899 | "requires": { 900 | "bluebird": "^3.5.0", 901 | "compare-version": "^0.1.2", 902 | "debug": "^2.6.8", 903 | "isbinaryfile": "^3.0.2", 904 | "minimist": "^1.2.0", 905 | "plist": "^3.0.1" 906 | }, 907 | "dependencies": { 908 | "debug": { 909 | "version": "2.6.9", 910 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 911 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 912 | "dev": true, 913 | "requires": { 914 | "ms": "2.0.0" 915 | } 916 | }, 917 | "isbinaryfile": { 918 | "version": "3.0.3", 919 | "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", 920 | "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", 921 | "dev": true, 922 | "requires": { 923 | "buffer-alloc": "^1.2.0" 924 | } 925 | }, 926 | "ms": { 927 | "version": "2.0.0", 928 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 929 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 930 | "dev": true 931 | } 932 | } 933 | }, 934 | "electron-publish": { 935 | "version": "20.44.4", 936 | "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-20.44.4.tgz", 937 | "integrity": "sha512-50NzsKOnNqOpGJzPl04vMyitdguUvp15FWKWtu4KISsHfgdLMWGgxHGZwfMphc/vf364zXvPHsYQza3MASgaEQ==", 938 | "dev": true, 939 | "requires": { 940 | "bluebird-lst": "^1.0.9", 941 | "builder-util": "~10.1.2", 942 | "builder-util-runtime": "^8.2.5", 943 | "chalk": "^2.4.2", 944 | "fs-extra-p": "^8.0.2", 945 | "lazy-val": "^1.0.4", 946 | "mime": "^2.4.4" 947 | } 948 | }, 949 | "emoji-regex": { 950 | "version": "7.0.3", 951 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", 952 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", 953 | "dev": true 954 | }, 955 | "end-of-stream": { 956 | "version": "1.4.1", 957 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", 958 | "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", 959 | "requires": { 960 | "once": "^1.4.0" 961 | } 962 | }, 963 | "env-paths": { 964 | "version": "1.0.0", 965 | "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-1.0.0.tgz", 966 | "integrity": "sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA=", 967 | "dev": true 968 | }, 969 | "error-ex": { 970 | "version": "1.3.2", 971 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 972 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 973 | "dev": true, 974 | "requires": { 975 | "is-arrayish": "^0.2.1" 976 | } 977 | }, 978 | "escape-string-regexp": { 979 | "version": "1.0.5", 980 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 981 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 982 | "dev": true 983 | }, 984 | "esprima": { 985 | "version": "4.0.1", 986 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 987 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 988 | "dev": true 989 | }, 990 | "execa": { 991 | "version": "0.7.0", 992 | "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", 993 | "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", 994 | "dev": true, 995 | "requires": { 996 | "cross-spawn": "^5.0.1", 997 | "get-stream": "^3.0.0", 998 | "is-stream": "^1.1.0", 999 | "npm-run-path": "^2.0.0", 1000 | "p-finally": "^1.0.0", 1001 | "signal-exit": "^3.0.0", 1002 | "strip-eof": "^1.0.0" 1003 | } 1004 | }, 1005 | "extend": { 1006 | "version": "3.0.2", 1007 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 1008 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" 1009 | }, 1010 | "extract-zip": { 1011 | "version": "1.6.7", 1012 | "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz", 1013 | "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=", 1014 | "dev": true, 1015 | "requires": { 1016 | "concat-stream": "1.6.2", 1017 | "debug": "2.6.9", 1018 | "mkdirp": "0.5.1", 1019 | "yauzl": "2.4.1" 1020 | }, 1021 | "dependencies": { 1022 | "debug": { 1023 | "version": "2.6.9", 1024 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1025 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1026 | "dev": true, 1027 | "requires": { 1028 | "ms": "2.0.0" 1029 | } 1030 | }, 1031 | "ms": { 1032 | "version": "2.0.0", 1033 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1034 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 1035 | "dev": true 1036 | } 1037 | } 1038 | }, 1039 | "extsprintf": { 1040 | "version": "1.3.0", 1041 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 1042 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" 1043 | }, 1044 | "fast-deep-equal": { 1045 | "version": "2.0.1", 1046 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", 1047 | "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" 1048 | }, 1049 | "fast-json-stable-stringify": { 1050 | "version": "2.0.0", 1051 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", 1052 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" 1053 | }, 1054 | "fd-slicer": { 1055 | "version": "1.0.1", 1056 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", 1057 | "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", 1058 | "dev": true, 1059 | "requires": { 1060 | "pend": "~1.2.0" 1061 | } 1062 | }, 1063 | "find-up": { 1064 | "version": "1.1.2", 1065 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", 1066 | "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", 1067 | "dev": true, 1068 | "requires": { 1069 | "path-exists": "^2.0.0", 1070 | "pinkie-promise": "^2.0.0" 1071 | }, 1072 | "dependencies": { 1073 | "path-exists": { 1074 | "version": "2.1.0", 1075 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", 1076 | "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", 1077 | "dev": true, 1078 | "requires": { 1079 | "pinkie-promise": "^2.0.0" 1080 | } 1081 | } 1082 | } 1083 | }, 1084 | "forever-agent": { 1085 | "version": "0.6.1", 1086 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 1087 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" 1088 | }, 1089 | "form-data": { 1090 | "version": "2.3.3", 1091 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", 1092 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", 1093 | "requires": { 1094 | "asynckit": "^0.4.0", 1095 | "combined-stream": "^1.0.6", 1096 | "mime-types": "^2.1.12" 1097 | } 1098 | }, 1099 | "fs-extra": { 1100 | "version": "8.1.0", 1101 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", 1102 | "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", 1103 | "requires": { 1104 | "graceful-fs": "^4.2.0", 1105 | "jsonfile": "^4.0.0", 1106 | "universalify": "^0.1.0" 1107 | }, 1108 | "dependencies": { 1109 | "graceful-fs": { 1110 | "version": "4.2.0", 1111 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz", 1112 | "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==" 1113 | } 1114 | } 1115 | }, 1116 | "fs-extra-p": { 1117 | "version": "8.1.0", 1118 | "resolved": "https://registry.npmjs.org/fs-extra-p/-/fs-extra-p-8.1.0.tgz", 1119 | "integrity": "sha512-sCLpU5kk5CvrWZvFM9dUlqPgHrE02AEt6XYzF7kDscr5COc7DHfhNfODTXt0bkVNmt5DkvU2uJSYjorxY3bRKA==", 1120 | "dev": true, 1121 | "requires": { 1122 | "bluebird-lst": "^1.0.9", 1123 | "fs-extra": "^8.1.0" 1124 | }, 1125 | "dependencies": { 1126 | "fs-extra": { 1127 | "version": "8.1.0", 1128 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", 1129 | "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", 1130 | "dev": true, 1131 | "requires": { 1132 | "graceful-fs": "^4.2.0", 1133 | "jsonfile": "^4.0.0", 1134 | "universalify": "^0.1.0" 1135 | } 1136 | }, 1137 | "graceful-fs": { 1138 | "version": "4.2.0", 1139 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz", 1140 | "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==", 1141 | "dev": true 1142 | } 1143 | } 1144 | }, 1145 | "get-caller-file": { 1146 | "version": "2.0.5", 1147 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 1148 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 1149 | "dev": true 1150 | }, 1151 | "get-stdin": { 1152 | "version": "4.0.1", 1153 | "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", 1154 | "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", 1155 | "dev": true 1156 | }, 1157 | "get-stream": { 1158 | "version": "3.0.0", 1159 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", 1160 | "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", 1161 | "dev": true 1162 | }, 1163 | "getpass": { 1164 | "version": "0.1.7", 1165 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 1166 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 1167 | "requires": { 1168 | "assert-plus": "^1.0.0" 1169 | } 1170 | }, 1171 | "global-dirs": { 1172 | "version": "0.1.1", 1173 | "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", 1174 | "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", 1175 | "dev": true, 1176 | "requires": { 1177 | "ini": "^1.3.4" 1178 | } 1179 | }, 1180 | "got": { 1181 | "version": "9.6.0", 1182 | "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", 1183 | "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", 1184 | "dev": true, 1185 | "requires": { 1186 | "@sindresorhus/is": "^0.14.0", 1187 | "@szmarczak/http-timer": "^1.1.2", 1188 | "cacheable-request": "^6.0.0", 1189 | "decompress-response": "^3.3.0", 1190 | "duplexer3": "^0.1.4", 1191 | "get-stream": "^4.1.0", 1192 | "lowercase-keys": "^1.0.1", 1193 | "mimic-response": "^1.0.1", 1194 | "p-cancelable": "^1.0.0", 1195 | "to-readable-stream": "^1.0.0", 1196 | "url-parse-lax": "^3.0.0" 1197 | }, 1198 | "dependencies": { 1199 | "get-stream": { 1200 | "version": "4.1.0", 1201 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", 1202 | "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", 1203 | "dev": true, 1204 | "requires": { 1205 | "pump": "^3.0.0" 1206 | } 1207 | } 1208 | } 1209 | }, 1210 | "graceful-fs": { 1211 | "version": "4.1.15", 1212 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", 1213 | "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" 1214 | }, 1215 | "har-schema": { 1216 | "version": "2.0.0", 1217 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 1218 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" 1219 | }, 1220 | "har-validator": { 1221 | "version": "5.1.3", 1222 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", 1223 | "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", 1224 | "requires": { 1225 | "ajv": "^6.5.5", 1226 | "har-schema": "^2.0.0" 1227 | } 1228 | }, 1229 | "has-flag": { 1230 | "version": "3.0.0", 1231 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1232 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 1233 | "dev": true 1234 | }, 1235 | "has-yarn": { 1236 | "version": "2.1.0", 1237 | "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", 1238 | "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", 1239 | "dev": true 1240 | }, 1241 | "hashish": { 1242 | "version": "0.0.4", 1243 | "resolved": "https://registry.npmjs.org/hashish/-/hashish-0.0.4.tgz", 1244 | "integrity": "sha1-bWC8b/r3Ebav1g5CbQd5iAFOZVQ=", 1245 | "requires": { 1246 | "traverse": ">=0.2.4" 1247 | } 1248 | }, 1249 | "hh-mm-ss": { 1250 | "version": "1.2.0", 1251 | "resolved": "https://registry.npmjs.org/hh-mm-ss/-/hh-mm-ss-1.2.0.tgz", 1252 | "integrity": "sha512-f4I9Hz1dLpX/3mrEs7yq30+FiuO3tt5NWAqAGeBTaoeoBfB8vhcQ3BphuDc5DjZb/K809agqrAaFlP0jhEU/8w==", 1253 | "requires": { 1254 | "zero-fill": "^2.2.3" 1255 | } 1256 | }, 1257 | "hosted-git-info": { 1258 | "version": "2.7.1", 1259 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", 1260 | "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", 1261 | "dev": true 1262 | }, 1263 | "html-entities": { 1264 | "version": "1.2.1", 1265 | "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", 1266 | "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=" 1267 | }, 1268 | "http-cache-semantics": { 1269 | "version": "4.0.3", 1270 | "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.0.3.tgz", 1271 | "integrity": "sha512-TcIMG3qeVLgDr1TEd2XvHaTnMPwYQUQMIBLy+5pLSDKYFc7UIqj39w8EGzZkaxoLv/l2K8HaI0t5AVA+YYgUew==", 1272 | "dev": true 1273 | }, 1274 | "http-signature": { 1275 | "version": "1.2.0", 1276 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 1277 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 1278 | "requires": { 1279 | "assert-plus": "^1.0.0", 1280 | "jsprim": "^1.2.2", 1281 | "sshpk": "^1.7.0" 1282 | } 1283 | }, 1284 | "human-signals": { 1285 | "version": "1.1.1", 1286 | "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", 1287 | "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" 1288 | }, 1289 | "iconv-lite": { 1290 | "version": "0.4.24", 1291 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 1292 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 1293 | "dev": true, 1294 | "requires": { 1295 | "safer-buffer": ">= 2.1.2 < 3" 1296 | } 1297 | }, 1298 | "import-lazy": { 1299 | "version": "2.1.0", 1300 | "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", 1301 | "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", 1302 | "dev": true 1303 | }, 1304 | "imurmurhash": { 1305 | "version": "0.1.4", 1306 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 1307 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 1308 | "dev": true 1309 | }, 1310 | "indent-string": { 1311 | "version": "2.1.0", 1312 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", 1313 | "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", 1314 | "dev": true, 1315 | "requires": { 1316 | "repeating": "^2.0.0" 1317 | } 1318 | }, 1319 | "inherits": { 1320 | "version": "2.0.4", 1321 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1322 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1323 | "dev": true 1324 | }, 1325 | "ini": { 1326 | "version": "1.3.5", 1327 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", 1328 | "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", 1329 | "dev": true 1330 | }, 1331 | "invert-kv": { 1332 | "version": "2.0.0", 1333 | "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", 1334 | "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", 1335 | "dev": true 1336 | }, 1337 | "is-arrayish": { 1338 | "version": "0.2.1", 1339 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 1340 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", 1341 | "dev": true 1342 | }, 1343 | "is-ci": { 1344 | "version": "2.0.0", 1345 | "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", 1346 | "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", 1347 | "dev": true, 1348 | "requires": { 1349 | "ci-info": "^2.0.0" 1350 | } 1351 | }, 1352 | "is-finite": { 1353 | "version": "1.0.2", 1354 | "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", 1355 | "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", 1356 | "dev": true, 1357 | "requires": { 1358 | "number-is-nan": "^1.0.0" 1359 | } 1360 | }, 1361 | "is-fullwidth-code-point": { 1362 | "version": "1.0.0", 1363 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", 1364 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", 1365 | "dev": true, 1366 | "requires": { 1367 | "number-is-nan": "^1.0.0" 1368 | } 1369 | }, 1370 | "is-installed-globally": { 1371 | "version": "0.1.0", 1372 | "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", 1373 | "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", 1374 | "dev": true, 1375 | "requires": { 1376 | "global-dirs": "^0.1.0", 1377 | "is-path-inside": "^1.0.0" 1378 | } 1379 | }, 1380 | "is-npm": { 1381 | "version": "3.0.0", 1382 | "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-3.0.0.tgz", 1383 | "integrity": "sha512-wsigDr1Kkschp2opC4G3yA6r9EgVA6NjRpWzIi9axXqeIaAATPRJc4uLujXe3Nd9uO8KoDyA4MD6aZSeXTADhA==", 1384 | "dev": true 1385 | }, 1386 | "is-obj": { 1387 | "version": "1.0.1", 1388 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", 1389 | "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", 1390 | "dev": true 1391 | }, 1392 | "is-path-inside": { 1393 | "version": "1.0.1", 1394 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", 1395 | "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", 1396 | "dev": true, 1397 | "requires": { 1398 | "path-is-inside": "^1.0.1" 1399 | } 1400 | }, 1401 | "is-stream": { 1402 | "version": "1.1.0", 1403 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 1404 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", 1405 | "dev": true 1406 | }, 1407 | "is-typedarray": { 1408 | "version": "1.0.0", 1409 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 1410 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" 1411 | }, 1412 | "is-utf8": { 1413 | "version": "0.2.1", 1414 | "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", 1415 | "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", 1416 | "dev": true 1417 | }, 1418 | "is-yarn-global": { 1419 | "version": "0.3.0", 1420 | "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", 1421 | "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", 1422 | "dev": true 1423 | }, 1424 | "isarray": { 1425 | "version": "0.0.1", 1426 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 1427 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", 1428 | "dev": true 1429 | }, 1430 | "isbinaryfile": { 1431 | "version": "4.0.1", 1432 | "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.1.tgz", 1433 | "integrity": "sha512-bvJxbNWm72dy/1+qeBm9F8wUM4siDnlzid7NN5Ib4nQcc0tNIx/YWgEih1ZRHXr8xVbpGk1ccLlA9gOSlyx3gw==", 1434 | "dev": true 1435 | }, 1436 | "isexe": { 1437 | "version": "2.0.0", 1438 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1439 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" 1440 | }, 1441 | "isstream": { 1442 | "version": "0.1.2", 1443 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 1444 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" 1445 | }, 1446 | "js-yaml": { 1447 | "version": "3.13.1", 1448 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", 1449 | "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", 1450 | "dev": true, 1451 | "requires": { 1452 | "argparse": "^1.0.7", 1453 | "esprima": "^4.0.0" 1454 | } 1455 | }, 1456 | "jsbn": { 1457 | "version": "0.1.1", 1458 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 1459 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" 1460 | }, 1461 | "json-buffer": { 1462 | "version": "3.0.0", 1463 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", 1464 | "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", 1465 | "dev": true 1466 | }, 1467 | "json-schema": { 1468 | "version": "0.2.3", 1469 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 1470 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" 1471 | }, 1472 | "json-schema-traverse": { 1473 | "version": "0.4.1", 1474 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 1475 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" 1476 | }, 1477 | "json-stringify-safe": { 1478 | "version": "5.0.1", 1479 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 1480 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" 1481 | }, 1482 | "json5": { 1483 | "version": "2.1.0", 1484 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", 1485 | "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", 1486 | "dev": true, 1487 | "requires": { 1488 | "minimist": "^1.2.0" 1489 | } 1490 | }, 1491 | "jsonfile": { 1492 | "version": "4.0.0", 1493 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 1494 | "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", 1495 | "requires": { 1496 | "graceful-fs": "^4.1.6" 1497 | } 1498 | }, 1499 | "jsprim": { 1500 | "version": "1.4.1", 1501 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 1502 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 1503 | "requires": { 1504 | "assert-plus": "1.0.0", 1505 | "extsprintf": "1.3.0", 1506 | "json-schema": "0.2.3", 1507 | "verror": "1.10.0" 1508 | } 1509 | }, 1510 | "keyv": { 1511 | "version": "3.1.0", 1512 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", 1513 | "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", 1514 | "dev": true, 1515 | "requires": { 1516 | "json-buffer": "3.0.0" 1517 | } 1518 | }, 1519 | "latest-version": { 1520 | "version": "5.1.0", 1521 | "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", 1522 | "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", 1523 | "dev": true, 1524 | "requires": { 1525 | "package-json": "^6.3.0" 1526 | } 1527 | }, 1528 | "lazy-val": { 1529 | "version": "1.0.4", 1530 | "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.4.tgz", 1531 | "integrity": "sha512-u93kb2fPbIrfzBuLjZE+w+fJbUUMhNDXxNmMfaqNgpfQf1CO5ZSe2LfsnBqVAk7i/2NF48OSoRj+Xe2VT+lE8Q==", 1532 | "dev": true 1533 | }, 1534 | "lcid": { 1535 | "version": "2.0.0", 1536 | "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", 1537 | "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", 1538 | "dev": true, 1539 | "requires": { 1540 | "invert-kv": "^2.0.0" 1541 | } 1542 | }, 1543 | "load-json-file": { 1544 | "version": "1.1.0", 1545 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", 1546 | "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", 1547 | "dev": true, 1548 | "requires": { 1549 | "graceful-fs": "^4.1.2", 1550 | "parse-json": "^2.2.0", 1551 | "pify": "^2.0.0", 1552 | "pinkie-promise": "^2.0.0", 1553 | "strip-bom": "^2.0.0" 1554 | } 1555 | }, 1556 | "locate-path": { 1557 | "version": "3.0.0", 1558 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", 1559 | "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", 1560 | "dev": true, 1561 | "requires": { 1562 | "p-locate": "^3.0.0", 1563 | "path-exists": "^3.0.0" 1564 | } 1565 | }, 1566 | "loud-rejection": { 1567 | "version": "1.6.0", 1568 | "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", 1569 | "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", 1570 | "dev": true, 1571 | "requires": { 1572 | "currently-unhandled": "^0.4.1", 1573 | "signal-exit": "^3.0.0" 1574 | } 1575 | }, 1576 | "lowercase-keys": { 1577 | "version": "1.0.1", 1578 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", 1579 | "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", 1580 | "dev": true 1581 | }, 1582 | "lru-cache": { 1583 | "version": "4.1.5", 1584 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", 1585 | "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", 1586 | "dev": true, 1587 | "requires": { 1588 | "pseudomap": "^1.0.2", 1589 | "yallist": "^2.1.2" 1590 | } 1591 | }, 1592 | "m3u8stream": { 1593 | "version": "0.6.2", 1594 | "resolved": "https://registry.npmjs.org/m3u8stream/-/m3u8stream-0.6.2.tgz", 1595 | "integrity": "sha512-WsuM2bd5pPN80xvfrB+1DZqr4M7+kJl8byi6+ZCy6cmVjEiHhmr/desN53Ngsa6Hs13kYumeVgT4wL0oIJ+v6g==", 1596 | "requires": { 1597 | "miniget": "^1.4.0", 1598 | "sax": "^1.2.4" 1599 | } 1600 | }, 1601 | "make-dir": { 1602 | "version": "1.3.0", 1603 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", 1604 | "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", 1605 | "dev": true, 1606 | "requires": { 1607 | "pify": "^3.0.0" 1608 | }, 1609 | "dependencies": { 1610 | "pify": { 1611 | "version": "3.0.0", 1612 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", 1613 | "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", 1614 | "dev": true 1615 | } 1616 | } 1617 | }, 1618 | "map-age-cleaner": { 1619 | "version": "0.1.3", 1620 | "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", 1621 | "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", 1622 | "dev": true, 1623 | "requires": { 1624 | "p-defer": "^1.0.0" 1625 | } 1626 | }, 1627 | "map-obj": { 1628 | "version": "1.0.1", 1629 | "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", 1630 | "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", 1631 | "dev": true 1632 | }, 1633 | "mem": { 1634 | "version": "4.3.0", 1635 | "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", 1636 | "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", 1637 | "dev": true, 1638 | "requires": { 1639 | "map-age-cleaner": "^0.1.1", 1640 | "mimic-fn": "^2.0.0", 1641 | "p-is-promise": "^2.0.0" 1642 | } 1643 | }, 1644 | "meow": { 1645 | "version": "3.7.0", 1646 | "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", 1647 | "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", 1648 | "dev": true, 1649 | "requires": { 1650 | "camelcase-keys": "^2.0.0", 1651 | "decamelize": "^1.1.2", 1652 | "loud-rejection": "^1.0.0", 1653 | "map-obj": "^1.0.1", 1654 | "minimist": "^1.1.3", 1655 | "normalize-package-data": "^2.3.4", 1656 | "object-assign": "^4.0.1", 1657 | "read-pkg-up": "^1.0.1", 1658 | "redent": "^1.0.0", 1659 | "trim-newlines": "^1.0.0" 1660 | } 1661 | }, 1662 | "merge-stream": { 1663 | "version": "2.0.0", 1664 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 1665 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" 1666 | }, 1667 | "mime": { 1668 | "version": "2.4.4", 1669 | "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", 1670 | "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", 1671 | "dev": true 1672 | }, 1673 | "mime-db": { 1674 | "version": "1.40.0", 1675 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", 1676 | "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" 1677 | }, 1678 | "mime-types": { 1679 | "version": "2.1.24", 1680 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", 1681 | "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", 1682 | "requires": { 1683 | "mime-db": "1.40.0" 1684 | } 1685 | }, 1686 | "mimic-fn": { 1687 | "version": "2.1.0", 1688 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 1689 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" 1690 | }, 1691 | "mimic-response": { 1692 | "version": "1.0.1", 1693 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", 1694 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", 1695 | "dev": true 1696 | }, 1697 | "miniget": { 1698 | "version": "1.5.1", 1699 | "resolved": "https://registry.npmjs.org/miniget/-/miniget-1.5.1.tgz", 1700 | "integrity": "sha512-KJ3AyIVZ76QuWAq43BWjkK+jLdhxhy3s4tsdg9Je91+cIFkeOSW2VEj2lSeKw50CPu1eCCkSbiQEBKL36mpA5w==" 1701 | }, 1702 | "minimatch": { 1703 | "version": "3.0.4", 1704 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1705 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1706 | "dev": true, 1707 | "requires": { 1708 | "brace-expansion": "^1.1.7" 1709 | } 1710 | }, 1711 | "minimist": { 1712 | "version": "1.2.0", 1713 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 1714 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", 1715 | "dev": true 1716 | }, 1717 | "mkdirp": { 1718 | "version": "0.5.1", 1719 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 1720 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 1721 | "requires": { 1722 | "minimist": "0.0.8" 1723 | }, 1724 | "dependencies": { 1725 | "minimist": { 1726 | "version": "0.0.8", 1727 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 1728 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" 1729 | } 1730 | } 1731 | }, 1732 | "ms": { 1733 | "version": "2.1.2", 1734 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1735 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 1736 | }, 1737 | "nice-try": { 1738 | "version": "1.0.5", 1739 | "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", 1740 | "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", 1741 | "dev": true 1742 | }, 1743 | "normalize-package-data": { 1744 | "version": "2.5.0", 1745 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", 1746 | "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", 1747 | "dev": true, 1748 | "requires": { 1749 | "hosted-git-info": "^2.1.4", 1750 | "resolve": "^1.10.0", 1751 | "semver": "2 || 3 || 4 || 5", 1752 | "validate-npm-package-license": "^3.0.1" 1753 | } 1754 | }, 1755 | "normalize-url": { 1756 | "version": "4.3.0", 1757 | "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.3.0.tgz", 1758 | "integrity": "sha512-0NLtR71o4k6GLP+mr6Ty34c5GA6CMoEsncKJxvQd8NzPxaHRJNnb5gZE8R1XF4CPIS7QPHLJ74IFszwtNVAHVQ==", 1759 | "dev": true 1760 | }, 1761 | "npm-run-path": { 1762 | "version": "2.0.2", 1763 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", 1764 | "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", 1765 | "dev": true, 1766 | "requires": { 1767 | "path-key": "^2.0.0" 1768 | } 1769 | }, 1770 | "nugget": { 1771 | "version": "2.0.1", 1772 | "resolved": "https://registry.npmjs.org/nugget/-/nugget-2.0.1.tgz", 1773 | "integrity": "sha1-IBCVpIfhrTYIGzQy+jytpPjQcbA=", 1774 | "dev": true, 1775 | "requires": { 1776 | "debug": "^2.1.3", 1777 | "minimist": "^1.1.0", 1778 | "pretty-bytes": "^1.0.2", 1779 | "progress-stream": "^1.1.0", 1780 | "request": "^2.45.0", 1781 | "single-line-log": "^1.1.2", 1782 | "throttleit": "0.0.2" 1783 | }, 1784 | "dependencies": { 1785 | "debug": { 1786 | "version": "2.6.9", 1787 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1788 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1789 | "dev": true, 1790 | "requires": { 1791 | "ms": "2.0.0" 1792 | } 1793 | }, 1794 | "ms": { 1795 | "version": "2.0.0", 1796 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1797 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 1798 | "dev": true 1799 | } 1800 | } 1801 | }, 1802 | "number-is-nan": { 1803 | "version": "1.0.1", 1804 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 1805 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", 1806 | "dev": true 1807 | }, 1808 | "oauth-sign": { 1809 | "version": "0.9.0", 1810 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", 1811 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" 1812 | }, 1813 | "object-assign": { 1814 | "version": "4.1.1", 1815 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1816 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", 1817 | "dev": true 1818 | }, 1819 | "object-keys": { 1820 | "version": "0.4.0", 1821 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", 1822 | "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=", 1823 | "dev": true 1824 | }, 1825 | "once": { 1826 | "version": "1.4.0", 1827 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1828 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1829 | "requires": { 1830 | "wrappy": "1" 1831 | } 1832 | }, 1833 | "onetime": { 1834 | "version": "5.1.2", 1835 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", 1836 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", 1837 | "requires": { 1838 | "mimic-fn": "^2.1.0" 1839 | } 1840 | }, 1841 | "os-locale": { 1842 | "version": "3.1.0", 1843 | "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", 1844 | "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", 1845 | "dev": true, 1846 | "requires": { 1847 | "execa": "^1.0.0", 1848 | "lcid": "^2.0.0", 1849 | "mem": "^4.0.0" 1850 | }, 1851 | "dependencies": { 1852 | "cross-spawn": { 1853 | "version": "6.0.5", 1854 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", 1855 | "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", 1856 | "dev": true, 1857 | "requires": { 1858 | "nice-try": "^1.0.4", 1859 | "path-key": "^2.0.1", 1860 | "semver": "^5.5.0", 1861 | "shebang-command": "^1.2.0", 1862 | "which": "^1.2.9" 1863 | } 1864 | }, 1865 | "execa": { 1866 | "version": "1.0.0", 1867 | "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", 1868 | "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", 1869 | "dev": true, 1870 | "requires": { 1871 | "cross-spawn": "^6.0.0", 1872 | "get-stream": "^4.0.0", 1873 | "is-stream": "^1.1.0", 1874 | "npm-run-path": "^2.0.0", 1875 | "p-finally": "^1.0.0", 1876 | "signal-exit": "^3.0.0", 1877 | "strip-eof": "^1.0.0" 1878 | } 1879 | }, 1880 | "get-stream": { 1881 | "version": "4.1.0", 1882 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", 1883 | "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", 1884 | "dev": true, 1885 | "requires": { 1886 | "pump": "^3.0.0" 1887 | } 1888 | } 1889 | } 1890 | }, 1891 | "p-cancelable": { 1892 | "version": "1.1.0", 1893 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", 1894 | "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", 1895 | "dev": true 1896 | }, 1897 | "p-defer": { 1898 | "version": "1.0.0", 1899 | "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", 1900 | "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", 1901 | "dev": true 1902 | }, 1903 | "p-finally": { 1904 | "version": "1.0.0", 1905 | "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", 1906 | "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", 1907 | "dev": true 1908 | }, 1909 | "p-is-promise": { 1910 | "version": "2.1.0", 1911 | "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", 1912 | "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", 1913 | "dev": true 1914 | }, 1915 | "p-limit": { 1916 | "version": "2.2.0", 1917 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", 1918 | "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", 1919 | "dev": true, 1920 | "requires": { 1921 | "p-try": "^2.0.0" 1922 | } 1923 | }, 1924 | "p-locate": { 1925 | "version": "3.0.0", 1926 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", 1927 | "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", 1928 | "dev": true, 1929 | "requires": { 1930 | "p-limit": "^2.0.0" 1931 | } 1932 | }, 1933 | "p-try": { 1934 | "version": "2.2.0", 1935 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 1936 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", 1937 | "dev": true 1938 | }, 1939 | "package-json": { 1940 | "version": "6.4.0", 1941 | "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.4.0.tgz", 1942 | "integrity": "sha512-bd1T8OBG7hcvMd9c/udgv6u5v9wISP3Oyl9Cm7Weop8EFwrtcQDnS2sb6zhwqus2WslSr5wSTIPiTTpxxmPm7Q==", 1943 | "dev": true, 1944 | "requires": { 1945 | "got": "^9.6.0", 1946 | "registry-auth-token": "^3.4.0", 1947 | "registry-url": "^5.0.0", 1948 | "semver": "^6.1.1" 1949 | }, 1950 | "dependencies": { 1951 | "semver": { 1952 | "version": "6.2.0", 1953 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.2.0.tgz", 1954 | "integrity": "sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A==", 1955 | "dev": true 1956 | } 1957 | } 1958 | }, 1959 | "parse-color": { 1960 | "version": "1.0.0", 1961 | "resolved": "https://registry.npmjs.org/parse-color/-/parse-color-1.0.0.tgz", 1962 | "integrity": "sha1-e3SLlag/A/FqlPU15S1/PZRlhhk=", 1963 | "dev": true, 1964 | "requires": { 1965 | "color-convert": "~0.5.0" 1966 | }, 1967 | "dependencies": { 1968 | "color-convert": { 1969 | "version": "0.5.3", 1970 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-0.5.3.tgz", 1971 | "integrity": "sha1-vbbGnOZg+t/+CwAHzER+G59ygr0=", 1972 | "dev": true 1973 | } 1974 | } 1975 | }, 1976 | "parse-json": { 1977 | "version": "2.2.0", 1978 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", 1979 | "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", 1980 | "dev": true, 1981 | "requires": { 1982 | "error-ex": "^1.2.0" 1983 | } 1984 | }, 1985 | "path-exists": { 1986 | "version": "3.0.0", 1987 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", 1988 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", 1989 | "dev": true 1990 | }, 1991 | "path-is-inside": { 1992 | "version": "1.0.2", 1993 | "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", 1994 | "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", 1995 | "dev": true 1996 | }, 1997 | "path-key": { 1998 | "version": "2.0.1", 1999 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", 2000 | "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", 2001 | "dev": true 2002 | }, 2003 | "path-parse": { 2004 | "version": "1.0.6", 2005 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", 2006 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", 2007 | "dev": true 2008 | }, 2009 | "path-type": { 2010 | "version": "1.1.0", 2011 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", 2012 | "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", 2013 | "dev": true, 2014 | "requires": { 2015 | "graceful-fs": "^4.1.2", 2016 | "pify": "^2.0.0", 2017 | "pinkie-promise": "^2.0.0" 2018 | } 2019 | }, 2020 | "pend": { 2021 | "version": "1.2.0", 2022 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", 2023 | "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", 2024 | "dev": true 2025 | }, 2026 | "performance-now": { 2027 | "version": "2.1.0", 2028 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 2029 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" 2030 | }, 2031 | "pify": { 2032 | "version": "2.3.0", 2033 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 2034 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", 2035 | "dev": true 2036 | }, 2037 | "pinkie": { 2038 | "version": "2.0.4", 2039 | "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", 2040 | "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", 2041 | "dev": true 2042 | }, 2043 | "pinkie-promise": { 2044 | "version": "2.0.1", 2045 | "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", 2046 | "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", 2047 | "dev": true, 2048 | "requires": { 2049 | "pinkie": "^2.0.0" 2050 | } 2051 | }, 2052 | "plist": { 2053 | "version": "3.0.1", 2054 | "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.1.tgz", 2055 | "integrity": "sha512-GpgvHHocGRyQm74b6FWEZZVRroHKE1I0/BTjAmySaohK+cUn+hZpbqXkc3KWgW3gQYkqcQej35FohcT0FRlkRQ==", 2056 | "dev": true, 2057 | "requires": { 2058 | "base64-js": "^1.2.3", 2059 | "xmlbuilder": "^9.0.7", 2060 | "xmldom": "0.1.x" 2061 | } 2062 | }, 2063 | "prepend-http": { 2064 | "version": "2.0.0", 2065 | "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", 2066 | "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", 2067 | "dev": true 2068 | }, 2069 | "pretty-bytes": { 2070 | "version": "1.0.4", 2071 | "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz", 2072 | "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=", 2073 | "dev": true, 2074 | "requires": { 2075 | "get-stdin": "^4.0.1", 2076 | "meow": "^3.1.0" 2077 | } 2078 | }, 2079 | "process-nextick-args": { 2080 | "version": "2.0.1", 2081 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 2082 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", 2083 | "dev": true 2084 | }, 2085 | "progress-stream": { 2086 | "version": "1.2.0", 2087 | "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-1.2.0.tgz", 2088 | "integrity": "sha1-LNPP6jO6OonJwSHsM0er6asSX3c=", 2089 | "dev": true, 2090 | "requires": { 2091 | "speedometer": "~0.1.2", 2092 | "through2": "~0.2.3" 2093 | } 2094 | }, 2095 | "pseudomap": { 2096 | "version": "1.0.2", 2097 | "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", 2098 | "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", 2099 | "dev": true 2100 | }, 2101 | "psl": { 2102 | "version": "1.1.33", 2103 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.33.tgz", 2104 | "integrity": "sha512-LTDP2uSrsc7XCb5lO7A8BI1qYxRe/8EqlRvMeEl6rsnYAqDOl8xHR+8lSAIVfrNaSAlTPTNOCgNjWcoUL3AZsw==" 2105 | }, 2106 | "pump": { 2107 | "version": "3.0.0", 2108 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 2109 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 2110 | "requires": { 2111 | "end-of-stream": "^1.1.0", 2112 | "once": "^1.3.1" 2113 | } 2114 | }, 2115 | "punycode": { 2116 | "version": "2.1.1", 2117 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 2118 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" 2119 | }, 2120 | "qs": { 2121 | "version": "6.5.2", 2122 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 2123 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" 2124 | }, 2125 | "rc": { 2126 | "version": "1.2.8", 2127 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", 2128 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", 2129 | "dev": true, 2130 | "requires": { 2131 | "deep-extend": "^0.6.0", 2132 | "ini": "~1.3.0", 2133 | "minimist": "^1.2.0", 2134 | "strip-json-comments": "~2.0.1" 2135 | } 2136 | }, 2137 | "read-config-file": { 2138 | "version": "3.2.2", 2139 | "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-3.2.2.tgz", 2140 | "integrity": "sha512-PuFpMgZF01VB0ydH1dfitAxCP/fh+qnfbA9cYNIPoxPbz0SMngsrafCtaHDWfER7MwlDz4fmrNBhPkakxxFpTg==", 2141 | "dev": true, 2142 | "requires": { 2143 | "ajv": "^6.9.2", 2144 | "ajv-keywords": "^3.4.0", 2145 | "bluebird-lst": "^1.0.7", 2146 | "dotenv": "^6.2.0", 2147 | "dotenv-expand": "^4.2.0", 2148 | "fs-extra-p": "^7.0.1", 2149 | "js-yaml": "^3.12.1", 2150 | "json5": "^2.1.0", 2151 | "lazy-val": "^1.0.4" 2152 | }, 2153 | "dependencies": { 2154 | "fs-extra": { 2155 | "version": "7.0.1", 2156 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", 2157 | "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", 2158 | "dev": true, 2159 | "requires": { 2160 | "graceful-fs": "^4.1.2", 2161 | "jsonfile": "^4.0.0", 2162 | "universalify": "^0.1.0" 2163 | } 2164 | }, 2165 | "fs-extra-p": { 2166 | "version": "7.0.1", 2167 | "resolved": "https://registry.npmjs.org/fs-extra-p/-/fs-extra-p-7.0.1.tgz", 2168 | "integrity": "sha512-yhd2OV0HnHt2oitlp+X9hl2ReX4X/7kQeL7/72qzPHTZj5eUPGzAKOvEglU02Fa1OeG2rSy/aKB4WGVaLiF8tw==", 2169 | "dev": true, 2170 | "requires": { 2171 | "bluebird-lst": "^1.0.7", 2172 | "fs-extra": "^7.0.1" 2173 | } 2174 | } 2175 | } 2176 | }, 2177 | "read-pkg": { 2178 | "version": "1.1.0", 2179 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", 2180 | "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", 2181 | "dev": true, 2182 | "requires": { 2183 | "load-json-file": "^1.0.0", 2184 | "normalize-package-data": "^2.3.2", 2185 | "path-type": "^1.0.0" 2186 | } 2187 | }, 2188 | "read-pkg-up": { 2189 | "version": "1.0.1", 2190 | "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", 2191 | "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", 2192 | "dev": true, 2193 | "requires": { 2194 | "find-up": "^1.0.0", 2195 | "read-pkg": "^1.0.0" 2196 | } 2197 | }, 2198 | "readable-stream": { 2199 | "version": "1.1.14", 2200 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", 2201 | "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", 2202 | "dev": true, 2203 | "requires": { 2204 | "core-util-is": "~1.0.0", 2205 | "inherits": "~2.0.1", 2206 | "isarray": "0.0.1", 2207 | "string_decoder": "~0.10.x" 2208 | } 2209 | }, 2210 | "redent": { 2211 | "version": "1.0.0", 2212 | "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", 2213 | "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", 2214 | "dev": true, 2215 | "requires": { 2216 | "indent-string": "^2.1.0", 2217 | "strip-indent": "^1.0.1" 2218 | } 2219 | }, 2220 | "registry-auth-token": { 2221 | "version": "3.4.0", 2222 | "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", 2223 | "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", 2224 | "dev": true, 2225 | "requires": { 2226 | "rc": "^1.1.6", 2227 | "safe-buffer": "^5.0.1" 2228 | } 2229 | }, 2230 | "registry-url": { 2231 | "version": "5.1.0", 2232 | "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", 2233 | "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", 2234 | "dev": true, 2235 | "requires": { 2236 | "rc": "^1.2.8" 2237 | } 2238 | }, 2239 | "repeating": { 2240 | "version": "2.0.1", 2241 | "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", 2242 | "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", 2243 | "dev": true, 2244 | "requires": { 2245 | "is-finite": "^1.0.0" 2246 | } 2247 | }, 2248 | "request": { 2249 | "version": "2.88.0", 2250 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", 2251 | "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", 2252 | "requires": { 2253 | "aws-sign2": "~0.7.0", 2254 | "aws4": "^1.8.0", 2255 | "caseless": "~0.12.0", 2256 | "combined-stream": "~1.0.6", 2257 | "extend": "~3.0.2", 2258 | "forever-agent": "~0.6.1", 2259 | "form-data": "~2.3.2", 2260 | "har-validator": "~5.1.0", 2261 | "http-signature": "~1.2.0", 2262 | "is-typedarray": "~1.0.0", 2263 | "isstream": "~0.1.2", 2264 | "json-stringify-safe": "~5.0.1", 2265 | "mime-types": "~2.1.19", 2266 | "oauth-sign": "~0.9.0", 2267 | "performance-now": "^2.1.0", 2268 | "qs": "~6.5.2", 2269 | "safe-buffer": "^5.1.2", 2270 | "tough-cookie": "~2.4.3", 2271 | "tunnel-agent": "^0.6.0", 2272 | "uuid": "^3.3.2" 2273 | } 2274 | }, 2275 | "require-directory": { 2276 | "version": "2.1.1", 2277 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 2278 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", 2279 | "dev": true 2280 | }, 2281 | "require-main-filename": { 2282 | "version": "2.0.0", 2283 | "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", 2284 | "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", 2285 | "dev": true 2286 | }, 2287 | "resolve": { 2288 | "version": "1.11.1", 2289 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz", 2290 | "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==", 2291 | "dev": true, 2292 | "requires": { 2293 | "path-parse": "^1.0.6" 2294 | } 2295 | }, 2296 | "responselike": { 2297 | "version": "1.0.2", 2298 | "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", 2299 | "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", 2300 | "dev": true, 2301 | "requires": { 2302 | "lowercase-keys": "^1.0.0" 2303 | } 2304 | }, 2305 | "safe-buffer": { 2306 | "version": "5.1.2", 2307 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 2308 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 2309 | }, 2310 | "safer-buffer": { 2311 | "version": "2.1.2", 2312 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 2313 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 2314 | }, 2315 | "sanitize-filename": { 2316 | "version": "1.6.1", 2317 | "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.1.tgz", 2318 | "integrity": "sha1-YS2hyWRz+gLczaktzVtKsWSmdyo=", 2319 | "dev": true, 2320 | "requires": { 2321 | "truncate-utf8-bytes": "^1.0.0" 2322 | } 2323 | }, 2324 | "sax": { 2325 | "version": "1.2.4", 2326 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", 2327 | "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" 2328 | }, 2329 | "semver": { 2330 | "version": "5.7.0", 2331 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", 2332 | "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", 2333 | "dev": true 2334 | }, 2335 | "semver-diff": { 2336 | "version": "2.1.0", 2337 | "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", 2338 | "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", 2339 | "dev": true, 2340 | "requires": { 2341 | "semver": "^5.0.3" 2342 | } 2343 | }, 2344 | "set-blocking": { 2345 | "version": "2.0.0", 2346 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 2347 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", 2348 | "dev": true 2349 | }, 2350 | "shebang-command": { 2351 | "version": "1.2.0", 2352 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", 2353 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", 2354 | "dev": true, 2355 | "requires": { 2356 | "shebang-regex": "^1.0.0" 2357 | } 2358 | }, 2359 | "shebang-regex": { 2360 | "version": "1.0.0", 2361 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", 2362 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", 2363 | "dev": true 2364 | }, 2365 | "signal-exit": { 2366 | "version": "3.0.2", 2367 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 2368 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" 2369 | }, 2370 | "single-line-log": { 2371 | "version": "1.1.2", 2372 | "resolved": "https://registry.npmjs.org/single-line-log/-/single-line-log-1.1.2.tgz", 2373 | "integrity": "sha1-wvg/Jzo+GhbtsJlWYdoO1e8DM2Q=", 2374 | "dev": true, 2375 | "requires": { 2376 | "string-width": "^1.0.1" 2377 | } 2378 | }, 2379 | "source-map": { 2380 | "version": "0.6.1", 2381 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 2382 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 2383 | "dev": true 2384 | }, 2385 | "source-map-support": { 2386 | "version": "0.5.12", 2387 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", 2388 | "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", 2389 | "dev": true, 2390 | "requires": { 2391 | "buffer-from": "^1.0.0", 2392 | "source-map": "^0.6.0" 2393 | } 2394 | }, 2395 | "spdx-correct": { 2396 | "version": "3.1.0", 2397 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", 2398 | "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", 2399 | "dev": true, 2400 | "requires": { 2401 | "spdx-expression-parse": "^3.0.0", 2402 | "spdx-license-ids": "^3.0.0" 2403 | } 2404 | }, 2405 | "spdx-exceptions": { 2406 | "version": "2.2.0", 2407 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", 2408 | "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", 2409 | "dev": true 2410 | }, 2411 | "spdx-expression-parse": { 2412 | "version": "3.0.0", 2413 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", 2414 | "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", 2415 | "dev": true, 2416 | "requires": { 2417 | "spdx-exceptions": "^2.1.0", 2418 | "spdx-license-ids": "^3.0.0" 2419 | } 2420 | }, 2421 | "spdx-license-ids": { 2422 | "version": "3.0.4", 2423 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", 2424 | "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==", 2425 | "dev": true 2426 | }, 2427 | "speedometer": { 2428 | "version": "0.1.4", 2429 | "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-0.1.4.tgz", 2430 | "integrity": "sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0=", 2431 | "dev": true 2432 | }, 2433 | "sprintf-js": { 2434 | "version": "1.0.3", 2435 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 2436 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 2437 | "dev": true 2438 | }, 2439 | "sshpk": { 2440 | "version": "1.16.1", 2441 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", 2442 | "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", 2443 | "requires": { 2444 | "asn1": "~0.2.3", 2445 | "assert-plus": "^1.0.0", 2446 | "bcrypt-pbkdf": "^1.0.0", 2447 | "dashdash": "^1.12.0", 2448 | "ecc-jsbn": "~0.1.1", 2449 | "getpass": "^0.1.1", 2450 | "jsbn": "~0.1.0", 2451 | "safer-buffer": "^2.0.2", 2452 | "tweetnacl": "~0.14.0" 2453 | } 2454 | }, 2455 | "stat-mode": { 2456 | "version": "0.3.0", 2457 | "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-0.3.0.tgz", 2458 | "integrity": "sha512-QjMLR0A3WwFY2aZdV0okfFEJB5TRjkggXZjxP3A1RsWsNHNu3YPv8btmtc6iCFZ0Rul3FE93OYogvhOUClU+ng==", 2459 | "dev": true 2460 | }, 2461 | "streamify": { 2462 | "version": "0.2.9", 2463 | "resolved": "https://registry.npmjs.org/streamify/-/streamify-0.2.9.tgz", 2464 | "integrity": "sha512-8pUxeLEef9UO1FxtTt5iikAiyzGI4SZRnGuJ3sz8axZ5Xk+/7ezEV5kuJQsMEFxw7AKYw3xp0Ow+20mmSaJbQQ==", 2465 | "requires": { 2466 | "hashish": "~0.0.4" 2467 | } 2468 | }, 2469 | "string-width": { 2470 | "version": "1.0.2", 2471 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", 2472 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", 2473 | "dev": true, 2474 | "requires": { 2475 | "code-point-at": "^1.0.0", 2476 | "is-fullwidth-code-point": "^1.0.0", 2477 | "strip-ansi": "^3.0.0" 2478 | } 2479 | }, 2480 | "string_decoder": { 2481 | "version": "0.10.31", 2482 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 2483 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", 2484 | "dev": true 2485 | }, 2486 | "strip-ansi": { 2487 | "version": "3.0.1", 2488 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 2489 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 2490 | "dev": true, 2491 | "requires": { 2492 | "ansi-regex": "^2.0.0" 2493 | } 2494 | }, 2495 | "strip-bom": { 2496 | "version": "2.0.0", 2497 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", 2498 | "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", 2499 | "dev": true, 2500 | "requires": { 2501 | "is-utf8": "^0.2.0" 2502 | } 2503 | }, 2504 | "strip-eof": { 2505 | "version": "1.0.0", 2506 | "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", 2507 | "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", 2508 | "dev": true 2509 | }, 2510 | "strip-final-newline": { 2511 | "version": "2.0.0", 2512 | "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", 2513 | "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" 2514 | }, 2515 | "strip-indent": { 2516 | "version": "1.0.1", 2517 | "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", 2518 | "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", 2519 | "dev": true, 2520 | "requires": { 2521 | "get-stdin": "^4.0.1" 2522 | } 2523 | }, 2524 | "strip-json-comments": { 2525 | "version": "2.0.1", 2526 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 2527 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", 2528 | "dev": true 2529 | }, 2530 | "sumchecker": { 2531 | "version": "2.0.2", 2532 | "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-2.0.2.tgz", 2533 | "integrity": "sha1-D0LBDl0F2l1C7qPlbDOZo31sWz4=", 2534 | "dev": true, 2535 | "requires": { 2536 | "debug": "^2.2.0" 2537 | }, 2538 | "dependencies": { 2539 | "debug": { 2540 | "version": "2.6.9", 2541 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 2542 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 2543 | "dev": true, 2544 | "requires": { 2545 | "ms": "2.0.0" 2546 | } 2547 | }, 2548 | "ms": { 2549 | "version": "2.0.0", 2550 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 2551 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 2552 | "dev": true 2553 | } 2554 | } 2555 | }, 2556 | "supports-color": { 2557 | "version": "5.5.0", 2558 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 2559 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 2560 | "dev": true, 2561 | "requires": { 2562 | "has-flag": "^3.0.0" 2563 | } 2564 | }, 2565 | "temp-file": { 2566 | "version": "3.3.3", 2567 | "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.3.3.tgz", 2568 | "integrity": "sha512-ErWJ0vfZwkozaH7dn/5QtYdrGwy6fWID0GG3PEzNb9Vmt6urL4mQ3lKz7NWVi1/kmZsWQzgjTL7/P4mwGx5jqg==", 2569 | "dev": true, 2570 | "requires": { 2571 | "async-exit-hook": "^2.0.1", 2572 | "bluebird-lst": "^1.0.9", 2573 | "fs-extra-p": "^8.0.2" 2574 | } 2575 | }, 2576 | "term-size": { 2577 | "version": "1.2.0", 2578 | "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", 2579 | "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", 2580 | "dev": true, 2581 | "requires": { 2582 | "execa": "^0.7.0" 2583 | } 2584 | }, 2585 | "throttleit": { 2586 | "version": "0.0.2", 2587 | "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz", 2588 | "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=", 2589 | "dev": true 2590 | }, 2591 | "through2": { 2592 | "version": "0.2.3", 2593 | "resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz", 2594 | "integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=", 2595 | "dev": true, 2596 | "requires": { 2597 | "readable-stream": "~1.1.9", 2598 | "xtend": "~2.1.1" 2599 | } 2600 | }, 2601 | "to-readable-stream": { 2602 | "version": "1.0.0", 2603 | "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", 2604 | "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", 2605 | "dev": true 2606 | }, 2607 | "tough-cookie": { 2608 | "version": "2.4.3", 2609 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", 2610 | "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", 2611 | "requires": { 2612 | "psl": "^1.1.24", 2613 | "punycode": "^1.4.1" 2614 | }, 2615 | "dependencies": { 2616 | "punycode": { 2617 | "version": "1.4.1", 2618 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 2619 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" 2620 | } 2621 | } 2622 | }, 2623 | "traverse": { 2624 | "version": "0.6.6", 2625 | "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", 2626 | "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=" 2627 | }, 2628 | "trim-newlines": { 2629 | "version": "1.0.0", 2630 | "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", 2631 | "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", 2632 | "dev": true 2633 | }, 2634 | "truncate-utf8-bytes": { 2635 | "version": "1.0.2", 2636 | "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", 2637 | "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys=", 2638 | "dev": true, 2639 | "requires": { 2640 | "utf8-byte-length": "^1.0.1" 2641 | } 2642 | }, 2643 | "tunnel-agent": { 2644 | "version": "0.6.0", 2645 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 2646 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 2647 | "requires": { 2648 | "safe-buffer": "^5.0.1" 2649 | } 2650 | }, 2651 | "tweetnacl": { 2652 | "version": "0.14.5", 2653 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 2654 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" 2655 | }, 2656 | "type-fest": { 2657 | "version": "0.3.1", 2658 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", 2659 | "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", 2660 | "dev": true 2661 | }, 2662 | "typedarray": { 2663 | "version": "0.0.6", 2664 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 2665 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", 2666 | "dev": true 2667 | }, 2668 | "unique-string": { 2669 | "version": "1.0.0", 2670 | "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", 2671 | "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", 2672 | "dev": true, 2673 | "requires": { 2674 | "crypto-random-string": "^1.0.0" 2675 | } 2676 | }, 2677 | "universalify": { 2678 | "version": "0.1.2", 2679 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 2680 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" 2681 | }, 2682 | "update-notifier": { 2683 | "version": "3.0.1", 2684 | "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-3.0.1.tgz", 2685 | "integrity": "sha512-grrmrB6Zb8DUiyDIaeRTBCkgISYUgETNe7NglEbVsrLWXeESnlCSP50WfRSj/GmzMPl6Uchj24S/p80nP/ZQrQ==", 2686 | "dev": true, 2687 | "requires": { 2688 | "boxen": "^3.0.0", 2689 | "chalk": "^2.0.1", 2690 | "configstore": "^4.0.0", 2691 | "has-yarn": "^2.1.0", 2692 | "import-lazy": "^2.1.0", 2693 | "is-ci": "^2.0.0", 2694 | "is-installed-globally": "^0.1.0", 2695 | "is-npm": "^3.0.0", 2696 | "is-yarn-global": "^0.3.0", 2697 | "latest-version": "^5.0.0", 2698 | "semver-diff": "^2.0.0", 2699 | "xdg-basedir": "^3.0.0" 2700 | } 2701 | }, 2702 | "uri-js": { 2703 | "version": "4.2.2", 2704 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", 2705 | "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", 2706 | "requires": { 2707 | "punycode": "^2.1.0" 2708 | } 2709 | }, 2710 | "url-parse-lax": { 2711 | "version": "3.0.0", 2712 | "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", 2713 | "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", 2714 | "dev": true, 2715 | "requires": { 2716 | "prepend-http": "^2.0.0" 2717 | } 2718 | }, 2719 | "utf8-byte-length": { 2720 | "version": "1.0.4", 2721 | "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", 2722 | "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=", 2723 | "dev": true 2724 | }, 2725 | "util-deprecate": { 2726 | "version": "1.0.2", 2727 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 2728 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 2729 | "dev": true 2730 | }, 2731 | "uuid": { 2732 | "version": "3.3.2", 2733 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", 2734 | "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" 2735 | }, 2736 | "validate-npm-package-license": { 2737 | "version": "3.0.4", 2738 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", 2739 | "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", 2740 | "dev": true, 2741 | "requires": { 2742 | "spdx-correct": "^3.0.0", 2743 | "spdx-expression-parse": "^3.0.0" 2744 | } 2745 | }, 2746 | "verror": { 2747 | "version": "1.10.0", 2748 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 2749 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 2750 | "requires": { 2751 | "assert-plus": "^1.0.0", 2752 | "core-util-is": "1.0.2", 2753 | "extsprintf": "^1.2.0" 2754 | } 2755 | }, 2756 | "which": { 2757 | "version": "1.3.1", 2758 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 2759 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 2760 | "dev": true, 2761 | "requires": { 2762 | "isexe": "^2.0.0" 2763 | } 2764 | }, 2765 | "which-module": { 2766 | "version": "2.0.0", 2767 | "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", 2768 | "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", 2769 | "dev": true 2770 | }, 2771 | "widest-line": { 2772 | "version": "2.0.1", 2773 | "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", 2774 | "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", 2775 | "dev": true, 2776 | "requires": { 2777 | "string-width": "^2.1.1" 2778 | }, 2779 | "dependencies": { 2780 | "ansi-regex": { 2781 | "version": "3.0.0", 2782 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 2783 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", 2784 | "dev": true 2785 | }, 2786 | "is-fullwidth-code-point": { 2787 | "version": "2.0.0", 2788 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 2789 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 2790 | "dev": true 2791 | }, 2792 | "string-width": { 2793 | "version": "2.1.1", 2794 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 2795 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 2796 | "dev": true, 2797 | "requires": { 2798 | "is-fullwidth-code-point": "^2.0.0", 2799 | "strip-ansi": "^4.0.0" 2800 | } 2801 | }, 2802 | "strip-ansi": { 2803 | "version": "4.0.0", 2804 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 2805 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 2806 | "dev": true, 2807 | "requires": { 2808 | "ansi-regex": "^3.0.0" 2809 | } 2810 | } 2811 | } 2812 | }, 2813 | "wrap-ansi": { 2814 | "version": "5.1.0", 2815 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", 2816 | "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", 2817 | "dev": true, 2818 | "requires": { 2819 | "ansi-styles": "^3.2.0", 2820 | "string-width": "^3.0.0", 2821 | "strip-ansi": "^5.0.0" 2822 | }, 2823 | "dependencies": { 2824 | "ansi-regex": { 2825 | "version": "4.1.0", 2826 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 2827 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", 2828 | "dev": true 2829 | }, 2830 | "is-fullwidth-code-point": { 2831 | "version": "2.0.0", 2832 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 2833 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 2834 | "dev": true 2835 | }, 2836 | "string-width": { 2837 | "version": "3.1.0", 2838 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 2839 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 2840 | "dev": true, 2841 | "requires": { 2842 | "emoji-regex": "^7.0.1", 2843 | "is-fullwidth-code-point": "^2.0.0", 2844 | "strip-ansi": "^5.1.0" 2845 | } 2846 | }, 2847 | "strip-ansi": { 2848 | "version": "5.2.0", 2849 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 2850 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 2851 | "dev": true, 2852 | "requires": { 2853 | "ansi-regex": "^4.1.0" 2854 | } 2855 | } 2856 | } 2857 | }, 2858 | "wrappy": { 2859 | "version": "1.0.2", 2860 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2861 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 2862 | }, 2863 | "write-file-atomic": { 2864 | "version": "2.4.3", 2865 | "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", 2866 | "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", 2867 | "dev": true, 2868 | "requires": { 2869 | "graceful-fs": "^4.1.11", 2870 | "imurmurhash": "^0.1.4", 2871 | "signal-exit": "^3.0.2" 2872 | } 2873 | }, 2874 | "xdg-basedir": { 2875 | "version": "3.0.0", 2876 | "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", 2877 | "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", 2878 | "dev": true 2879 | }, 2880 | "xmlbuilder": { 2881 | "version": "9.0.7", 2882 | "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", 2883 | "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", 2884 | "dev": true 2885 | }, 2886 | "xmldom": { 2887 | "version": "0.1.27", 2888 | "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz", 2889 | "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=", 2890 | "dev": true 2891 | }, 2892 | "xtend": { 2893 | "version": "2.1.2", 2894 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", 2895 | "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", 2896 | "dev": true, 2897 | "requires": { 2898 | "object-keys": "~0.4.0" 2899 | } 2900 | }, 2901 | "y18n": { 2902 | "version": "4.0.0", 2903 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", 2904 | "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", 2905 | "dev": true 2906 | }, 2907 | "yallist": { 2908 | "version": "2.1.2", 2909 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", 2910 | "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", 2911 | "dev": true 2912 | }, 2913 | "yargs": { 2914 | "version": "13.2.4", 2915 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", 2916 | "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", 2917 | "dev": true, 2918 | "requires": { 2919 | "cliui": "^5.0.0", 2920 | "find-up": "^3.0.0", 2921 | "get-caller-file": "^2.0.1", 2922 | "os-locale": "^3.1.0", 2923 | "require-directory": "^2.1.1", 2924 | "require-main-filename": "^2.0.0", 2925 | "set-blocking": "^2.0.0", 2926 | "string-width": "^3.0.0", 2927 | "which-module": "^2.0.0", 2928 | "y18n": "^4.0.0", 2929 | "yargs-parser": "^13.1.0" 2930 | }, 2931 | "dependencies": { 2932 | "ansi-regex": { 2933 | "version": "4.1.0", 2934 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 2935 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", 2936 | "dev": true 2937 | }, 2938 | "find-up": { 2939 | "version": "3.0.0", 2940 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", 2941 | "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", 2942 | "dev": true, 2943 | "requires": { 2944 | "locate-path": "^3.0.0" 2945 | } 2946 | }, 2947 | "is-fullwidth-code-point": { 2948 | "version": "2.0.0", 2949 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 2950 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 2951 | "dev": true 2952 | }, 2953 | "string-width": { 2954 | "version": "3.1.0", 2955 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 2956 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 2957 | "dev": true, 2958 | "requires": { 2959 | "emoji-regex": "^7.0.1", 2960 | "is-fullwidth-code-point": "^2.0.0", 2961 | "strip-ansi": "^5.1.0" 2962 | } 2963 | }, 2964 | "strip-ansi": { 2965 | "version": "5.2.0", 2966 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 2967 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 2968 | "dev": true, 2969 | "requires": { 2970 | "ansi-regex": "^4.1.0" 2971 | } 2972 | } 2973 | } 2974 | }, 2975 | "yargs-parser": { 2976 | "version": "13.1.1", 2977 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", 2978 | "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", 2979 | "dev": true, 2980 | "requires": { 2981 | "camelcase": "^5.0.0", 2982 | "decamelize": "^1.2.0" 2983 | }, 2984 | "dependencies": { 2985 | "camelcase": { 2986 | "version": "5.3.1", 2987 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 2988 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", 2989 | "dev": true 2990 | } 2991 | } 2992 | }, 2993 | "yauzl": { 2994 | "version": "2.4.1", 2995 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", 2996 | "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", 2997 | "dev": true, 2998 | "requires": { 2999 | "fd-slicer": "~1.0.1" 3000 | } 3001 | }, 3002 | "youtube-dl": { 3003 | "version": "git+https://github.com/mayeaux/workingyoutubedl.git#fb02a173c1cb0f3c97c5640b793bf611ebd5b78e", 3004 | "from": "git+https://github.com/mayeaux/workingyoutubedl.git", 3005 | "requires": { 3006 | "debug": "~4.1.1", 3007 | "execa": "~3.2.0", 3008 | "hh-mm-ss": "~1.2.0", 3009 | "mkdirp": "~0.5.1", 3010 | "request": "~2.88.0", 3011 | "streamify": "~0.2.9", 3012 | "universalify": "~0.1.2" 3013 | }, 3014 | "dependencies": { 3015 | "cross-spawn": { 3016 | "version": "7.0.3", 3017 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 3018 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 3019 | "requires": { 3020 | "path-key": "^3.1.0", 3021 | "shebang-command": "^2.0.0", 3022 | "which": "^2.0.1" 3023 | } 3024 | }, 3025 | "debug": { 3026 | "version": "4.1.1", 3027 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 3028 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 3029 | "requires": { 3030 | "ms": "^2.1.1" 3031 | } 3032 | }, 3033 | "execa": { 3034 | "version": "3.2.0", 3035 | "resolved": "https://registry.npmjs.org/execa/-/execa-3.2.0.tgz", 3036 | "integrity": "sha512-kJJfVbI/lZE1PZYDI5VPxp8zXPO9rtxOkhpZ0jMKha56AI9y2gGVC6bkukStQf0ka5Rh15BA5m7cCCH4jmHqkw==", 3037 | "requires": { 3038 | "cross-spawn": "^7.0.0", 3039 | "get-stream": "^5.0.0", 3040 | "human-signals": "^1.1.1", 3041 | "is-stream": "^2.0.0", 3042 | "merge-stream": "^2.0.0", 3043 | "npm-run-path": "^4.0.0", 3044 | "onetime": "^5.1.0", 3045 | "p-finally": "^2.0.0", 3046 | "signal-exit": "^3.0.2", 3047 | "strip-final-newline": "^2.0.0" 3048 | } 3049 | }, 3050 | "get-stream": { 3051 | "version": "5.2.0", 3052 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", 3053 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", 3054 | "requires": { 3055 | "pump": "^3.0.0" 3056 | } 3057 | }, 3058 | "is-stream": { 3059 | "version": "2.0.0", 3060 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", 3061 | "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" 3062 | }, 3063 | "npm-run-path": { 3064 | "version": "4.0.1", 3065 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", 3066 | "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", 3067 | "requires": { 3068 | "path-key": "^3.0.0" 3069 | } 3070 | }, 3071 | "p-finally": { 3072 | "version": "2.0.1", 3073 | "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", 3074 | "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==" 3075 | }, 3076 | "path-key": { 3077 | "version": "3.1.1", 3078 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 3079 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" 3080 | }, 3081 | "shebang-command": { 3082 | "version": "2.0.0", 3083 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 3084 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 3085 | "requires": { 3086 | "shebang-regex": "^3.0.0" 3087 | } 3088 | }, 3089 | "shebang-regex": { 3090 | "version": "3.0.0", 3091 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 3092 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" 3093 | }, 3094 | "which": { 3095 | "version": "2.0.2", 3096 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 3097 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 3098 | "requires": { 3099 | "isexe": "^2.0.0" 3100 | } 3101 | } 3102 | } 3103 | }, 3104 | "ytdl-core": { 3105 | "version": "0.29.2", 3106 | "resolved": "https://registry.npmjs.org/ytdl-core/-/ytdl-core-0.29.2.tgz", 3107 | "integrity": "sha512-rQTxqxF09tKGgWxVtvFfi6ga1KWcHNbUGz09yTklirhqQlsIYvaDFCEhJ0K/RlzMH12FquAAMzh+Qi35fkwbFQ==", 3108 | "requires": { 3109 | "html-entities": "^1.1.3", 3110 | "m3u8stream": "^0.6.2", 3111 | "miniget": "^1.4.0", 3112 | "sax": "^1.1.3" 3113 | } 3114 | }, 3115 | "zero-fill": { 3116 | "version": "2.2.4", 3117 | "resolved": "https://registry.npmjs.org/zero-fill/-/zero-fill-2.2.4.tgz", 3118 | "integrity": "sha512-/N5GEDauLHz2uGnuJXWO1Wfib4EC+q4yp9C1jojM7RubwEKADqIqMcYpETMm1lRop403fi3v1qTOdgDE8DIOdw==" 3119 | } 3120 | } 3121 | } 3122 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "videodownloader", 3 | "version": "1.0.0", 4 | "description": "A video and channel downloader that supports 110 websites, powered by Electron and youtube-dl", 5 | "main": "main.js", 6 | "scripts": { 7 | "postinstall": "install-app-deps", 8 | "start": "electron .", 9 | "pack": "build --dir", 10 | "dist": "build", 11 | "build": "build" 12 | }, 13 | "build": { 14 | "asar": false, 15 | "appId": "yourappid", 16 | "dmg": { 17 | "contents": [ 18 | { 19 | "x": 110, 20 | "y": 150 21 | }, 22 | { 23 | "x": 240, 24 | "y": 150, 25 | "type": "link", 26 | "path": "/Applications" 27 | } 28 | ] 29 | }, 30 | "linux": { 31 | "target": [ 32 | "AppImage", 33 | "deb" 34 | ] 35 | }, 36 | "win": { 37 | "target": "squirrel", 38 | "icon": "build/icon.ico" 39 | } 40 | }, 41 | "repository": "https://github.com/mayeaux/videodownloader", 42 | "keywords": [ 43 | "Electron", 44 | "youtube-dl" 45 | ], 46 | "author": "Mayeaux", 47 | "license": "CC0-1.0", 48 | "devDependencies": { 49 | "electron": "^5.0.5", 50 | "electron-builder": "^20.44.4" 51 | }, 52 | "dependencies": { 53 | "@ffmpeg-installer/ffmpeg": "^1.0.19", 54 | "fs-extra": "^8.1.0", 55 | "youtube-dl": "https://github.com/mayeaux/workingyoutubedl", 56 | "ytdl-core": "^0.29.2" 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /preload.js: -------------------------------------------------------------------------------- 1 | // All of the Node.js APIs are available in the preload process. 2 | // It has the same sandbox as a Chrome extension. 3 | 4 | 5 | // window.addEventListener('DOMContentLoaded', () => { 6 | // for (const versionType of ['chrome', 'electron', 'node']) { 7 | // document.getElementById(`${versionType}-version`).innerText = process.versions[versionType] 8 | // } 9 | // }) 10 | 11 | -------------------------------------------------------------------------------- /renderer.js: -------------------------------------------------------------------------------- 1 | // This file is required by the index.html file and will 2 | // be executed in the renderer process for that window. 3 | // All of the Node.js APIs are available in this process. 4 | 5 | var fs = require('fs-extra'); 6 | const spawn = require('child_process').spawn; 7 | const ytdl = require('ytdl-core'); 8 | var youtubedl = require('youtube-dl'); 9 | const { shell } = require('electron'); 10 | const homedir = require('os').homedir(); 11 | const {dialog} = require('electron').remote; 12 | 13 | const downloader = require('./downloadBinary'); 14 | 15 | const ffmpeg = require('@ffmpeg-installer/ffmpeg'); 16 | 17 | const ffmpegPath = require('@ffmpeg-installer/ffmpeg').path; 18 | 19 | console.log(`ffmpeg path: ${ffmpegPath}`); 20 | 21 | const youtubeBinaryFilePath = youtubedl.getYtdlBinary(); 22 | 23 | console.log(`youtube-dl binary path: ${youtubeBinaryFilePath}`); 24 | 25 | // create videos file if doesn't exist 26 | var dir = `${homedir}/videodownloadervideos`; 27 | 28 | if (!fs.existsSync(dir)) { 29 | fs.mkdirSync(dir); 30 | } 31 | 32 | 33 | // select video input 34 | var selectVideoDirectoryInput = document.getElementsByClassName( 35 | 'selectVideoDirectoryInput' 36 | )[0]; 37 | 38 | var playlistDownloadingDiv = document.getElementsByClassName( 39 | 'playlistDownloadingDiv' 40 | )[0]; 41 | 42 | var titleDiv = document.getElementsByClassName('titleDiv')[0]; 43 | 44 | var downloadPlaylistText = document.getElementsByClassName( 45 | 'downloadPlaylistText' 46 | )[0]; 47 | 48 | // var url = 'https://www.youtube.com/watch?v=ZcAiayke00I'; 49 | function download(url, title, downloadAsAudio, youtubeUrl, saveAsTitleValue) { 50 | let arguments = []; 51 | 52 | // set the url for ytdl 53 | arguments.push(url); 54 | 55 | // verbose output 56 | arguments.push('-v'); 57 | 58 | // arguments.push('-f', 'bestvideo+bestaudio/best'); 59 | 60 | arguments.push('--add-metadata'); 61 | 62 | arguments.push('--ffmpeg-location'); 63 | 64 | arguments.push(ffmpegPath); 65 | 66 | arguments.push('--no-mtime'); 67 | 68 | arguments.push('--ignore-errors'); 69 | 70 | // select download as audio or video 71 | if (downloadAsAudio) { 72 | arguments.push('-f'); 73 | 74 | // arguments.push('bestaudio'); 75 | 76 | // don't want webm as audio 77 | arguments.push('bestaudio[ext!=webm]'); 78 | 79 | /** conversion taking too long atm **/ 80 | // arguments.push('--extract-audio'); 81 | // 82 | // arguments.push('--audio-format'); 83 | // 84 | // arguments.push('mp3'); 85 | 86 | // can add something here later 87 | } else { 88 | 89 | // download as mp4 if it's youtube (tired of reconverting .flv files) 90 | const isYouTubeDownload = url.match('youtube'); 91 | if(isYouTubeDownload){ 92 | console.log('downloading from youtube'); 93 | 94 | arguments.push('-f'); 95 | 96 | arguments.push('bestvideo[ext=mp4]+bestaudio[ext=m4a]/mp4'); 97 | } 98 | 99 | // arguments.push('best'); 100 | } 101 | 102 | 103 | 104 | // // verbose output 105 | 106 | console.log(title); 107 | 108 | // replace forward slashes with underscores 109 | if (title) { 110 | title = title.replace(/\//g, '_'); 111 | console.log('replacing'); 112 | } 113 | 114 | 115 | // TODO: trim to max 255 letters 116 | 117 | // title is that passed or the one from youtube 118 | const fileName = title || '%(title)s'; 119 | 120 | console.log(title); 121 | 122 | let inputtedUrl = selectVideoDirectoryInput.value; 123 | 124 | console.log(inputtedUrl); 125 | 126 | // create 127 | if (!fs.existsSync(inputtedUrl)) { 128 | fs.mkdirp(inputtedUrl); 129 | } 130 | 131 | console.log(__dirname); 132 | 133 | const filePath = inputtedUrl; 134 | 135 | const fileExtension = `%(ext)s`; 136 | 137 | let saveToFolder = `${filePath}/${fileName}.${fileExtension}`; 138 | 139 | console.log(saveToFolder); 140 | 141 | // save to videos directory 142 | arguments.push('-o', saveToFolder); 143 | 144 | console.log(arguments); 145 | 146 | // deleted for now since it requires ffmpeg 147 | // download as audio if needed 148 | // if(downloadAsAudio){ 149 | // console.log('Download as audio'); 150 | // arguments.push('-x'); 151 | // } 152 | 153 | console.log(arguments); 154 | 155 | const ls = spawn(youtubeBinaryFilePath, arguments); 156 | 157 | ls.stdout.on('data', data => { 158 | percentage.innerText = data; 159 | 160 | console.log(`stdout: ${data}`); 161 | }); 162 | 163 | ls.stderr.on('data', data => { 164 | percentage.innerText = data; 165 | 166 | console.log(`stderr: ${data}`); 167 | }); 168 | 169 | ls.on('close', code => { 170 | playlistDownloadingDiv.style.display = 'none'; 171 | titleDiv.style.display = ''; 172 | 173 | // clear out inputs after 174 | youtubeUrl.value = ''; 175 | saveAsTitleValue.value = ''; 176 | 177 | // if it ends successfully say download completed 178 | if (code == 0) { 179 | percentage.innerText = 'Download completed'; 180 | } 181 | 182 | console.log(`child process exited with code ${code}`); 183 | }); 184 | } 185 | 186 | // start download button 187 | var startDownload = document.getElementsByClassName('startDownload')[0]; 188 | 189 | // open folder button 190 | var openFolder = document.getElementsByClassName('openFolder')[0]; 191 | 192 | // percentage div 193 | var percentage = document.getElementsByClassName('percentage')[0]; 194 | 195 | // playlistDownloadingDiv 196 | // titleDiv 197 | // downloadPlaylistText 198 | 199 | openFolder.onclick = function(){ 200 | 201 | var value = document.getElementsByClassName('selectVideoDirectoryInput')[0].value; 202 | 203 | 204 | shell.openItem(value); 205 | }; 206 | 207 | 208 | startDownload.onclick = function() { 209 | var youtubeUrl = document.getElementsByClassName('youtubeUrl')[0]; 210 | var downloadAsAudio = document.getElementsByClassName('downloadAsAudio')[0]; 211 | var saveAsTitle = document.getElementsByClassName('saveAsTitle')[0]; 212 | 213 | var youtubeUrlValue = youtubeUrl.value; 214 | var saveAsTitleValue = saveAsTitle.value; 215 | var downloadAsAudioValue = downloadAsAudio.checked; 216 | 217 | download( 218 | youtubeUrlValue, 219 | saveAsTitleValue, 220 | downloadAsAudioValue, 221 | youtubeUrl, 222 | saveAsTitle 223 | ); 224 | 225 | percentage.scrollIntoView(); 226 | }; 227 | 228 | function youtubeDlInfoAsync(url, options) { 229 | return new Promise(function(resolve, reject) { 230 | youtubedl.getInfo(url, options, function(err, data) { 231 | if (err !== null) reject(err); 232 | else resolve(data); 233 | }); 234 | }); 235 | } 236 | 237 | async function populateTitle() { 238 | 239 | // get save as title div 240 | var saveAsTitle = document.getElementsByClassName('saveAsTitle')[0]; 241 | 242 | // get text from youtube url div value 243 | let text = document.getElementsByClassName('youtubeUrl')[0].value; 244 | 245 | 246 | const isBrighteonDownload = text.match('brighteon'); 247 | 248 | let options; 249 | if (isBrighteonDownload) { 250 | options = ['-f bestvideo']; 251 | } else { 252 | options = ['-j', '--flat-playlist', '--dump-single-json']; 253 | } 254 | 255 | const info = await youtubeDlInfoAsync(text, options); 256 | 257 | // if its a playlist or channel 258 | if (info.length > 2) { 259 | console.log(info); 260 | 261 | const playlistinfo = info[info.length - 1]; 262 | 263 | const uploader = playlistinfo.uploader; 264 | const amountOfUploads = playlistinfo.entries.length; 265 | 266 | console.log(uploader, amountOfUploads); 267 | 268 | downloadPlaylistText.innerHTML = `${amountOfUploads} Item Playlist or Channel To Be Downloaded`; 269 | playlistDownloadingDiv.style.display = ''; 270 | titleDiv.style.display = 'none'; 271 | 272 | selectVideoDirectoryInput.value = 273 | selectVideoDirectoryInput.value + '/' + uploader; 274 | 275 | console.log('an array'); 276 | } else if (info.length == 2) { 277 | 278 | // TODO: trim here 279 | 280 | const trimmedTitle = info[0].title.substring(0, 200); 281 | 282 | saveAsTitle.value = trimmedTitle; 283 | 284 | playlistDownloadingDiv.style.display = 'none'; 285 | titleDiv.style.display = ''; 286 | 287 | playlistDownloadingDiv.style.display = 'none'; 288 | titleDiv.style.display = ''; 289 | 290 | console.log('single item'); 291 | } else if (info && info.title) { 292 | 293 | const trimmedTitle = info.title.substring(0, 200); 294 | 295 | // TODO: trim here 296 | saveAsTitle.value = trimmedTitle; 297 | 298 | playlistDownloadingDiv.style.display = 'none'; 299 | titleDiv.style.display = ''; 300 | 301 | console.log('single item'); 302 | } else { 303 | console.log('ERROR'); 304 | } 305 | 306 | console.log(info); 307 | } 308 | 309 | document.getElementsByClassName('youtubeUrl')[0].onblur = async function() { 310 | await populateTitle(); 311 | }; 312 | 313 | // frontend code 314 | function myFunction() { 315 | /** WHEN PASTED **/ 316 | 317 | // get the copied text off the clipboard 318 | navigator.clipboard 319 | .readText() 320 | .then(async text => { 321 | 322 | // update frontend to reflect text from clipboard 323 | document.getElementsByClassName('youtubeUrl')[0].value = text; 324 | 325 | // 326 | await populateTitle(); 327 | }) 328 | .catch(err => { 329 | console.log(err); 330 | }); 331 | } 332 | 333 | /** SELECT DIRECTORY **/ 334 | 335 | const saveToDirectory = dir; 336 | 337 | selectVideoDirectoryInput.value = saveToDirectory; 338 | 339 | const selectVideoDirectoryButton = document.getElementsByClassName( 340 | 'selectVideoDirectory' 341 | )[0]; 342 | 343 | const selectVideoDirectory = (selectVideoDirectoryButton.onclick = function() { 344 | // get path from electron and load it as selectedPath 345 | var selectedPath = dialog.showOpenDialog({ 346 | defaultPath: './videos', 347 | properties: ['openDirectory'] 348 | }); 349 | 350 | console.log(selectedPath[0]); 351 | 352 | // test if it's a shorter url because its within contained 353 | var newThing = selectedPath[0].split(__dirname)[1]; 354 | 355 | let adjustedUrlWithCurrentDirectory; 356 | if (newThing) { 357 | adjustedUrlWithCurrentDirectory = `.${newThing}`; 358 | } else { 359 | adjustedUrlWithCurrentDirectory = selectedPath[0]; 360 | } 361 | console.log(newThing); 362 | 363 | // console.log(newThing); 364 | 365 | selectVideoDirectoryInput.value = adjustedUrlWithCurrentDirectory; 366 | 367 | if (!fs.existsSync(adjustedUrlWithCurrentDirectory)) { 368 | fs.mkdirSync(adjustedUrlWithCurrentDirectory); 369 | } 370 | 371 | }); 372 | 373 | // remove youtubedl from pathname to give containing folder 374 | const youtubeBinaryContainingFolder = youtubeBinaryFilePath.substr(0, youtubeBinaryFilePath.lastIndexOf("\/")); 375 | 376 | console.log(`youtubeBinaryContainingFolder: ${youtubeBinaryContainingFolder}`); 377 | 378 | // update binary on boot 379 | downloader(youtubeBinaryContainingFolder, function error(err, done) { 380 | if (err) { return console.log(err.stack); } 381 | console.log(done); 382 | }); 383 | -------------------------------------------------------------------------------- /util.js: -------------------------------------------------------------------------------- 1 | // Arguments we dont want users to use with youtube-dl 2 | // because they will break the module. 3 | const badArgs = [ 4 | '-h', 5 | '--help', 6 | '-v', 7 | '--version', 8 | '-U', 9 | '--update', 10 | '-q', 11 | '--quiet', 12 | '-s', 13 | '--simulate', 14 | '-g', 15 | '--get-url', 16 | '-e', 17 | '--get-title', 18 | '--get-id', 19 | '--get-thumbnail', 20 | '--get-description', 21 | '--get-duration', 22 | '--get-filename', 23 | '--get-format', 24 | '-j', 25 | '--dump-json', 26 | '--newline', 27 | '--no-progress', 28 | '--console-title', 29 | '-v', 30 | '--verbose', 31 | '--dump-intermediate-pages', 32 | '--write-pages', 33 | '--print-traffic' 34 | ] 35 | 36 | /** 37 | * Helps parse options used in youtube-dl command. 38 | * 39 | * @param {Array.} 40 | * @return {Array.} 41 | */ 42 | exports.parseOpts = function (args) { 43 | var pos 44 | for (var i = 0, len = badArgs.length; i < len; i++) { 45 | if ((pos = args.indexOf(badArgs[i])) !== -1) { 46 | args.splice(pos, 1) 47 | } 48 | } 49 | return args 50 | } 51 | 52 | /** 53 | * Converts seconds to format hh:mm:ss 54 | * 55 | * @param {Number} seconds 56 | * @return {String} 57 | */ 58 | exports.formatDuration = function (seconds) { 59 | var parts = [] 60 | parts.push(seconds % 60) 61 | var minutes = Math.floor(seconds / 60) 62 | if (minutes > 0) { 63 | parts.push(minutes % 60) 64 | var hours = Math.floor(minutes / 60) 65 | if (hours > 0) { 66 | parts.push(hours) 67 | } 68 | } 69 | return parts.reverse().join(':') 70 | } 71 | 72 | /** 73 | * Checks wether str is a string or not 74 | * 75 | * @param {String} str 76 | * @return {Boolean} 77 | */ 78 | exports.isString = str => typeof str === 'string' 79 | 80 | /** 81 | * Checks arr contains value 82 | * 83 | * @param {Array} arr 84 | * @param {string|number} arr 85 | * @return {Boolean} 86 | */ 87 | exports.has = (arr, value) => arr && arr.indexOf(value) > -1 88 | 89 | exports.isYouTubeRegex = /^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.be)\// 90 | 91 | exports.isWin = 92 | process.platform === 'win32' || process.env.NODE_PLATFORM === 'windows' 93 | --------------------------------------------------------------------------------