1 | #!/usr/bin/env node
|
2 |
|
3 | var download = require('download');
|
4 | var rimraf = require('rimraf');
|
5 | var semver = require('semver');
|
6 | var createBar = require('multimeter')(process);
|
7 | var path = require('path');
|
8 | var fs = require('fs');
|
9 | var merge = require('merge');
|
10 | var urlModule = require('url');
|
11 | var Decompress = require('decompress');
|
12 | var fileExists = require('file-exists');
|
13 | var chalk = require('chalk');
|
14 |
|
15 | var buildType = process.env.npm_config_nwjs_build_type || process.env.NWJS_BUILD_TYPE || 'normal';
|
16 |
|
17 | var v = semver.parse(require('../package.json').version);
|
18 | var version = [v.major, v.minor, v.patch].join('.');
|
19 | if (v.prerelease && typeof v.prerelease[0] === 'string') {
|
20 | var prerelease = v.prerelease[0].split('-');
|
21 | if (prerelease.length > 1) {
|
22 | prerelease = prerelease.slice(0, -1);
|
23 | }
|
24 | version += '-' + prerelease.join('-');
|
25 | }
|
26 |
|
27 | if ( version.slice(-4) === '-sdk' ){
|
28 | version = version.slice(0, -4);
|
29 | buildType = 'sdk';
|
30 | } else if ( version.slice(-3) === 'sdk' ){
|
31 | version = version.slice(0, -3);
|
32 | buildType = 'sdk';
|
33 | }
|
34 |
|
35 | var url = false;
|
36 | var arch = process.env.npm_config_nwjs_process_arch || process.arch;
|
37 | var urlBase = process.env.npm_config_nwjs_urlbase || process.env.NWJS_URLBASE || 'https://dl.nwjs.io/v';
|
38 | var buildTypeSuffix = buildType === 'normal' ? '' : ('-' + buildType);
|
39 |
|
40 |
|
41 | switch (process.platform) {
|
42 | case 'win32':
|
43 | url = urlBase + version + '/nwjs' + buildTypeSuffix + '-v' + version + '-win-' + arch +'.zip';
|
44 | break;
|
45 | case 'darwin':
|
46 | url = urlBase + version + '/nwjs' + buildTypeSuffix + '-v' + version + '-osx-' + arch + '.zip';
|
47 | break;
|
48 | case 'linux':
|
49 | url = urlBase + version + '/nwjs' + buildTypeSuffix + '-v' + version + '-linux-' + arch + '.tar.gz';
|
50 | break;
|
51 | }
|
52 |
|
53 | function logError(e) {
|
54 | console.error(chalk.bold.red((typeof e === 'string') ? e : e.message));
|
55 | process.exit(1);
|
56 | }
|
57 |
|
58 | function cb(error) {
|
59 | if( error != null ) {
|
60 | return logError( error )
|
61 | }
|
62 |
|
63 | process.nextTick(function() {
|
64 | process.exit();
|
65 | });
|
66 | }
|
67 |
|
68 | function fileExistsAndAvailable(filepath) {
|
69 | try {
|
70 | return fileExists(filepath);
|
71 | } catch(err) {
|
72 | return false;
|
73 | }
|
74 | }
|
75 |
|
76 | if (!url) logError('Could not find a compatible version of nw.js to download for your platform.');
|
77 |
|
78 | var dest = path.resolve(__dirname, '..', 'nwjs');
|
79 | rimraf.sync(dest);
|
80 |
|
81 | var bar = createBar({ before: url + ' [' });
|
82 |
|
83 | var total = 0;
|
84 | var progress = 0;
|
85 |
|
86 | var parsedUrl = urlModule.parse(url);
|
87 | var decompressOptions = { strip: 1, mode: '755' };
|
88 | var filePath;
|
89 | if( parsedUrl.protocol == 'file:' ) {
|
90 | filePath = path.resolve(
|
91 | decodeURIComponent(
|
92 | url.slice( 'file://'.length )
|
93 | )
|
94 | );
|
95 | if ( !fileExistsAndAvailable(filePath) ) logError(
|
96 | 'Could not find ' + filePath
|
97 | );
|
98 | new Decompress()
|
99 | .src( filePath )
|
100 | .dest( dest )
|
101 | .use( Decompress.zip(decompressOptions) )
|
102 | .use( Decompress.targz(decompressOptions) )
|
103 | .run( cb );
|
104 | } else {
|
105 | download(url, dest, merge({ extract: true }, decompressOptions))
|
106 | .then(function() {cb();})
|
107 | .catch(function(e) {cb(e);});
|
108 | }
|