├── .gitignore ├── README.md ├── electron-app ├── README.md ├── index.html ├── main.js ├── package-lock.json ├── package.json ├── renderer.js ├── style.css └── yarn.lock ├── native-increment ├── README.md ├── addon.cpp ├── binding.gyp ├── index.js ├── package-lock.json ├── package.json ├── test.js └── yarn.lock └── screenshot.png /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | build/ 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Native Module Electron 2 | 3 |
4 | Screenshot of an Electron app using a native module 5 |
6 | 7 | This example is used in our article on [Running Native Code in Electron](https://pspdfkit.com/blog/2018/running-native-code-in-electron-and-the-case-for-webassembly) and contains two npm packages: 8 | 9 | 1. [`native-increment`], a native addon, which will expose a function that increases a number by one. 10 | 2. [`electron-app`], an [Electron](https://electronjs.org/) application that will use the native addon to increment numbers. 11 | 12 | ## Prerequisites 13 | 14 | * [Node.js](http://nodejs.org/) (with npm or Yarn) 15 | 16 | ## Getting Started 17 | 18 | Please check out [Running Native Code in Electron](https://pspdfkit.com/blog/2018/running-native-code-in-electron-and-the-case-for-webassembly) for an in-depth explanation. 19 | 20 | ### Contributing 21 | 22 | Please ensure 23 | [you have signed our CLA](https://pspdfkit.com/guides/web/current/miscellaneous/contributing/) so that we can 24 | accept your contributions. 25 | 26 | [`native-increment`]: https://github.com/PSPDFKit-labs/native-module-electron/tree/master/native-increment 27 | [`electron-app`]: https://github.com/PSPDFKit-labs/native-module-electron/tree/master/electron-app 28 | -------------------------------------------------------------------------------- /electron-app/README.md: -------------------------------------------------------------------------------- 1 | # Electron App 2 | 3 | The Electron example app that will use a native module. 4 | 5 | This example is used in our article on [Running Native Code in Electron](https://pspdfkit.com/blog/2018/running-native-code-in-electron-and-the-case-for-webassembly). 6 | 7 | ## Prerequisites 8 | 9 | * [Node.js](http://nodejs.org/) (with npm or Yarn) 10 | * Make sure you followed the steps in [Running Native Code in Electron](https://pspdfkit.com/blog/2018/running-native-code-in-electron-and-the-case-for-webassembly) to compile `native-increment` for your Electron version. 11 | 12 | ## Getting Started 13 | 14 | ``` 15 | git clone native-module-electron 16 | cd native-module-electron/electron-app 17 | yarn 18 | yarn start 19 | ``` 20 | -------------------------------------------------------------------------------- /electron-app/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Native Module Electron 7 | 8 | 9 | 10 | 11 |
12 | 13 |

This Electron app uses a native module to increment the number below.

14 | 15 |
16 | 17 | 18 | 19 | 20 |
21 | We are using Node.js 22 | , Chromium 23 | , and Electron 24 | . 25 |
26 | 27 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /electron-app/main.js: -------------------------------------------------------------------------------- 1 | const electron = require("electron"); 2 | // Module to control application life. 3 | const app = electron.app; 4 | // Module to create native browser window. 5 | const BrowserWindow = electron.BrowserWindow; 6 | 7 | const path = require("path"); 8 | const url = require("url"); 9 | 10 | // Keep a global reference of the window object, if you don't, the window will 11 | // be closed automatically when the JavaScript object is garbage collected. 12 | let mainWindow; 13 | 14 | function createWindow() { 15 | // Create the browser window. 16 | mainWindow = new BrowserWindow({ 17 | width: 400, 18 | height: 320, 19 | titleBarStyle: "hidden" 20 | }); 21 | 22 | // and load the index.html of the app. 23 | mainWindow.loadURL( 24 | url.format({ 25 | pathname: path.join(__dirname, "index.html"), 26 | protocol: "file:", 27 | slashes: true 28 | }) 29 | ); 30 | 31 | // Open the DevTools. 32 | // mainWindow.webContents.openDevTools() 33 | 34 | // Emitted when the window is closed. 35 | mainWindow.on("closed", function() { 36 | // Dereference the window object, usually you would store windows 37 | // in an array if your app supports multi windows, this is the time 38 | // when you should delete the corresponding element. 39 | mainWindow = null; 40 | }); 41 | } 42 | 43 | // This method will be called when Electron has finished 44 | // initialization and is ready to create browser windows. 45 | // Some APIs can only be used after this event occurs. 46 | app.on("ready", createWindow); 47 | 48 | // Quit when all windows are closed. 49 | app.on("window-all-closed", function() { 50 | // On OS X it is common for applications and their menu bar 51 | // to stay active until the user quits explicitly with Cmd + Q 52 | if (process.platform !== "darwin") { 53 | app.quit(); 54 | } 55 | }); 56 | 57 | app.on("activate", function() { 58 | // On OS X it's common to re-create a window in the app when the 59 | // dock icon is clicked and there are no other windows open. 60 | if (mainWindow === null) { 61 | createWindow(); 62 | } 63 | }); 64 | 65 | // In this file you can include the rest of your app's specific main process 66 | // code. You can also put them in separate files and require them here. 67 | -------------------------------------------------------------------------------- /electron-app/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "electron-quick-start", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@types/node": { 8 | "version": "8.10.29", 9 | "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.29.tgz", 10 | "integrity": "sha512-zbteaWZ2mdduacm0byELwtRyhYE40aK+pAanQk415gr1eRuu67x7QGOLmn8jz5zI8LDK7d0WI/oT6r5Trz4rzQ==", 11 | "dev": true 12 | }, 13 | "ajv": { 14 | "version": "5.5.2", 15 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", 16 | "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", 17 | "dev": true, 18 | "requires": { 19 | "co": "4.6.0", 20 | "fast-deep-equal": "1.1.0", 21 | "fast-json-stable-stringify": "2.0.0", 22 | "json-schema-traverse": "0.3.1" 23 | } 24 | }, 25 | "ansi-regex": { 26 | "version": "2.1.1", 27 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 28 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", 29 | "dev": true 30 | }, 31 | "array-find-index": { 32 | "version": "1.0.2", 33 | "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", 34 | "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", 35 | "dev": true 36 | }, 37 | "asn1": { 38 | "version": "0.2.4", 39 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", 40 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", 41 | "dev": true, 42 | "requires": { 43 | "safer-buffer": "2.1.2" 44 | } 45 | }, 46 | "assert-plus": { 47 | "version": "1.0.0", 48 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 49 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 50 | "dev": true 51 | }, 52 | "asynckit": { 53 | "version": "0.4.0", 54 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 55 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", 56 | "dev": true 57 | }, 58 | "aws-sign2": { 59 | "version": "0.7.0", 60 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 61 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", 62 | "dev": true 63 | }, 64 | "aws4": { 65 | "version": "1.8.0", 66 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", 67 | "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", 68 | "dev": true 69 | }, 70 | "bcrypt-pbkdf": { 71 | "version": "1.0.2", 72 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", 73 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", 74 | "dev": true, 75 | "optional": true, 76 | "requires": { 77 | "tweetnacl": "0.14.5" 78 | } 79 | }, 80 | "buffer-from": { 81 | "version": "1.1.1", 82 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 83 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", 84 | "dev": true 85 | }, 86 | "builtin-modules": { 87 | "version": "1.1.1", 88 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", 89 | "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", 90 | "dev": true 91 | }, 92 | "camelcase": { 93 | "version": "2.1.1", 94 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", 95 | "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", 96 | "dev": true 97 | }, 98 | "camelcase-keys": { 99 | "version": "2.1.0", 100 | "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", 101 | "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", 102 | "dev": true, 103 | "requires": { 104 | "camelcase": "2.1.1", 105 | "map-obj": "1.0.1" 106 | } 107 | }, 108 | "caseless": { 109 | "version": "0.12.0", 110 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 111 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", 112 | "dev": true 113 | }, 114 | "co": { 115 | "version": "4.6.0", 116 | "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", 117 | "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", 118 | "dev": true 119 | }, 120 | "code-point-at": { 121 | "version": "1.1.0", 122 | "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", 123 | "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", 124 | "dev": true 125 | }, 126 | "combined-stream": { 127 | "version": "1.0.7", 128 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", 129 | "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", 130 | "dev": true, 131 | "requires": { 132 | "delayed-stream": "1.0.0" 133 | } 134 | }, 135 | "concat-stream": { 136 | "version": "1.6.2", 137 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", 138 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", 139 | "dev": true, 140 | "requires": { 141 | "buffer-from": "1.1.1", 142 | "inherits": "2.0.3", 143 | "readable-stream": "2.3.6", 144 | "typedarray": "0.0.6" 145 | }, 146 | "dependencies": { 147 | "isarray": { 148 | "version": "1.0.0", 149 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 150 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 151 | "dev": true 152 | }, 153 | "readable-stream": { 154 | "version": "2.3.6", 155 | "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", 156 | "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", 157 | "dev": true, 158 | "requires": { 159 | "core-util-is": "1.0.2", 160 | "inherits": "2.0.3", 161 | "isarray": "1.0.0", 162 | "process-nextick-args": "2.0.0", 163 | "safe-buffer": "5.1.2", 164 | "string_decoder": "1.1.1", 165 | "util-deprecate": "1.0.2" 166 | } 167 | }, 168 | "string_decoder": { 169 | "version": "1.1.1", 170 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 171 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 172 | "dev": true, 173 | "requires": { 174 | "safe-buffer": "5.1.2" 175 | } 176 | } 177 | } 178 | }, 179 | "core-util-is": { 180 | "version": "1.0.2", 181 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 182 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 183 | "dev": true 184 | }, 185 | "currently-unhandled": { 186 | "version": "0.4.1", 187 | "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", 188 | "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", 189 | "dev": true, 190 | "requires": { 191 | "array-find-index": "1.0.2" 192 | } 193 | }, 194 | "dashdash": { 195 | "version": "1.14.1", 196 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 197 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 198 | "dev": true, 199 | "requires": { 200 | "assert-plus": "1.0.0" 201 | } 202 | }, 203 | "debug": { 204 | "version": "3.2.5", 205 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.5.tgz", 206 | "integrity": "sha512-D61LaDQPQkxJ5AUM2mbSJRbPkNs/TmdmOeLAi1hgDkpDfIfetSrjmWhccwtuResSwMbACjx/xXQofvM9CE/aeg==", 207 | "dev": true, 208 | "requires": { 209 | "ms": "2.1.1" 210 | } 211 | }, 212 | "decamelize": { 213 | "version": "1.2.0", 214 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 215 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", 216 | "dev": true 217 | }, 218 | "deep-extend": { 219 | "version": "0.6.0", 220 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", 221 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", 222 | "dev": true 223 | }, 224 | "delayed-stream": { 225 | "version": "1.0.0", 226 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 227 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", 228 | "dev": true 229 | }, 230 | "ecc-jsbn": { 231 | "version": "0.1.2", 232 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", 233 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", 234 | "dev": true, 235 | "optional": true, 236 | "requires": { 237 | "jsbn": "0.1.1", 238 | "safer-buffer": "2.1.2" 239 | } 240 | }, 241 | "electron": { 242 | "version": "3.0.0", 243 | "resolved": "https://registry.npmjs.org/electron/-/electron-3.0.0.tgz", 244 | "integrity": "sha512-QN9X5vYa4kzJKniwhXlJwioX9qw2fDehdqxN/00KCLz/qnOz/IHLAHGikFjRwfEF2xnkmHxf61F8wn2LePPXXQ==", 245 | "dev": true, 246 | "requires": { 247 | "@types/node": "8.10.29", 248 | "electron-download": "4.1.1", 249 | "extract-zip": "1.6.7" 250 | } 251 | }, 252 | "electron-download": { 253 | "version": "4.1.1", 254 | "resolved": "https://registry.npmjs.org/electron-download/-/electron-download-4.1.1.tgz", 255 | "integrity": "sha512-FjEWG9Jb/ppK/2zToP+U5dds114fM1ZOJqMAR4aXXL5CvyPE9fiqBK/9YcwC9poIFQTEJk/EM/zyRwziziRZrg==", 256 | "dev": true, 257 | "requires": { 258 | "debug": "3.2.5", 259 | "env-paths": "1.0.0", 260 | "fs-extra": "4.0.3", 261 | "minimist": "1.2.0", 262 | "nugget": "2.0.1", 263 | "path-exists": "3.0.0", 264 | "rc": "1.2.8", 265 | "semver": "5.5.1", 266 | "sumchecker": "2.0.2" 267 | } 268 | }, 269 | "env-paths": { 270 | "version": "1.0.0", 271 | "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-1.0.0.tgz", 272 | "integrity": "sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA=", 273 | "dev": true 274 | }, 275 | "error-ex": { 276 | "version": "1.3.2", 277 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 278 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 279 | "dev": true, 280 | "requires": { 281 | "is-arrayish": "0.2.1" 282 | } 283 | }, 284 | "extend": { 285 | "version": "3.0.2", 286 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 287 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", 288 | "dev": true 289 | }, 290 | "extract-zip": { 291 | "version": "1.6.7", 292 | "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz", 293 | "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=", 294 | "dev": true, 295 | "requires": { 296 | "concat-stream": "1.6.2", 297 | "debug": "2.6.9", 298 | "mkdirp": "0.5.1", 299 | "yauzl": "2.4.1" 300 | }, 301 | "dependencies": { 302 | "debug": { 303 | "version": "2.6.9", 304 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 305 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 306 | "dev": true, 307 | "requires": { 308 | "ms": "2.0.0" 309 | } 310 | }, 311 | "ms": { 312 | "version": "2.0.0", 313 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 314 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 315 | "dev": true 316 | } 317 | } 318 | }, 319 | "extsprintf": { 320 | "version": "1.3.0", 321 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 322 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", 323 | "dev": true 324 | }, 325 | "fast-deep-equal": { 326 | "version": "1.1.0", 327 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", 328 | "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", 329 | "dev": true 330 | }, 331 | "fast-json-stable-stringify": { 332 | "version": "2.0.0", 333 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", 334 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", 335 | "dev": true 336 | }, 337 | "fd-slicer": { 338 | "version": "1.0.1", 339 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", 340 | "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", 341 | "dev": true, 342 | "requires": { 343 | "pend": "1.2.0" 344 | } 345 | }, 346 | "find-up": { 347 | "version": "1.1.2", 348 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", 349 | "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", 350 | "dev": true, 351 | "requires": { 352 | "path-exists": "2.1.0", 353 | "pinkie-promise": "2.0.1" 354 | }, 355 | "dependencies": { 356 | "path-exists": { 357 | "version": "2.1.0", 358 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", 359 | "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", 360 | "dev": true, 361 | "requires": { 362 | "pinkie-promise": "2.0.1" 363 | } 364 | } 365 | } 366 | }, 367 | "forever-agent": { 368 | "version": "0.6.1", 369 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 370 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", 371 | "dev": true 372 | }, 373 | "form-data": { 374 | "version": "2.3.2", 375 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", 376 | "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", 377 | "dev": true, 378 | "requires": { 379 | "asynckit": "0.4.0", 380 | "combined-stream": "1.0.6", 381 | "mime-types": "2.1.20" 382 | }, 383 | "dependencies": { 384 | "combined-stream": { 385 | "version": "1.0.6", 386 | "resolved": "http://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", 387 | "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", 388 | "dev": true, 389 | "requires": { 390 | "delayed-stream": "1.0.0" 391 | } 392 | } 393 | } 394 | }, 395 | "fs-extra": { 396 | "version": "4.0.3", 397 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", 398 | "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", 399 | "dev": true, 400 | "requires": { 401 | "graceful-fs": "4.1.11", 402 | "jsonfile": "4.0.0", 403 | "universalify": "0.1.2" 404 | } 405 | }, 406 | "get-stdin": { 407 | "version": "4.0.1", 408 | "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", 409 | "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", 410 | "dev": true 411 | }, 412 | "getpass": { 413 | "version": "0.1.7", 414 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 415 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 416 | "dev": true, 417 | "requires": { 418 | "assert-plus": "1.0.0" 419 | } 420 | }, 421 | "graceful-fs": { 422 | "version": "4.1.11", 423 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", 424 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", 425 | "dev": true 426 | }, 427 | "har-schema": { 428 | "version": "2.0.0", 429 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 430 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", 431 | "dev": true 432 | }, 433 | "har-validator": { 434 | "version": "5.1.0", 435 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz", 436 | "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==", 437 | "dev": true, 438 | "requires": { 439 | "ajv": "5.5.2", 440 | "har-schema": "2.0.0" 441 | } 442 | }, 443 | "hosted-git-info": { 444 | "version": "2.7.1", 445 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", 446 | "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", 447 | "dev": true 448 | }, 449 | "http-signature": { 450 | "version": "1.2.0", 451 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 452 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 453 | "dev": true, 454 | "requires": { 455 | "assert-plus": "1.0.0", 456 | "jsprim": "1.4.1", 457 | "sshpk": "1.14.2" 458 | } 459 | }, 460 | "indent-string": { 461 | "version": "2.1.0", 462 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", 463 | "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", 464 | "dev": true, 465 | "requires": { 466 | "repeating": "2.0.1" 467 | } 468 | }, 469 | "inherits": { 470 | "version": "2.0.3", 471 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 472 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 473 | "dev": true 474 | }, 475 | "ini": { 476 | "version": "1.3.5", 477 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", 478 | "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", 479 | "dev": true 480 | }, 481 | "is-arrayish": { 482 | "version": "0.2.1", 483 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 484 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", 485 | "dev": true 486 | }, 487 | "is-builtin-module": { 488 | "version": "1.0.0", 489 | "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", 490 | "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", 491 | "dev": true, 492 | "requires": { 493 | "builtin-modules": "1.1.1" 494 | } 495 | }, 496 | "is-finite": { 497 | "version": "1.0.2", 498 | "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", 499 | "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", 500 | "dev": true, 501 | "requires": { 502 | "number-is-nan": "1.0.1" 503 | } 504 | }, 505 | "is-fullwidth-code-point": { 506 | "version": "1.0.0", 507 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", 508 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", 509 | "dev": true, 510 | "requires": { 511 | "number-is-nan": "1.0.1" 512 | } 513 | }, 514 | "is-typedarray": { 515 | "version": "1.0.0", 516 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 517 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", 518 | "dev": true 519 | }, 520 | "is-utf8": { 521 | "version": "0.2.1", 522 | "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", 523 | "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", 524 | "dev": true 525 | }, 526 | "isarray": { 527 | "version": "0.0.1", 528 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 529 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", 530 | "dev": true 531 | }, 532 | "isstream": { 533 | "version": "0.1.2", 534 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 535 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", 536 | "dev": true 537 | }, 538 | "jsbn": { 539 | "version": "0.1.1", 540 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 541 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", 542 | "dev": true, 543 | "optional": true 544 | }, 545 | "json-schema": { 546 | "version": "0.2.3", 547 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 548 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", 549 | "dev": true 550 | }, 551 | "json-schema-traverse": { 552 | "version": "0.3.1", 553 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", 554 | "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", 555 | "dev": true 556 | }, 557 | "json-stringify-safe": { 558 | "version": "5.0.1", 559 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 560 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", 561 | "dev": true 562 | }, 563 | "jsonfile": { 564 | "version": "4.0.0", 565 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 566 | "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", 567 | "dev": true, 568 | "requires": { 569 | "graceful-fs": "4.1.11" 570 | } 571 | }, 572 | "jsprim": { 573 | "version": "1.4.1", 574 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 575 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 576 | "dev": true, 577 | "requires": { 578 | "assert-plus": "1.0.0", 579 | "extsprintf": "1.3.0", 580 | "json-schema": "0.2.3", 581 | "verror": "1.10.0" 582 | } 583 | }, 584 | "load-json-file": { 585 | "version": "1.1.0", 586 | "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", 587 | "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", 588 | "dev": true, 589 | "requires": { 590 | "graceful-fs": "4.1.11", 591 | "parse-json": "2.2.0", 592 | "pify": "2.3.0", 593 | "pinkie-promise": "2.0.1", 594 | "strip-bom": "2.0.0" 595 | } 596 | }, 597 | "loud-rejection": { 598 | "version": "1.6.0", 599 | "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", 600 | "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", 601 | "dev": true, 602 | "requires": { 603 | "currently-unhandled": "0.4.1", 604 | "signal-exit": "3.0.2" 605 | } 606 | }, 607 | "map-obj": { 608 | "version": "1.0.1", 609 | "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", 610 | "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", 611 | "dev": true 612 | }, 613 | "meow": { 614 | "version": "3.7.0", 615 | "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", 616 | "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", 617 | "dev": true, 618 | "requires": { 619 | "camelcase-keys": "2.1.0", 620 | "decamelize": "1.2.0", 621 | "loud-rejection": "1.6.0", 622 | "map-obj": "1.0.1", 623 | "minimist": "1.2.0", 624 | "normalize-package-data": "2.4.0", 625 | "object-assign": "4.1.1", 626 | "read-pkg-up": "1.0.1", 627 | "redent": "1.0.0", 628 | "trim-newlines": "1.0.0" 629 | } 630 | }, 631 | "mime-db": { 632 | "version": "1.36.0", 633 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.36.0.tgz", 634 | "integrity": "sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw==", 635 | "dev": true 636 | }, 637 | "mime-types": { 638 | "version": "2.1.20", 639 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.20.tgz", 640 | "integrity": "sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==", 641 | "dev": true, 642 | "requires": { 643 | "mime-db": "1.36.0" 644 | } 645 | }, 646 | "minimist": { 647 | "version": "1.2.0", 648 | "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 649 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", 650 | "dev": true 651 | }, 652 | "mkdirp": { 653 | "version": "0.5.1", 654 | "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 655 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 656 | "dev": true, 657 | "requires": { 658 | "minimist": "0.0.8" 659 | }, 660 | "dependencies": { 661 | "minimist": { 662 | "version": "0.0.8", 663 | "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 664 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 665 | "dev": true 666 | } 667 | } 668 | }, 669 | "ms": { 670 | "version": "2.1.1", 671 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", 672 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", 673 | "dev": true 674 | }, 675 | "normalize-package-data": { 676 | "version": "2.4.0", 677 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", 678 | "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", 679 | "dev": true, 680 | "requires": { 681 | "hosted-git-info": "2.7.1", 682 | "is-builtin-module": "1.0.0", 683 | "semver": "5.5.1", 684 | "validate-npm-package-license": "3.0.4" 685 | } 686 | }, 687 | "nugget": { 688 | "version": "2.0.1", 689 | "resolved": "https://registry.npmjs.org/nugget/-/nugget-2.0.1.tgz", 690 | "integrity": "sha1-IBCVpIfhrTYIGzQy+jytpPjQcbA=", 691 | "dev": true, 692 | "requires": { 693 | "debug": "2.6.9", 694 | "minimist": "1.2.0", 695 | "pretty-bytes": "1.0.4", 696 | "progress-stream": "1.2.0", 697 | "request": "2.88.0", 698 | "single-line-log": "1.1.2", 699 | "throttleit": "0.0.2" 700 | }, 701 | "dependencies": { 702 | "debug": { 703 | "version": "2.6.9", 704 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 705 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 706 | "dev": true, 707 | "requires": { 708 | "ms": "2.0.0" 709 | } 710 | }, 711 | "ms": { 712 | "version": "2.0.0", 713 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 714 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 715 | "dev": true 716 | } 717 | } 718 | }, 719 | "number-is-nan": { 720 | "version": "1.0.1", 721 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 722 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", 723 | "dev": true 724 | }, 725 | "oauth-sign": { 726 | "version": "0.9.0", 727 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", 728 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", 729 | "dev": true 730 | }, 731 | "object-assign": { 732 | "version": "4.1.1", 733 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 734 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", 735 | "dev": true 736 | }, 737 | "object-keys": { 738 | "version": "0.4.0", 739 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", 740 | "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=", 741 | "dev": true 742 | }, 743 | "parse-json": { 744 | "version": "2.2.0", 745 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", 746 | "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", 747 | "dev": true, 748 | "requires": { 749 | "error-ex": "1.3.2" 750 | } 751 | }, 752 | "path-exists": { 753 | "version": "3.0.0", 754 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", 755 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", 756 | "dev": true 757 | }, 758 | "path-type": { 759 | "version": "1.1.0", 760 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", 761 | "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", 762 | "dev": true, 763 | "requires": { 764 | "graceful-fs": "4.1.11", 765 | "pify": "2.3.0", 766 | "pinkie-promise": "2.0.1" 767 | } 768 | }, 769 | "pend": { 770 | "version": "1.2.0", 771 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", 772 | "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", 773 | "dev": true 774 | }, 775 | "performance-now": { 776 | "version": "2.1.0", 777 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 778 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", 779 | "dev": true 780 | }, 781 | "pify": { 782 | "version": "2.3.0", 783 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 784 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", 785 | "dev": true 786 | }, 787 | "pinkie": { 788 | "version": "2.0.4", 789 | "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", 790 | "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", 791 | "dev": true 792 | }, 793 | "pinkie-promise": { 794 | "version": "2.0.1", 795 | "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", 796 | "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", 797 | "dev": true, 798 | "requires": { 799 | "pinkie": "2.0.4" 800 | } 801 | }, 802 | "pretty-bytes": { 803 | "version": "1.0.4", 804 | "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz", 805 | "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=", 806 | "dev": true, 807 | "requires": { 808 | "get-stdin": "4.0.1", 809 | "meow": "3.7.0" 810 | } 811 | }, 812 | "process-nextick-args": { 813 | "version": "2.0.0", 814 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", 815 | "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", 816 | "dev": true 817 | }, 818 | "progress-stream": { 819 | "version": "1.2.0", 820 | "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-1.2.0.tgz", 821 | "integrity": "sha1-LNPP6jO6OonJwSHsM0er6asSX3c=", 822 | "dev": true, 823 | "requires": { 824 | "speedometer": "0.1.4", 825 | "through2": "0.2.3" 826 | } 827 | }, 828 | "psl": { 829 | "version": "1.1.29", 830 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", 831 | "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==", 832 | "dev": true 833 | }, 834 | "punycode": { 835 | "version": "1.4.1", 836 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 837 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", 838 | "dev": true 839 | }, 840 | "qs": { 841 | "version": "6.5.2", 842 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 843 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", 844 | "dev": true 845 | }, 846 | "rc": { 847 | "version": "1.2.8", 848 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", 849 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", 850 | "dev": true, 851 | "requires": { 852 | "deep-extend": "0.6.0", 853 | "ini": "1.3.5", 854 | "minimist": "1.2.0", 855 | "strip-json-comments": "2.0.1" 856 | } 857 | }, 858 | "read-pkg": { 859 | "version": "1.1.0", 860 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", 861 | "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", 862 | "dev": true, 863 | "requires": { 864 | "load-json-file": "1.1.0", 865 | "normalize-package-data": "2.4.0", 866 | "path-type": "1.1.0" 867 | } 868 | }, 869 | "read-pkg-up": { 870 | "version": "1.0.1", 871 | "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", 872 | "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", 873 | "dev": true, 874 | "requires": { 875 | "find-up": "1.1.2", 876 | "read-pkg": "1.1.0" 877 | } 878 | }, 879 | "readable-stream": { 880 | "version": "1.1.14", 881 | "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", 882 | "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", 883 | "dev": true, 884 | "requires": { 885 | "core-util-is": "1.0.2", 886 | "inherits": "2.0.3", 887 | "isarray": "0.0.1", 888 | "string_decoder": "0.10.31" 889 | } 890 | }, 891 | "redent": { 892 | "version": "1.0.0", 893 | "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", 894 | "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", 895 | "dev": true, 896 | "requires": { 897 | "indent-string": "2.1.0", 898 | "strip-indent": "1.0.1" 899 | } 900 | }, 901 | "repeating": { 902 | "version": "2.0.1", 903 | "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", 904 | "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", 905 | "dev": true, 906 | "requires": { 907 | "is-finite": "1.0.2" 908 | } 909 | }, 910 | "request": { 911 | "version": "2.88.0", 912 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", 913 | "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", 914 | "dev": true, 915 | "requires": { 916 | "aws-sign2": "0.7.0", 917 | "aws4": "1.8.0", 918 | "caseless": "0.12.0", 919 | "combined-stream": "1.0.7", 920 | "extend": "3.0.2", 921 | "forever-agent": "0.6.1", 922 | "form-data": "2.3.2", 923 | "har-validator": "5.1.0", 924 | "http-signature": "1.2.0", 925 | "is-typedarray": "1.0.0", 926 | "isstream": "0.1.2", 927 | "json-stringify-safe": "5.0.1", 928 | "mime-types": "2.1.20", 929 | "oauth-sign": "0.9.0", 930 | "performance-now": "2.1.0", 931 | "qs": "6.5.2", 932 | "safe-buffer": "5.1.2", 933 | "tough-cookie": "2.4.3", 934 | "tunnel-agent": "0.6.0", 935 | "uuid": "3.3.2" 936 | } 937 | }, 938 | "safe-buffer": { 939 | "version": "5.1.2", 940 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 941 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 942 | "dev": true 943 | }, 944 | "safer-buffer": { 945 | "version": "2.1.2", 946 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 947 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 948 | "dev": true 949 | }, 950 | "semver": { 951 | "version": "5.5.1", 952 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", 953 | "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==", 954 | "dev": true 955 | }, 956 | "signal-exit": { 957 | "version": "3.0.2", 958 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 959 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", 960 | "dev": true 961 | }, 962 | "single-line-log": { 963 | "version": "1.1.2", 964 | "resolved": "https://registry.npmjs.org/single-line-log/-/single-line-log-1.1.2.tgz", 965 | "integrity": "sha1-wvg/Jzo+GhbtsJlWYdoO1e8DM2Q=", 966 | "dev": true, 967 | "requires": { 968 | "string-width": "1.0.2" 969 | } 970 | }, 971 | "spdx-correct": { 972 | "version": "3.0.0", 973 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", 974 | "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", 975 | "dev": true, 976 | "requires": { 977 | "spdx-expression-parse": "3.0.0", 978 | "spdx-license-ids": "3.0.1" 979 | } 980 | }, 981 | "spdx-exceptions": { 982 | "version": "2.1.0", 983 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", 984 | "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", 985 | "dev": true 986 | }, 987 | "spdx-expression-parse": { 988 | "version": "3.0.0", 989 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", 990 | "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", 991 | "dev": true, 992 | "requires": { 993 | "spdx-exceptions": "2.1.0", 994 | "spdx-license-ids": "3.0.1" 995 | } 996 | }, 997 | "spdx-license-ids": { 998 | "version": "3.0.1", 999 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.1.tgz", 1000 | "integrity": "sha512-TfOfPcYGBB5sDuPn3deByxPhmfegAhpDYKSOXZQN81Oyrrif8ZCodOLzK3AesELnCx03kikhyDwh0pfvvQvF8w==", 1001 | "dev": true 1002 | }, 1003 | "speedometer": { 1004 | "version": "0.1.4", 1005 | "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-0.1.4.tgz", 1006 | "integrity": "sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0=", 1007 | "dev": true 1008 | }, 1009 | "sshpk": { 1010 | "version": "1.14.2", 1011 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", 1012 | "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", 1013 | "dev": true, 1014 | "requires": { 1015 | "asn1": "0.2.4", 1016 | "assert-plus": "1.0.0", 1017 | "bcrypt-pbkdf": "1.0.2", 1018 | "dashdash": "1.14.1", 1019 | "ecc-jsbn": "0.1.2", 1020 | "getpass": "0.1.7", 1021 | "jsbn": "0.1.1", 1022 | "safer-buffer": "2.1.2", 1023 | "tweetnacl": "0.14.5" 1024 | } 1025 | }, 1026 | "string_decoder": { 1027 | "version": "0.10.31", 1028 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 1029 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", 1030 | "dev": true 1031 | }, 1032 | "string-width": { 1033 | "version": "1.0.2", 1034 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", 1035 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", 1036 | "dev": true, 1037 | "requires": { 1038 | "code-point-at": "1.1.0", 1039 | "is-fullwidth-code-point": "1.0.0", 1040 | "strip-ansi": "3.0.1" 1041 | } 1042 | }, 1043 | "strip-ansi": { 1044 | "version": "3.0.1", 1045 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 1046 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 1047 | "dev": true, 1048 | "requires": { 1049 | "ansi-regex": "2.1.1" 1050 | } 1051 | }, 1052 | "strip-bom": { 1053 | "version": "2.0.0", 1054 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", 1055 | "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", 1056 | "dev": true, 1057 | "requires": { 1058 | "is-utf8": "0.2.1" 1059 | } 1060 | }, 1061 | "strip-indent": { 1062 | "version": "1.0.1", 1063 | "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", 1064 | "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", 1065 | "dev": true, 1066 | "requires": { 1067 | "get-stdin": "4.0.1" 1068 | } 1069 | }, 1070 | "strip-json-comments": { 1071 | "version": "2.0.1", 1072 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 1073 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", 1074 | "dev": true 1075 | }, 1076 | "sumchecker": { 1077 | "version": "2.0.2", 1078 | "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-2.0.2.tgz", 1079 | "integrity": "sha1-D0LBDl0F2l1C7qPlbDOZo31sWz4=", 1080 | "dev": true, 1081 | "requires": { 1082 | "debug": "2.6.9" 1083 | }, 1084 | "dependencies": { 1085 | "debug": { 1086 | "version": "2.6.9", 1087 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1088 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1089 | "dev": true, 1090 | "requires": { 1091 | "ms": "2.0.0" 1092 | } 1093 | }, 1094 | "ms": { 1095 | "version": "2.0.0", 1096 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1097 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 1098 | "dev": true 1099 | } 1100 | } 1101 | }, 1102 | "throttleit": { 1103 | "version": "0.0.2", 1104 | "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz", 1105 | "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=", 1106 | "dev": true 1107 | }, 1108 | "through2": { 1109 | "version": "0.2.3", 1110 | "resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz", 1111 | "integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=", 1112 | "dev": true, 1113 | "requires": { 1114 | "readable-stream": "1.1.14", 1115 | "xtend": "2.1.2" 1116 | } 1117 | }, 1118 | "tough-cookie": { 1119 | "version": "2.4.3", 1120 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", 1121 | "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", 1122 | "dev": true, 1123 | "requires": { 1124 | "psl": "1.1.29", 1125 | "punycode": "1.4.1" 1126 | } 1127 | }, 1128 | "trim-newlines": { 1129 | "version": "1.0.0", 1130 | "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", 1131 | "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", 1132 | "dev": true 1133 | }, 1134 | "tunnel-agent": { 1135 | "version": "0.6.0", 1136 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 1137 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 1138 | "dev": true, 1139 | "requires": { 1140 | "safe-buffer": "5.1.2" 1141 | } 1142 | }, 1143 | "tweetnacl": { 1144 | "version": "0.14.5", 1145 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 1146 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", 1147 | "dev": true, 1148 | "optional": true 1149 | }, 1150 | "typedarray": { 1151 | "version": "0.0.6", 1152 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 1153 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", 1154 | "dev": true 1155 | }, 1156 | "universalify": { 1157 | "version": "0.1.2", 1158 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 1159 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", 1160 | "dev": true 1161 | }, 1162 | "util-deprecate": { 1163 | "version": "1.0.2", 1164 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1165 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 1166 | "dev": true 1167 | }, 1168 | "uuid": { 1169 | "version": "3.3.2", 1170 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", 1171 | "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", 1172 | "dev": true 1173 | }, 1174 | "validate-npm-package-license": { 1175 | "version": "3.0.4", 1176 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", 1177 | "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", 1178 | "dev": true, 1179 | "requires": { 1180 | "spdx-correct": "3.0.0", 1181 | "spdx-expression-parse": "3.0.0" 1182 | } 1183 | }, 1184 | "verror": { 1185 | "version": "1.10.0", 1186 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 1187 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 1188 | "dev": true, 1189 | "requires": { 1190 | "assert-plus": "1.0.0", 1191 | "core-util-is": "1.0.2", 1192 | "extsprintf": "1.3.0" 1193 | } 1194 | }, 1195 | "xtend": { 1196 | "version": "2.1.2", 1197 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", 1198 | "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", 1199 | "dev": true, 1200 | "requires": { 1201 | "object-keys": "0.4.0" 1202 | } 1203 | }, 1204 | "yauzl": { 1205 | "version": "2.4.1", 1206 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", 1207 | "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", 1208 | "dev": true, 1209 | "requires": { 1210 | "fd-slicer": "1.0.1" 1211 | } 1212 | } 1213 | } 1214 | } 1215 | -------------------------------------------------------------------------------- /electron-app/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "electron-quick-start", 3 | "version": "1.0.0", 4 | "description": "A minimal Electron application", 5 | "main": "main.js", 6 | "scripts": { 7 | "start": "electron ." 8 | }, 9 | "repository": "https://github.com/electron/electron-quick-start", 10 | "keywords": [ 11 | "Electron", 12 | "quick", 13 | "start", 14 | "tutorial", 15 | "demo" 16 | ], 17 | "author": "GitHub", 18 | "license": "CC0-1.0", 19 | "devDependencies": { 20 | "electron": "^3.0.0" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /electron-app/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 | const { increment } = require("../native-increment"); 6 | 7 | const $number = document.querySelector("#number"); 8 | const $incrementButton = document.querySelector("#increment"); 9 | 10 | let number = 0; 11 | 12 | function renderResult() { 13 | $number.innerHTML = number; 14 | } 15 | 16 | $incrementButton.addEventListener("click", () => { 17 | number = increment(number); 18 | renderResult(); 19 | }); 20 | 21 | renderResult(); 22 | -------------------------------------------------------------------------------- /electron-app/style.css: -------------------------------------------------------------------------------- 1 | html, 2 | body { 3 | margin: 0; 4 | padding: 0; 5 | background: #222427; 6 | color: white; 7 | text-align: center; 8 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, 9 | Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif; 10 | } 11 | 12 | header { 13 | display: none; 14 | } 15 | 16 | /** 17 | * Offset the frame less window alternative on macOS. 18 | * https://electronjs.org/docs/api/frameless-window#alternatives-on-macos 19 | */ 20 | 21 | body.platform-darwin header { 22 | -webkit-app-region: drag; 23 | display: block; 24 | height: 22px; 25 | background-color: #222427; 26 | } 27 | 28 | body.platform-darwin #root { 29 | height: calc(100vh - 22px); 30 | } 31 | 32 | .intro { 33 | margin: 20px; 34 | font-size: 15px; 35 | } 36 | 37 | #number { 38 | font-size: 25px; 39 | margin: 40px; 40 | } 41 | 42 | #increment { 43 | background: rgb(71, 147, 90); 44 | border-radius: 4px; 45 | font-size: 15px; 46 | display: block; 47 | border: none; 48 | color: white; 49 | margin: 20px auto; 50 | margin-top: 0; 51 | padding: 5px 15px; 52 | } 53 | 54 | .versions { 55 | font-size: 10px; 56 | margin: 40px 60px; 57 | color: grey; 58 | } 59 | -------------------------------------------------------------------------------- /electron-app/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@types/node@^8.0.24": 6 | version "8.10.29" 7 | resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.29.tgz#b3a13b58dd7b0682bf1b42022bef4a5a9718f687" 8 | 9 | ajv@^5.3.0: 10 | version "5.5.2" 11 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" 12 | dependencies: 13 | co "^4.6.0" 14 | fast-deep-equal "^1.0.0" 15 | fast-json-stable-stringify "^2.0.0" 16 | json-schema-traverse "^0.3.0" 17 | 18 | ansi-regex@^2.0.0: 19 | version "2.1.1" 20 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 21 | 22 | array-find-index@^1.0.1: 23 | version "1.0.2" 24 | resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" 25 | 26 | asn1@~0.2.3: 27 | version "0.2.4" 28 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" 29 | dependencies: 30 | safer-buffer "~2.1.0" 31 | 32 | assert-plus@1.0.0, assert-plus@^1.0.0: 33 | version "1.0.0" 34 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 35 | 36 | asynckit@^0.4.0: 37 | version "0.4.0" 38 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 39 | 40 | aws-sign2@~0.7.0: 41 | version "0.7.0" 42 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" 43 | 44 | aws4@^1.8.0: 45 | version "1.8.0" 46 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" 47 | 48 | bcrypt-pbkdf@^1.0.0: 49 | version "1.0.2" 50 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" 51 | dependencies: 52 | tweetnacl "^0.14.3" 53 | 54 | buffer-from@^1.0.0: 55 | version "1.1.1" 56 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 57 | 58 | builtin-modules@^1.0.0: 59 | version "1.1.1" 60 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" 61 | 62 | camelcase-keys@^2.0.0: 63 | version "2.1.0" 64 | resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" 65 | dependencies: 66 | camelcase "^2.0.0" 67 | map-obj "^1.0.0" 68 | 69 | camelcase@^2.0.0: 70 | version "2.1.1" 71 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" 72 | 73 | caseless@~0.12.0: 74 | version "0.12.0" 75 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" 76 | 77 | co@^4.6.0: 78 | version "4.6.0" 79 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 80 | 81 | code-point-at@^1.0.0: 82 | version "1.1.0" 83 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 84 | 85 | combined-stream@1.0.6: 86 | version "1.0.6" 87 | resolved "http://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" 88 | dependencies: 89 | delayed-stream "~1.0.0" 90 | 91 | combined-stream@~1.0.6: 92 | version "1.0.7" 93 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828" 94 | dependencies: 95 | delayed-stream "~1.0.0" 96 | 97 | concat-stream@1.6.2: 98 | version "1.6.2" 99 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" 100 | dependencies: 101 | buffer-from "^1.0.0" 102 | inherits "^2.0.3" 103 | readable-stream "^2.2.2" 104 | typedarray "^0.0.6" 105 | 106 | core-util-is@1.0.2, core-util-is@~1.0.0: 107 | version "1.0.2" 108 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 109 | 110 | currently-unhandled@^0.4.1: 111 | version "0.4.1" 112 | resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" 113 | dependencies: 114 | array-find-index "^1.0.1" 115 | 116 | dashdash@^1.12.0: 117 | version "1.14.1" 118 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" 119 | dependencies: 120 | assert-plus "^1.0.0" 121 | 122 | debug@2.6.9, debug@^2.1.3, debug@^2.2.0: 123 | version "2.6.9" 124 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 125 | dependencies: 126 | ms "2.0.0" 127 | 128 | debug@^3.0.0: 129 | version "3.2.5" 130 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.5.tgz#c2418fbfd7a29f4d4f70ff4cea604d4b64c46407" 131 | dependencies: 132 | ms "^2.1.1" 133 | 134 | decamelize@^1.1.2: 135 | version "1.2.0" 136 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 137 | 138 | deep-extend@^0.6.0: 139 | version "0.6.0" 140 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" 141 | 142 | delayed-stream@~1.0.0: 143 | version "1.0.0" 144 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 145 | 146 | ecc-jsbn@~0.1.1: 147 | version "0.1.2" 148 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" 149 | dependencies: 150 | jsbn "~0.1.0" 151 | safer-buffer "^2.1.0" 152 | 153 | electron-download@^4.1.0: 154 | version "4.1.1" 155 | resolved "https://registry.yarnpkg.com/electron-download/-/electron-download-4.1.1.tgz#02e69556705cc456e520f9e035556ed5a015ebe8" 156 | dependencies: 157 | debug "^3.0.0" 158 | env-paths "^1.0.0" 159 | fs-extra "^4.0.1" 160 | minimist "^1.2.0" 161 | nugget "^2.0.1" 162 | path-exists "^3.0.0" 163 | rc "^1.2.1" 164 | semver "^5.4.1" 165 | sumchecker "^2.0.2" 166 | 167 | electron@^3.0.0: 168 | version "3.0.0" 169 | resolved "https://registry.yarnpkg.com/electron/-/electron-3.0.0.tgz#d41e671b1057aee12021c63a5db242075d6dc685" 170 | dependencies: 171 | "@types/node" "^8.0.24" 172 | electron-download "^4.1.0" 173 | extract-zip "^1.0.3" 174 | 175 | env-paths@^1.0.0: 176 | version "1.0.0" 177 | resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-1.0.0.tgz#4168133b42bb05c38a35b1ae4397c8298ab369e0" 178 | 179 | error-ex@^1.2.0: 180 | version "1.3.2" 181 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 182 | dependencies: 183 | is-arrayish "^0.2.1" 184 | 185 | extend@~3.0.2: 186 | version "3.0.2" 187 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" 188 | 189 | extract-zip@^1.0.3: 190 | version "1.6.7" 191 | resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.7.tgz#a840b4b8af6403264c8db57f4f1a74333ef81fe9" 192 | dependencies: 193 | concat-stream "1.6.2" 194 | debug "2.6.9" 195 | mkdirp "0.5.1" 196 | yauzl "2.4.1" 197 | 198 | extsprintf@1.3.0: 199 | version "1.3.0" 200 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" 201 | 202 | extsprintf@^1.2.0: 203 | version "1.4.0" 204 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" 205 | 206 | fast-deep-equal@^1.0.0: 207 | version "1.1.0" 208 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" 209 | 210 | fast-json-stable-stringify@^2.0.0: 211 | version "2.0.0" 212 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" 213 | 214 | fd-slicer@~1.0.1: 215 | version "1.0.1" 216 | resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65" 217 | dependencies: 218 | pend "~1.2.0" 219 | 220 | find-up@^1.0.0: 221 | version "1.1.2" 222 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" 223 | dependencies: 224 | path-exists "^2.0.0" 225 | pinkie-promise "^2.0.0" 226 | 227 | forever-agent@~0.6.1: 228 | version "0.6.1" 229 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 230 | 231 | form-data@~2.3.2: 232 | version "2.3.2" 233 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" 234 | dependencies: 235 | asynckit "^0.4.0" 236 | combined-stream "1.0.6" 237 | mime-types "^2.1.12" 238 | 239 | fs-extra@^4.0.1: 240 | version "4.0.3" 241 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" 242 | dependencies: 243 | graceful-fs "^4.1.2" 244 | jsonfile "^4.0.0" 245 | universalify "^0.1.0" 246 | 247 | get-stdin@^4.0.1: 248 | version "4.0.1" 249 | resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" 250 | 251 | getpass@^0.1.1: 252 | version "0.1.7" 253 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" 254 | dependencies: 255 | assert-plus "^1.0.0" 256 | 257 | graceful-fs@^4.1.2, graceful-fs@^4.1.6: 258 | version "4.1.11" 259 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" 260 | 261 | har-schema@^2.0.0: 262 | version "2.0.0" 263 | resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" 264 | 265 | har-validator@~5.1.0: 266 | version "5.1.0" 267 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.0.tgz#44657f5688a22cfd4b72486e81b3a3fb11742c29" 268 | dependencies: 269 | ajv "^5.3.0" 270 | har-schema "^2.0.0" 271 | 272 | hosted-git-info@^2.1.4: 273 | version "2.7.1" 274 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" 275 | 276 | http-signature@~1.2.0: 277 | version "1.2.0" 278 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" 279 | dependencies: 280 | assert-plus "^1.0.0" 281 | jsprim "^1.2.2" 282 | sshpk "^1.7.0" 283 | 284 | indent-string@^2.1.0: 285 | version "2.1.0" 286 | resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" 287 | dependencies: 288 | repeating "^2.0.0" 289 | 290 | inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: 291 | version "2.0.3" 292 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 293 | 294 | ini@~1.3.0: 295 | version "1.3.5" 296 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" 297 | 298 | is-arrayish@^0.2.1: 299 | version "0.2.1" 300 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 301 | 302 | is-builtin-module@^1.0.0: 303 | version "1.0.0" 304 | resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" 305 | dependencies: 306 | builtin-modules "^1.0.0" 307 | 308 | is-finite@^1.0.0: 309 | version "1.0.2" 310 | resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" 311 | dependencies: 312 | number-is-nan "^1.0.0" 313 | 314 | is-fullwidth-code-point@^1.0.0: 315 | version "1.0.0" 316 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 317 | dependencies: 318 | number-is-nan "^1.0.0" 319 | 320 | is-typedarray@~1.0.0: 321 | version "1.0.0" 322 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 323 | 324 | is-utf8@^0.2.0: 325 | version "0.2.1" 326 | resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" 327 | 328 | isarray@0.0.1: 329 | version "0.0.1" 330 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" 331 | 332 | isarray@~1.0.0: 333 | version "1.0.0" 334 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 335 | 336 | isstream@~0.1.2: 337 | version "0.1.2" 338 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 339 | 340 | jsbn@~0.1.0: 341 | version "0.1.1" 342 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" 343 | 344 | json-schema-traverse@^0.3.0: 345 | version "0.3.1" 346 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" 347 | 348 | json-schema@0.2.3: 349 | version "0.2.3" 350 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" 351 | 352 | json-stringify-safe@~5.0.1: 353 | version "5.0.1" 354 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 355 | 356 | jsonfile@^4.0.0: 357 | version "4.0.0" 358 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" 359 | optionalDependencies: 360 | graceful-fs "^4.1.6" 361 | 362 | jsprim@^1.2.2: 363 | version "1.4.1" 364 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" 365 | dependencies: 366 | assert-plus "1.0.0" 367 | extsprintf "1.3.0" 368 | json-schema "0.2.3" 369 | verror "1.10.0" 370 | 371 | load-json-file@^1.0.0: 372 | version "1.1.0" 373 | resolved "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" 374 | dependencies: 375 | graceful-fs "^4.1.2" 376 | parse-json "^2.2.0" 377 | pify "^2.0.0" 378 | pinkie-promise "^2.0.0" 379 | strip-bom "^2.0.0" 380 | 381 | loud-rejection@^1.0.0: 382 | version "1.6.0" 383 | resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" 384 | dependencies: 385 | currently-unhandled "^0.4.1" 386 | signal-exit "^3.0.0" 387 | 388 | map-obj@^1.0.0, map-obj@^1.0.1: 389 | version "1.0.1" 390 | resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" 391 | 392 | meow@^3.1.0: 393 | version "3.7.0" 394 | resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" 395 | dependencies: 396 | camelcase-keys "^2.0.0" 397 | decamelize "^1.1.2" 398 | loud-rejection "^1.0.0" 399 | map-obj "^1.0.1" 400 | minimist "^1.1.3" 401 | normalize-package-data "^2.3.4" 402 | object-assign "^4.0.1" 403 | read-pkg-up "^1.0.1" 404 | redent "^1.0.0" 405 | trim-newlines "^1.0.0" 406 | 407 | mime-db@~1.36.0: 408 | version "1.36.0" 409 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.36.0.tgz#5020478db3c7fe93aad7bbcc4dcf869c43363397" 410 | 411 | mime-types@^2.1.12, mime-types@~2.1.19: 412 | version "2.1.20" 413 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.20.tgz#930cb719d571e903738520f8470911548ca2cc19" 414 | dependencies: 415 | mime-db "~1.36.0" 416 | 417 | minimist@0.0.8: 418 | version "0.0.8" 419 | resolved "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 420 | 421 | minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0: 422 | version "1.2.0" 423 | resolved "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 424 | 425 | mkdirp@0.5.1: 426 | version "0.5.1" 427 | resolved "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 428 | dependencies: 429 | minimist "0.0.8" 430 | 431 | ms@2.0.0: 432 | version "2.0.0" 433 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 434 | 435 | ms@^2.1.1: 436 | version "2.1.1" 437 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" 438 | 439 | normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: 440 | version "2.4.0" 441 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" 442 | dependencies: 443 | hosted-git-info "^2.1.4" 444 | is-builtin-module "^1.0.0" 445 | semver "2 || 3 || 4 || 5" 446 | validate-npm-package-license "^3.0.1" 447 | 448 | nugget@^2.0.1: 449 | version "2.0.1" 450 | resolved "https://registry.yarnpkg.com/nugget/-/nugget-2.0.1.tgz#201095a487e1ad36081b3432fa3cada4f8d071b0" 451 | dependencies: 452 | debug "^2.1.3" 453 | minimist "^1.1.0" 454 | pretty-bytes "^1.0.2" 455 | progress-stream "^1.1.0" 456 | request "^2.45.0" 457 | single-line-log "^1.1.2" 458 | throttleit "0.0.2" 459 | 460 | number-is-nan@^1.0.0: 461 | version "1.0.1" 462 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 463 | 464 | oauth-sign@~0.9.0: 465 | version "0.9.0" 466 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" 467 | 468 | object-assign@^4.0.1: 469 | version "4.1.1" 470 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 471 | 472 | object-keys@~0.4.0: 473 | version "0.4.0" 474 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" 475 | 476 | parse-json@^2.2.0: 477 | version "2.2.0" 478 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" 479 | dependencies: 480 | error-ex "^1.2.0" 481 | 482 | path-exists@^2.0.0: 483 | version "2.1.0" 484 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" 485 | dependencies: 486 | pinkie-promise "^2.0.0" 487 | 488 | path-exists@^3.0.0: 489 | version "3.0.0" 490 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 491 | 492 | path-type@^1.0.0: 493 | version "1.1.0" 494 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" 495 | dependencies: 496 | graceful-fs "^4.1.2" 497 | pify "^2.0.0" 498 | pinkie-promise "^2.0.0" 499 | 500 | pend@~1.2.0: 501 | version "1.2.0" 502 | resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" 503 | 504 | performance-now@^2.1.0: 505 | version "2.1.0" 506 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" 507 | 508 | pify@^2.0.0: 509 | version "2.3.0" 510 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 511 | 512 | pinkie-promise@^2.0.0: 513 | version "2.0.1" 514 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" 515 | dependencies: 516 | pinkie "^2.0.0" 517 | 518 | pinkie@^2.0.0: 519 | version "2.0.4" 520 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" 521 | 522 | pretty-bytes@^1.0.2: 523 | version "1.0.4" 524 | resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-1.0.4.tgz#0a22e8210609ad35542f8c8d5d2159aff0751c84" 525 | dependencies: 526 | get-stdin "^4.0.1" 527 | meow "^3.1.0" 528 | 529 | process-nextick-args@~2.0.0: 530 | version "2.0.0" 531 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" 532 | 533 | progress-stream@^1.1.0: 534 | version "1.2.0" 535 | resolved "https://registry.yarnpkg.com/progress-stream/-/progress-stream-1.2.0.tgz#2cd3cfea33ba3a89c9c121ec3347abe9ab125f77" 536 | dependencies: 537 | speedometer "~0.1.2" 538 | through2 "~0.2.3" 539 | 540 | psl@^1.1.24: 541 | version "1.1.29" 542 | resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.29.tgz#60f580d360170bb722a797cc704411e6da850c67" 543 | 544 | punycode@^1.4.1: 545 | version "1.4.1" 546 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" 547 | 548 | qs@~6.5.2: 549 | version "6.5.2" 550 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" 551 | 552 | rc@^1.2.1: 553 | version "1.2.8" 554 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" 555 | dependencies: 556 | deep-extend "^0.6.0" 557 | ini "~1.3.0" 558 | minimist "^1.2.0" 559 | strip-json-comments "~2.0.1" 560 | 561 | read-pkg-up@^1.0.1: 562 | version "1.0.1" 563 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" 564 | dependencies: 565 | find-up "^1.0.0" 566 | read-pkg "^1.0.0" 567 | 568 | read-pkg@^1.0.0: 569 | version "1.1.0" 570 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" 571 | dependencies: 572 | load-json-file "^1.0.0" 573 | normalize-package-data "^2.3.2" 574 | path-type "^1.0.0" 575 | 576 | readable-stream@^2.2.2: 577 | version "2.3.6" 578 | resolved "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" 579 | dependencies: 580 | core-util-is "~1.0.0" 581 | inherits "~2.0.3" 582 | isarray "~1.0.0" 583 | process-nextick-args "~2.0.0" 584 | safe-buffer "~5.1.1" 585 | string_decoder "~1.1.1" 586 | util-deprecate "~1.0.1" 587 | 588 | readable-stream@~1.1.9: 589 | version "1.1.14" 590 | resolved "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" 591 | dependencies: 592 | core-util-is "~1.0.0" 593 | inherits "~2.0.1" 594 | isarray "0.0.1" 595 | string_decoder "~0.10.x" 596 | 597 | redent@^1.0.0: 598 | version "1.0.0" 599 | resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" 600 | dependencies: 601 | indent-string "^2.1.0" 602 | strip-indent "^1.0.1" 603 | 604 | repeating@^2.0.0: 605 | version "2.0.1" 606 | resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" 607 | dependencies: 608 | is-finite "^1.0.0" 609 | 610 | request@^2.45.0: 611 | version "2.88.0" 612 | resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" 613 | dependencies: 614 | aws-sign2 "~0.7.0" 615 | aws4 "^1.8.0" 616 | caseless "~0.12.0" 617 | combined-stream "~1.0.6" 618 | extend "~3.0.2" 619 | forever-agent "~0.6.1" 620 | form-data "~2.3.2" 621 | har-validator "~5.1.0" 622 | http-signature "~1.2.0" 623 | is-typedarray "~1.0.0" 624 | isstream "~0.1.2" 625 | json-stringify-safe "~5.0.1" 626 | mime-types "~2.1.19" 627 | oauth-sign "~0.9.0" 628 | performance-now "^2.1.0" 629 | qs "~6.5.2" 630 | safe-buffer "^5.1.2" 631 | tough-cookie "~2.4.3" 632 | tunnel-agent "^0.6.0" 633 | uuid "^3.3.2" 634 | 635 | safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: 636 | version "5.1.2" 637 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 638 | 639 | safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: 640 | version "2.1.2" 641 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 642 | 643 | "semver@2 || 3 || 4 || 5", semver@^5.4.1: 644 | version "5.5.1" 645 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.1.tgz#7dfdd8814bdb7cabc7be0fb1d734cfb66c940477" 646 | 647 | signal-exit@^3.0.0: 648 | version "3.0.2" 649 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 650 | 651 | single-line-log@^1.1.2: 652 | version "1.1.2" 653 | resolved "https://registry.yarnpkg.com/single-line-log/-/single-line-log-1.1.2.tgz#c2f83f273a3e1a16edb0995661da0ed5ef033364" 654 | dependencies: 655 | string-width "^1.0.1" 656 | 657 | spdx-correct@^3.0.0: 658 | version "3.0.0" 659 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82" 660 | dependencies: 661 | spdx-expression-parse "^3.0.0" 662 | spdx-license-ids "^3.0.0" 663 | 664 | spdx-exceptions@^2.1.0: 665 | version "2.1.0" 666 | resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9" 667 | 668 | spdx-expression-parse@^3.0.0: 669 | version "3.0.0" 670 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" 671 | dependencies: 672 | spdx-exceptions "^2.1.0" 673 | spdx-license-ids "^3.0.0" 674 | 675 | spdx-license-ids@^3.0.0: 676 | version "3.0.1" 677 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.1.tgz#e2a303236cac54b04031fa7a5a79c7e701df852f" 678 | 679 | speedometer@~0.1.2: 680 | version "0.1.4" 681 | resolved "https://registry.yarnpkg.com/speedometer/-/speedometer-0.1.4.tgz#9876dbd2a169d3115402d48e6ea6329c8816a50d" 682 | 683 | sshpk@^1.7.0: 684 | version "1.14.2" 685 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.2.tgz#c6fc61648a3d9c4e764fd3fcdf4ea105e492ba98" 686 | dependencies: 687 | asn1 "~0.2.3" 688 | assert-plus "^1.0.0" 689 | dashdash "^1.12.0" 690 | getpass "^0.1.1" 691 | safer-buffer "^2.0.2" 692 | optionalDependencies: 693 | bcrypt-pbkdf "^1.0.0" 694 | ecc-jsbn "~0.1.1" 695 | jsbn "~0.1.0" 696 | tweetnacl "~0.14.0" 697 | 698 | string-width@^1.0.1: 699 | version "1.0.2" 700 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 701 | dependencies: 702 | code-point-at "^1.0.0" 703 | is-fullwidth-code-point "^1.0.0" 704 | strip-ansi "^3.0.0" 705 | 706 | string_decoder@~0.10.x: 707 | version "0.10.31" 708 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" 709 | 710 | string_decoder@~1.1.1: 711 | version "1.1.1" 712 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 713 | dependencies: 714 | safe-buffer "~5.1.0" 715 | 716 | strip-ansi@^3.0.0: 717 | version "3.0.1" 718 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 719 | dependencies: 720 | ansi-regex "^2.0.0" 721 | 722 | strip-bom@^2.0.0: 723 | version "2.0.0" 724 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" 725 | dependencies: 726 | is-utf8 "^0.2.0" 727 | 728 | strip-indent@^1.0.1: 729 | version "1.0.1" 730 | resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" 731 | dependencies: 732 | get-stdin "^4.0.1" 733 | 734 | strip-json-comments@~2.0.1: 735 | version "2.0.1" 736 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 737 | 738 | sumchecker@^2.0.2: 739 | version "2.0.2" 740 | resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-2.0.2.tgz#0f42c10e5d05da5d42eea3e56c3399a37d6c5b3e" 741 | dependencies: 742 | debug "^2.2.0" 743 | 744 | throttleit@0.0.2: 745 | version "0.0.2" 746 | resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-0.0.2.tgz#cfedf88e60c00dd9697b61fdd2a8343a9b680eaf" 747 | 748 | through2@~0.2.3: 749 | version "0.2.3" 750 | resolved "https://registry.yarnpkg.com/through2/-/through2-0.2.3.tgz#eb3284da4ea311b6cc8ace3653748a52abf25a3f" 751 | dependencies: 752 | readable-stream "~1.1.9" 753 | xtend "~2.1.1" 754 | 755 | tough-cookie@~2.4.3: 756 | version "2.4.3" 757 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" 758 | dependencies: 759 | psl "^1.1.24" 760 | punycode "^1.4.1" 761 | 762 | trim-newlines@^1.0.0: 763 | version "1.0.0" 764 | resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" 765 | 766 | tunnel-agent@^0.6.0: 767 | version "0.6.0" 768 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 769 | dependencies: 770 | safe-buffer "^5.0.1" 771 | 772 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 773 | version "0.14.5" 774 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" 775 | 776 | typedarray@^0.0.6: 777 | version "0.0.6" 778 | resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" 779 | 780 | universalify@^0.1.0: 781 | version "0.1.2" 782 | resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" 783 | 784 | util-deprecate@~1.0.1: 785 | version "1.0.2" 786 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 787 | 788 | uuid@^3.3.2: 789 | version "3.3.2" 790 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" 791 | 792 | validate-npm-package-license@^3.0.1: 793 | version "3.0.4" 794 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" 795 | dependencies: 796 | spdx-correct "^3.0.0" 797 | spdx-expression-parse "^3.0.0" 798 | 799 | verror@1.10.0: 800 | version "1.10.0" 801 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" 802 | dependencies: 803 | assert-plus "^1.0.0" 804 | core-util-is "1.0.2" 805 | extsprintf "^1.2.0" 806 | 807 | xtend@~2.1.1: 808 | version "2.1.2" 809 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" 810 | dependencies: 811 | object-keys "~0.4.0" 812 | 813 | yauzl@2.4.1: 814 | version "2.4.1" 815 | resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005" 816 | dependencies: 817 | fd-slicer "~1.0.1" 818 | -------------------------------------------------------------------------------- /native-increment/README.md: -------------------------------------------------------------------------------- 1 | # Native Increment 2 | 3 | A native npm example addon that will increment a `number` by one. 4 | 5 | This example is used in our article on [Running Native Code in Electron](https://pspdfkit.com/blog/2018/running-native-code-in-electron-and-the-case-for-webassembly). 6 | 7 | ## Prerequisites 8 | 9 | * [Node.js](http://nodejs.org/) (with npm or Yarn) 10 | 11 | ## Getting Started 12 | 13 | ``` 14 | git clone native-module-electron 15 | cd native-module-electron 16 | yarn 17 | ``` 18 | 19 | ## Compiling (for Node.js) 20 | 21 | ``` 22 | yarn global add node-gyp 23 | node-gyp configure 24 | node-gyp build 25 | ``` 26 | 27 | Please refer to [Running Native Code in Electron](https://pspdfkit.com/blog/2018/running-native-code-in-electron-and-the-case-for-webassembly) for instructions on how to compile this package for an Electron application. 28 | 29 | ## Test 30 | 31 | ``` 32 | node test.js 33 | ``` 34 | -------------------------------------------------------------------------------- /native-increment/addon.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | void Increment(const Nan::FunctionCallbackInfo& info) { 4 | if (info.Length() < 1) { 5 | Nan::ThrowTypeError("Arity mismatch"); 6 | return; 7 | } 8 | 9 | if (!info[0]->IsNumber()) { 10 | Nan::ThrowTypeError("Argument must be a number"); 11 | return; 12 | } 13 | 14 | double arg = info[0]->NumberValue(); 15 | 16 | v8::Local num = Nan::New(arg + 1); 17 | 18 | info.GetReturnValue().Set(num); 19 | } 20 | 21 | void Init(v8::Local exports) { 22 | exports->Set(Nan::New("increment").ToLocalChecked(), 23 | Nan::New(Increment)->GetFunction()); 24 | } 25 | 26 | NODE_MODULE(addon, Init) 27 | -------------------------------------------------------------------------------- /native-increment/binding.gyp: -------------------------------------------------------------------------------- 1 | { 2 | "targets": [{ 3 | "target_name": "addon", 4 | "sources": [ "addon.cpp" ], 5 | "include_dirs": [ 6 | "