Import electron-prebuilt history into npm folder

This commit is contained in:
Kevin Sawicki 2017-07-06 11:20:05 -07:00
commit 9cd5f0cddd
15 changed files with 8558 additions and 0 deletions

5
npm/.gitignore vendored Normal file
View file

@ -0,0 +1,5 @@
node_modules
dist
path.txt
.DS_Store
npm-debug.log

9
npm/.npmignore Normal file
View file

@ -0,0 +1,9 @@
dist/
path.txt
.npmignore
.travis.yml
appveyor.yml
CONTRIBUTING.md
issue_template.md
test/
npm-debug.log

13
npm/.travis.yml Normal file
View file

@ -0,0 +1,13 @@
os:
- linux
- osx
language: node_js
node_js:
- '0.10'
- '0.12'
- '4'
- '5'
- '6'
branches:
only:
- master

7
npm/CONTRIBUTING.md Normal file
View file

@ -0,0 +1,7 @@
releases for this module are handled by https://github.com/johnmuhl/electron-prebuilt-updater
versions published to npm should match the versions published to [github releases for electron](https://github.com/electron/electron/releases)
coding style should be `standard`:
[![js-standard-style](https://raw.githubusercontent.com/feross/standard/master/badge.png)](https://github.com/feross/standard)

7
npm/LICENSE Normal file
View file

@ -0,0 +1,7 @@
Copyright (c) 2015 Mathias Buus-Madsen, Max Ogden and contributors
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

114
npm/README.md Normal file
View file

@ -0,0 +1,114 @@
# electron-prebuilt
[![Travis build status](http://img.shields.io/travis/electron-userland/electron-prebuilt.svg?style=flat)](http://travis-ci.org/electron-userland/electron-prebuilt)
[![AppVeyor build status](https://ci.appveyor.com/api/projects/status/hxcd9vcdn9hr0b3y/branch/master?svg=true)](https://ci.appveyor.com/project/electron-bot/electron-prebuilt/branch/master)
[![badge](https://nodei.co/npm/electron.png?downloads=true)](https://www.npmjs.com/package/electron)
Install [Electron](https://github.com/electron/electron) prebuilt binaries for
command-line use using npm. This module helps you easily install the `electron`
command for use on the command line without having to compile anything.
[Electron](http://electron.atom.io) is a JavaScript runtime that bundles Node.js
and Chromium. You use it similar to the `node` command on the command line for
executing JavaScript programs. For more info you can read [this intro blog post](http://maxogden.com/electron-fundamentals.html)
or dive into the [Electron documentation](http://electron.atom.io/docs).
## Installation
**Note** As of version 1.3.1, this package is published to npm under two names:
`electron` and `electron-prebuilt`. You can currently use either name, but
`electron` is recommended, as the `electron-prebuilt` name is deprecated, and
will only be published until the end of 2016.
Download and install the latest build of Electron for your OS and add it to your
project's `package.json` as a `devDependency`:
```shell
npm install electron --save-dev
```
This is the preferred way to use Electron, as it doesn't require users to
install Electron globally.
You can also use the `-g` flag (global) to symlink it into your PATH:
```shell
npm install -g electron
```
If that command fails with an `EACCESS` error you may have to run it again with `sudo`:
```shell
sudo npm install -g electron
```
Now you can just run `electron` to run electron:
```shell
electron
```
If you need to use an HTTP proxy you can [set these environment variables](https://github.com/request/request/tree/f0c4ec061141051988d1216c24936ad2e7d5c45d#controlling-proxy-behaviour-using-environment-variables).
If you want to change the architecture that is downloaded (e.g., `ia32` on an
`x64` machine), you can use the `--arch` flag with npm install or set the
`npm_config_arch` environment variable:
```shell
npm install --arch=ia32 electron
```
If you need to force a re-download of the asset and the SHASUM file set the `force_no_cache` enviroment variable to true.
## About
Works on Mac, Windows and Linux OSes that Electron supports (e.g. Electron
[does not support Windows XP](https://github.com/electron/electron/issues/691)).
The version numbers of this module match the version number of the [official
Electron releases](https://github.com/electron/electron/releases), which
[do not follow semantic versioning](http://electron.atom.io/docs/tutorial/electron-versioning/).
This module is automatically released whenever a new version of Electron is
released thanks to [electron-prebuilt-updater](https://github.com/electron/electron-prebuilt-updater),
originally written by [John Muhl](https://github.com/johnmuhl/).
## Usage
First, you have to [write an Electron application](http://electron.atom.io/docs/tutorial/quick-start/).
Then, you can run your app using:
```shell
electron your-app/
```
## Related modules
- [electron-packager](https://github.com/electron-userland/electron-packager) -
Package and distribute your Electron app with OS-specific bundles
(.app, .exe etc)
- [electron-builder](https://github.com/electron-userland/electron-builder) -
create installers
- [menubar](https://github.com/maxogden/menubar) - high level way to create
menubar desktop applications with electron
Find more at the [awesome-electron](https://github.com/sindresorhus/awesome-electron) list.
## Programmatic usage
Most people use this from the command line, but if you require `electron` inside
your **Node app** (not your Electron app) it will return the file path to the
binary. Use this to spawn Electron from Node scripts:
```javascript
var electron = require('electron')
var proc = require('child_process')
// will print something similar to /Users/maf/.../Electron
console.log(electron)
// spawn Electron
var child = proc.spawn(electron)
```

25
npm/appveyor.yml Normal file
View file

@ -0,0 +1,25 @@
build: off
branches:
only:
- master
environment:
matrix:
- nodejs_version: "0.10"
- nodejs_version: "0.12"
- nodejs_version: "4"
- nodejs_version: "5"
- nodejs_version: "6"
skip_tags: true
install:
- ps: Install-Product node $env:nodejs_version
- npm install npm
- .\node_modules\.bin\npm install
test_script:
- node --version
- .\node_modules\.bin\npm --version
- .\node_modules\.bin\npm test

10
npm/cli.js Executable file
View file

@ -0,0 +1,10 @@
#!/usr/bin/env node
var electron = require('./')
var proc = require('child_process')
var child = proc.spawn(electron, process.argv.slice(2), {stdio: 'inherit'})
child.on('close', function (code) {
process.exit(code)
})

8150
npm/electron.d.ts vendored Normal file

File diff suppressed because it is too large Load diff

10
npm/index.js Normal file
View file

@ -0,0 +1,10 @@
var fs = require('fs')
var path = require('path')
var pathFile = path.join(__dirname, 'path.txt')
if (fs.existsSync(pathFile)) {
module.exports = path.join(__dirname, fs.readFileSync(pathFile, 'utf-8'))
} else {
throw new Error('Electron failed to install correctly, please delete node_modules/electron and try installing again')
}

65
npm/install.js Executable file
View file

@ -0,0 +1,65 @@
#!/usr/bin/env node
// maintainer note - x.y.z-ab version in package.json -> x.y.z
var version = require('./package').version.replace(/-.*/, '')
var fs = require('fs')
var os = require('os')
var path = require('path')
var extract = require('extract-zip')
var download = require('electron-download')
var installedVersion = null
try {
installedVersion = fs.readFileSync(path.join(__dirname, 'dist', 'version'), 'utf-8').replace(/^v/, '')
} catch (ignored) {
// do nothing
}
var platformPath = getPlatformPath()
if (installedVersion === version && fs.existsSync(path.join(__dirname, platformPath))) {
process.exit(0)
}
// downloads if not cached
download({
cache: process.env.electron_config_cache,
version: version,
platform: process.env.npm_config_platform,
arch: process.env.npm_config_arch,
strictSSL: process.env.npm_config_strict_ssl === 'true',
force: process.env.force_no_cache === 'true',
quiet: ['info', 'verbose', 'silly', 'http'].indexOf(process.env.npm_config_loglevel) === -1
}, extractFile)
// unzips and makes path.txt point at the correct executable
function extractFile (err, zipPath) {
if (err) return onerror(err)
extract(zipPath, {dir: path.join(__dirname, 'dist')}, function (err) {
if (err) return onerror(err)
fs.writeFile(path.join(__dirname, 'path.txt'), platformPath, function (err) {
if (err) return onerror(err)
})
})
}
function onerror (err) {
throw err
}
function getPlatformPath () {
var platform = process.env.npm_config_platform || os.platform()
switch (platform) {
case 'darwin':
return 'dist/Electron.app/Contents/MacOS/Electron'
case 'freebsd':
case 'linux':
return 'dist/electron'
case 'win32':
return 'dist/electron.exe'
default:
throw new Error('Electron builds are not available on platform: ' + platform)
}
}

6
npm/issue_template.md Normal file
View file

@ -0,0 +1,6 @@
If you're having an issue _installing_ Electron, this is the place to report it.
If you're having an issue _using_ Electron, please report it at https://github.com/electron/electron/issues
* Electron version:
* Operating system:

36
npm/package.json Normal file
View file

@ -0,0 +1,36 @@
{
"name": "electron",
"version": "1.7.4",
"description": "Install prebuilt electron binaries for the command-line using npm",
"repository": "https://github.com/electron-userland/electron-prebuilt",
"scripts": {
"cache-clean": "rm -rf ~/.electron && rm -rf dist",
"postinstall": "node install.js",
"pretest": "npm run cache-clean && npm run postinstall",
"test": "tape test/*.js && standard"
},
"bin": {
"electron": "cli.js"
},
"main": "index.js",
"types": "electron.d.ts",
"dependencies": {
"@types/node": "^7.0.18",
"electron-download": "^3.0.1",
"extract-zip": "^1.0.3"
},
"devDependencies": {
"home-path": "^0.1.1",
"path-exists": "^2.0.0",
"standard": "^5.4.1",
"tape": "^3.0.1"
},
"author": "Mathias Buus",
"license": "MIT",
"directories": {
"test": "test"
},
"keywords": [
"electron"
]
}

86
npm/test/errors.js Normal file
View file

@ -0,0 +1,86 @@
var fs = require('fs')
var tape = require('tape')
var path = require('path')
var childProcess = require('child_process')
tape('install fails for unsupported platforms', function (t) {
install({npm_config_platform: 'android'}, function (code, stderr) {
t.notEqual(stderr.indexOf('Electron builds are not available on platform: android'), -1, 'has error message')
t.notEqual(code, 0, 'exited with error')
t.end()
})
})
tape('install fails for unsupported architectures', function (t) {
install({
npm_config_arch: 'midcentury',
npm_config_platform: 'win32',
HOME: process.env.HOME,
USERPROFILE: process.env.USERPROFILE
}, function (code, stderr) {
t.notEqual(stderr.indexOf('Failed to find Electron'), -1, 'has error message')
t.notEqual(stderr.indexOf('win32-midcentury'), -1, 'has error message')
t.notEqual(code, 0, 'exited with error')
t.end()
})
})
tape('require fails for corrupted installs', function (t) {
cli(function (code, stderr) {
t.notEqual(stderr.indexOf('Electron failed to install correctly'), -1, 'has error message')
t.notEqual(code, 0, 'exited with error')
t.end()
})
})
function install (env, callback) {
var restoreFile = removeFile(path.join(__dirname, '..', 'dist', 'version'))
var installPath = path.join(__dirname, '..', 'install.js')
var installProcess = childProcess.fork(installPath, {
silent: true,
env: env
})
var stderr = ''
installProcess.stderr.on('data', function (data) {
stderr += data
})
installProcess.on('close', function (code) {
restoreFile()
callback(code, stderr)
})
}
function cli (callback) {
var restoreFile = removeFile(path.join(__dirname, '..', 'path.txt'))
var cliPath = path.join(__dirname, '..', 'cli.js')
var cliProcess = childProcess.fork(cliPath, {
silent: true
})
var stderr = ''
cliProcess.stderr.on('data', function (data) {
stderr += data
})
cliProcess.on('close', function (code) {
restoreFile()
callback(code, stderr)
})
}
function removeFile (filePath) {
var contents = null
if (fs.existsSync(filePath)) {
contents = fs.readFileSync(filePath)
fs.unlinkSync(filePath)
}
return function restoreFile () {
if (contents != null) {
fs.writeFileSync(filePath, contents)
}
}
}

15
npm/test/index.js Normal file
View file

@ -0,0 +1,15 @@
var tape = require('tape')
var electron = require('../')
var path = require('path')
var pathExists = require('path-exists')
var getHomePath = require('home-path')()
tape('has local binary', function (t) {
t.ok(pathExists.sync(electron), 'electron was downloaded')
t.end()
})
tape('has cache folder', function (t) {
t.ok(pathExists.sync(path.join(getHomePath, './.electron')), 'cache exists')
t.end()
})