├── .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 | 
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 |
Video Url
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
Paste
39 |
40 |
41 |
42 | Title
43 |
44 |
45 |
46 |
47 |
48 |
# Item Playlist or Channel To Be Downloaded`
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
Directory
59 |
60 |
61 |
62 |
Select Directory
63 |
64 |
65 |
66 |
Download As Audio
67 |
68 |
69 |
Start Download
70 |
71 |
72 |
Status: Download Hasn't Started Yet
73 |
74 |
75 |
76 |
Open Videos Folder
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 |
--------------------------------------------------------------------------------