diff --git a/.gitignore b/.gitignore index cd243eab1..18f83d7de 100644 --- a/.gitignore +++ b/.gitignore @@ -19,4 +19,5 @@ node_modules cache build tmp/ +test/temp/ .DS_Store \ No newline at end of file diff --git a/README.md b/README.md index 2f0036d55..e656f671a 100644 --- a/README.md +++ b/README.md @@ -156,6 +156,64 @@ Default value: `null` WINDOWS ONLY: The path to your ICO icon file. If your don't provide your own it will use the one provided by node-webkit. If you are building on MAC or LINUX you must have [Wine](http://winehq.org) installed to use this option. +### Manifest Options + +#### platformOverrides + +Allows you to specify platform-specific manifest values. Example manifest: + +```json +{ + "name": "nw-demo", + "version": "0.1.0", + "main": "index.html", + "window": { + "frame": false, + "toolbar": false + }, + "platformOverrides": { + "win": { + "window": { + "frame": true + } + }, + "osx": {/* + ... + */}, + "linux32": {/* + ... + */}, + "linux64": {/* + ... + */}, + } + +``` + +The platform-specific options will override the others only when building that platform only and the `platformOverrides` property will be removed. + +For example, when building for Windows, the manifest generated and put into the end app (from the manifest above) would be: + +```json +{ + "name": "nw-demo", + "version": "0.1.0", + "main": "index.html", + "window": { + "frame": true, + "toolbar": false + } +} +``` + +## Troubleshooting + +### OSX ulimit + +Darwin (OS X kernel) has a low limit for file descriptors (256 per process) by default, so you might get an `EMFILE` error or an error mentioning "too many open files" if youtry to open more file descriptors than this. + +To get around it, run `ulimit -n 1024` (or add it to your `~/.bash_profile`). For more information, see [henvic/osx-ulimit](https://github.com/henvic/osx-ulimit). + ## Troubleshooting ### OSX ulimit diff --git a/lib/index.js b/lib/index.js index 2830e69c7..dc048e467 100644 --- a/lib/index.js +++ b/lib/index.js @@ -8,6 +8,7 @@ var url = require('url'); var winresourcer = Promise.promisify(require('winresourcer')); var spawn = require('child_process').spawn; var semver = require('semver'); +var platformOverrides = require('platform-overrides'); var detectCurrentPlatform = require('./detectCurrentPlatform.js') var NwVersions = require('./versions'); @@ -58,7 +59,7 @@ function NwBuilder(options) { if (!(platform in platforms)) throw new Error('unknown platform ' + platform) }) - + this._platforms = _.cloneDeep(platforms) // clear all unused platforms @@ -78,6 +79,7 @@ NwBuilder.prototype.build = function (callback) { .then(this.checkVersion) .then(this.platformFilesForVersion) .then(this.downloadNodeWebkit) + .then(this.preparePlatformSpecificManifests) .then(this.createReleaseFolder) .then(this.copyNodeWebkit) .then(this.handleMacApp) @@ -140,22 +142,23 @@ NwBuilder.prototype.checkFiles = function () { self._appPkg = data.json; self._files = data.files; - if(!self.options.appName || self.options.appVersion) { - return Utils.getPackageInfo(self._appPkg).then(function (appPkg) { - self._appPkg = appPkg; - self.options.appName = (self.options.appName ? self.options.appName : appPkg.name); - self.options.appVersion = (self.options.appVersion ? self.options.appVersion : appPkg.version); - }); - } + return Utils.getPackageInfo(self._appPkg).then(function (appPkg) { + self._appPkg = appPkg; + + if(!self.options.appName || self.options.appVersion) { + self.options.appName = (self.options.appName ? self.options.appName : appPkg.name); + self.options.appVersion = (self.options.appVersion ? self.options.appVersion : appPkg.version); + } + }); }); }; NwBuilder.prototype.resolveLatestVersion = function () { var self = this; - + if(self.options.version !== 'latest') return Promise.resolve(); - + return NwVersions.getLatestVersion(self.options.downloadUrl).then(function(latestVersion){ self.emit('log', 'Latest Version: v' + latestVersion); self.options.version = latestVersion; @@ -179,7 +182,7 @@ NwBuilder.prototype.platformFilesForVersion = function () { var self = this; this._forEachPlatform(function (name, platform) { - + var satisfied = !Object.keys(platform.files).every(function(range) { if (semver.satisfies(self._version.version, range)) { platform.files = platform.files[range]; @@ -192,7 +195,7 @@ NwBuilder.prototype.platformFilesForVersion = function () { throw new Error("Unsupported node-webkit version '" + self._version.version + "' for platform '" + platform.type + "'"); } }); - + return true; }; @@ -221,7 +224,7 @@ NwBuilder.prototype.downloadNodeWebkit = function () { } else { self.emit('log', err.msg) } - + return Promise.reject('Unable to download nodewebkit.'); }) ); @@ -246,26 +249,53 @@ NwBuilder.prototype.buildGypModules = function () { }; + +NwBuilder.prototype.preparePlatformSpecificManifests = function(){ + + if(!(this._appPkg.platformOverrides && Object.keys(this._appPkg.platformOverrides).length)){ + return true; + } + + var self = this; + + this._forEachPlatform(function (name, platform) { + + var overrides = self._appPkg.platformOverrides[name]; + if (overrides && Object.keys(overrides).length) { + + platformOverrides({ + options: self._appPkg, + objectMode: true, + platform: name + }, function(err, result){ + if(err) throw(err); + platform.platformSpecificManifest = result; + }); + } + }); +}; + + NwBuilder.prototype.createReleaseFolder = function () { var self = this, releasePath; if (_.isFunction(self.options.buildType)) { - releasePath = self.options.buildType.call(self.options); + releasePath = self.options.buildType.call(self.options); } else { - // buildTypes - switch(self.options.buildType) { - case 'timestamped': - releasePath = self.options.appName + ' - ' + Math.round(Date.now() / 1000).toString(); - break; - - case 'versioned': - releasePath = self.options.appName + ' - v' + self.options.appVersion; - break; - - default: - releasePath = self.options.appName; - } + // buildTypes + switch(self.options.buildType) { + case 'timestamped': + releasePath = self.options.appName + ' - ' + Math.round(Date.now() / 1000).toString(); + break; + + case 'versioned': + releasePath = self.options.appName + ' - v' + self.options.appVersion; + break; + + default: + releasePath = self.options.appName; + } } this._forEachPlatform(function (name, platform) { @@ -285,7 +315,7 @@ NwBuilder.prototype.copyNodeWebkit = function () { copiedFiles = []; this._forEachPlatform(function (name, platform) { - var executable = platform.runable.split('/')[0]; + var executable = platform.runable.split('/')[0]; platform.files.forEach(function (file, i) { var destFile = file; if(i===0) { @@ -305,26 +335,64 @@ NwBuilder.prototype.zipAppFiles = function () { var self = this; // Check if zip is needed - var _needsZip = self.options.macZip + var _needsZip = false, + numberOfPlatformsWithoutOverrides = 0; + + self._zips = {}; - // this can be improved this._forEachPlatform(function(name, platform) { - if (platform.needsZip) - _needsZip = true - }) + if(name === 'osx' && self.options.macZip || platform.needsZip) { + _needsZip = true; + var platformSpecific = !!platform.platformSpecificManifest; + + self._zips[name] = { platformSpecific: platformSpecific }; + + numberOfPlatformsWithoutOverrides += !platformSpecific; + } + }); - this._needsZip = _needsZip; + self._needsZip = _needsZip; return new Promise(function(resolve, reject) { - if(self._needsZip) { - Utils.generateZipFile(self._files, self).then(function (nwFile) { - self._nwFile = nwFile; - resolve(); - }, reject); - } else { - self._nwFile = null; + + if(!self._needsZip){ resolve(); + return; } + + + // create (or don't create) a ZIP for multiple platforms + new Promise(function(resolve, reject) { + if(numberOfPlatformsWithoutOverrides > 1){ + Utils.generateZipFile(self._files, self).then(function (zip) { + resolve(zip); + }, reject); + } + else { + resolve(); + } + }) + .then(function(platformAgnosticZip){ + var zipPromises = []; + + _.forEach(self._zips, function(zip, platformName){ + + if(platformAgnosticZip && !zip.platformSpecific){ + zip.file = platformAgnosticZip; + return; + } + + zipPromises.push(Utils.generateZipFile( + self._files, + self, + JSON.stringify(self._platforms[platformName].platformSpecificManifest) + ).then(function(file){ + zip.file = file; + })); + }); + + Promise.all(zipPromises).then(resolve, reject); + }, reject); }); }; @@ -339,21 +407,50 @@ NwBuilder.prototype.mergeAppFiles = function () { if(!self.options.macZip) { self._files.forEach(function (file) { var dest = path.resolve(platform.releasePath, self.options.appName+'.app', 'Contents', 'Resources', 'app.nw', file.dest); - copiedFiles.push(Utils.copyFile(file.src, dest)); + + if(file.dest === 'package.json' && platform.platformSpecificManifest){ + copiedFiles.push(self.writePlatformSpecificManifest(platform, dest)); + } + else { + copiedFiles.push(Utils.copyFile(file.src, dest)); + } }); } else { // zip just copy the app.nw - copiedFiles.push(Utils.copyFile(self._nwFile, path.resolve(platform.releasePath, self.options.appName+'.app', 'Contents', 'Resources', 'nw.icns'))); + copiedFiles.push(Utils.copyFile( + self.getZipFile(name), + path.resolve(platform.releasePath, self.options.appName+'.app', 'Contents', 'Resources', 'nw.icns') + )); } } else { // We cat the app.nw file into the .exe / nw - copiedFiles.push(Utils.mergeFiles(path.resolve(platform.releasePath, _.first(platform.files)), self._nwFile), platform.chmod); + copiedFiles.push(Utils.mergeFiles( + path.resolve(platform.releasePath, _.first(platform.files)), + self.getZipFile(name), + platform.chmod + )); } }); return Promise.all(copiedFiles); }; +NwBuilder.prototype.getZipFile = function(platformName){ + return this._zips[platformName] && this._zips[platformName].file || null; +}; + +NwBuilder.prototype.writePlatformSpecificManifest = function(platform, dest){ + return new Promise(function(resolve, reject){ + var pkgParentDirectory = path.join(dest, '../'); + if(!fs.existsSync(pkgParentDirectory)) fs.mkdirpSync(pkgParentDirectory); + + fs.writeFile(dest, JSON.stringify(platform.platformSpecificManifest), function(err){ + if(err) return reject(err); + resolve(); + }); + }) +}; + NwBuilder.prototype.handleMacApp = function () { var self = this, allDone = []; var macPlatform = this._platforms.osx; @@ -364,7 +461,7 @@ NwBuilder.prototype.handleMacApp = function () { if(self.options.macIcns) { allDone.push(Utils.copyFile(self.options.macIcns, path.resolve(macPlatform.releasePath, self.options.appName+'.app', 'Contents', 'Resources', 'nw.icns'))); } - + // Handle mac credits if(self.options.macCredits) { allDone.push(Utils.copyFile(self.options.macCredits, path.resolve(macPlatform.releasePath, self.options.appName+'.app', 'Contents', 'Resources', 'Credits.html'))); @@ -406,12 +503,12 @@ NwBuilder.prototype.handleWinApp = function () { exeFile: path.resolve(winPlatform.releasePath, _.first(winPlatform.files)), resourceType: "Icongroup", resourceName: "IDR_MAINFRAME", - lang: 1033, // Required, except when updating or deleting + lang: 1033, // Required, except when updating or deleting resourceFile: path.resolve(self.options.winIco) }, function(err) { if(err) { done.reject('Error while updating the Windows icon.' + - (process.platform !== "win32" ? ' Wine (winehq.org) must be installed to add custom icons from Mac and Linux.' : '') + (process.platform !== "win32" ? ' Wine (winehq.org) must be installed to add custom icons from Mac and Linux.' : '') ); } else { @@ -428,27 +525,27 @@ NwBuilder.prototype.runApp = function () { platform = this._platforms[this.options.currentPlatform], executable = path.resolve(platform.cache, platform.runable); - self.emit('log', 'Launching App'); - return new Promise(function(resolve, reject) { - var p = spawn(executable, ['--enable-logging', self.options.files.replace(/\*[\/\*]*/,"")].concat(self.options.argv)); + self.emit('log', 'Launching App'); + return new Promise(function(resolve, reject) { + var p = spawn(executable, ['--enable-logging', self.options.files.replace(/\*[\/\*]*/,"")].concat(self.options.argv)); - p.stdout.on('data', function(data) { - self.emit('stdout', data); - }); + p.stdout.on('data', function(data) { + self.emit('stdout', data); + }); - p.stderr.on('data', function(data) { - self.emit('stderr', data); - }); + p.stderr.on('data', function(data) { + self.emit('stderr', data); + }); - p.on('close', function(code) { - self.emit('log', 'App exited with code ' + code); - resolve(); - }); + p.on('close', function(code) { + self.emit('log', 'App exited with code ' + code); + resolve(); }); + }); }; NwBuilder.prototype._forEachPlatform = function (fn) { - _.forEach(this._platforms, function(platform, name) { + _.forEach(this._platforms, function(platform, name) { return fn(name, platform) }); }; diff --git a/lib/utils.js b/lib/utils.js index 945635242..3f8be1457 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -106,7 +106,7 @@ module.exports = { zipStream.pipe(writeStream); }); }, - generateZipFile: function (files, _event) { + generateZipFile: function (files, _event, platformSpecificManifest) { var destStream = temp.createWriteStream(), archive = archiver('zip'); @@ -122,7 +122,12 @@ module.exports = { // Add the files files.forEach(function (file) { - archive.file(file.src, { name:file.dest }); + if(file.dest === 'package.json' && platformSpecificManifest){ + archive.append(platformSpecificManifest, {name: 'package.json'}); + } + else { + archive.file(file.src, { name:file.dest }); + } }); // Some logs diff --git a/package.json b/package.json index 600b25435..22c72d247 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,8 @@ "devDependencies": { "nock": "^0.32.3", "tape": "~3.0.1", - "colortape": "0.0.4" + "colortape": "0.0.4", + "redtape": "~1.0.0" }, "dependencies": { "archiver": "^0.10.0", @@ -45,6 +46,7 @@ "tar-fs": "^0.3.2", "temp": "~0.7.0", "update-notifier": "^0.1.8", - "winresourcer": "^0.9.0" + "winresourcer": "^0.9.0", + "platform-overrides": "~0.3.0" } } diff --git a/test/expected/oneOveriddenRestNot/osx.json b/test/expected/oneOveriddenRestNot/osx.json new file mode 100644 index 000000000..7c08f00a2 --- /dev/null +++ b/test/expected/oneOveriddenRestNot/osx.json @@ -0,0 +1,9 @@ +{ + "name": "nw-demo", + "version": "0.1.0", + "main": "index.html", + "window": { + "frame": true, + "toolbar": false + } +} \ No newline at end of file diff --git a/test/expected/platformOverrides/linux32.json b/test/expected/platformOverrides/linux32.json new file mode 100644 index 000000000..88a6eb0d4 --- /dev/null +++ b/test/expected/platformOverrides/linux32.json @@ -0,0 +1,13 @@ +{ + "name": "nw-demo", + "version": "0.1.0", + "main": "another.html", + "window": { + "frame": true, + "toolbar": false + }, + "frame": false, + "x": {}, + "abc": [], + "def": {} +} \ No newline at end of file diff --git a/test/expected/platformOverrides/linux64.json b/test/expected/platformOverrides/linux64.json new file mode 100644 index 000000000..a23eb7f69 --- /dev/null +++ b/test/expected/platformOverrides/linux64.json @@ -0,0 +1,9 @@ +{ + "name": "nw-demo", + "version": "0.1.0", + "main": "index.html", + "window": {}, + "x": [], + "abc": [], + "def": {} +} \ No newline at end of file diff --git a/test/expected/platformOverrides/osx.json b/test/expected/platformOverrides/osx.json new file mode 100644 index 000000000..42637128b --- /dev/null +++ b/test/expected/platformOverrides/osx.json @@ -0,0 +1,12 @@ +{ + "name": "nw-demo", + "version": "0.1.0", + "main": "other.html", + "window": { + "frame": false, + "toolbar": false + }, + "x": ["y", "z"], + "abc": 2, + "def": {} +} \ No newline at end of file diff --git a/test/expected/platformOverrides/win.json b/test/expected/platformOverrides/win.json new file mode 100644 index 000000000..895b46427 --- /dev/null +++ b/test/expected/platformOverrides/win.json @@ -0,0 +1,12 @@ +{ + "name": "nw-demo", + "version": "0.1.0", + "main": "index.html", + "window": { + "frame": true, + "toolbar": false + }, + "x": ["z"], + "abc": [1], + "def": {"x":1} +} \ No newline at end of file diff --git a/test/fixtures/oneOveriddenRestNot/package.json b/test/fixtures/oneOveriddenRestNot/package.json new file mode 100644 index 000000000..c56643075 --- /dev/null +++ b/test/fixtures/oneOveriddenRestNot/package.json @@ -0,0 +1,16 @@ +{ + "name": "nw-demo", + "version": "0.1.0", + "main": "index.html", + "window": { + "frame": false, + "toolbar": false + }, + "platformOverrides": { + "osx": { + "window": { + "frame": true + } + } + } +} \ No newline at end of file diff --git a/test/fixtures/platformOverrides/package.json b/test/fixtures/platformOverrides/package.json new file mode 100644 index 000000000..39645f004 --- /dev/null +++ b/test/fixtures/platformOverrides/package.json @@ -0,0 +1,39 @@ +{ + "name": "nw-demo", + "version": "0.1.0", + "main": "index.html", + "window": { + "frame": false, + "toolbar": false + }, + "x": ["y"], + "abc": [], + "def": {}, + "platformOverrides": { + "win": { + "window": { + "frame": true + }, + "x": ["z"], + "abc": [1], + "def": {"x":1} + }, + "osx": { + "main": "other.html", + "x": ["y", "z"], + "abc": 2 + }, + "linux32": { + "main": "another.html", + "window": { + "frame": true + }, + "frame": false, + "x": {} + }, + "linux64": { + "window": {}, + "x": [] + } + } +} \ No newline at end of file diff --git a/test/nwBuilder.js b/test/nwBuilder.js index 1847141eb..59e6a96f0 100644 --- a/test/nwBuilder.js +++ b/test/nwBuilder.js @@ -1,7 +1,12 @@ var test = require('tape'); +var testSetup = require('redtape'); var NwBuilder = require('./../lib'); var semver = require('semver'); var nock = require('nock'); +var fs = require('fs'); +var path = require('path'); +var _ = require('lodash'); +var del = require('rimraf'); var xmlFixture = 'node-webkit1000false0.8.1-rc1/2013-11-22T04:53:26.000Z"d41d8cd98f00b204e9800998ecf8427e"0STANDARD0.8.1-rc1/node-webkit-v0.8.1-rc1-linux-ia32.tar.gz2013-11-22T04:53:46.000Z"8231308b2cc5fda4a747efd7152d0a25"36489639STANDARD0.8.1-rc1/node-webkit-v0.8.1-rc1-linux-x64.tar.gz2013-11-22T04:53:46.000Z"9b12fbee3d6791b3eed09b310ec5465d"41197729STANDARD0.8.1-rc1/node-webkit-v0.8.1-rc1-osx-ia32.zip2013-11-22T04:53:46.000Z"900e63f57faea8eacc1529679f0654d0"35837061STANDARD0.8.1-rc1/node-webkit-v0.8.1-rc1-win-ia32.zip2013-11-22T04:53:46.000Z"a4be2aecc938a23d477663b65ceecb5c"25790337STANDARD0.8.1-rc1/node-webkit-v0.8.1-win-ia32.zip2013-11-22T04:53:54.000Z"780e50f05fd827d4d8fbd5247800a6f5"25795282STANDARD0.8.1-rc1/nw-headers-v0.8.1.tar.gz2013-11-22T04:53:52.000Z"54cece266e0ebed2a9d24e14c7a80b44"2244679STANDARD0.8.1-rc1/nw.breakpad.ia32.gz2013-11-22T04:53:47.000Z"18caa1dd2d73f7e0e3601d37709a2353"34134326STANDARD0.8.1-rc1/nw.breakpad.x64.gz2013-11-22T04:53:47.000Z"89de6142f9f9f8b218a2c1ccd78660b1"32480448STANDARD0.8.1-rc1/nw.exe.pdb.zip2013-11-22T04:55:28.000Z"b710a21d74704c55158d8444a8f843be"111717394STANDARD0.8.1-rc1/nw.exp2013-11-22T04:54:07.000Z"7f6d81e43ef836d4e76e680b82c415c9"248409STANDARD0.8.1-rc1/nw.lib2013-11-22T04:54:07.000Z"3e369f5e6236e7e7ab8ef41822f553dd"403114STANDARD07.DOC2013-06-20T06:29:42.000Z"a6848ac40a0a5baad09cf0c70832ba33-2"28205568STANDARDdebug/nw_debug_mac.zip2012-09-28T01:40:47.000Z"ce0838e7740c0938bb18a697396a7c8d"59311405STANDARDdebug/nw_release_win32.zip2012-11-19T06:37:26.000Z"0b86263d4527625c043a955ad7678390"37289819STANDARDhello_world2.nw2012-08-23T04:53:10.000Z"c41d08ff68082f30be4b57416a4f6937"538STANDARDindex.0.html2012-10-20T09:58:29.000Z"3dbc41d79f6138a90ea5fb74d6335e8f"2437STANDARDnw.exp2013-02-21T01:33:01.000Z"4e503091e88bd9dd4050e4ea41109835"195197STANDARDosx/2012-07-12T01:20:21.000Z"d41d8cd98f00b204e9800998ecf8427e"0STANDARDosx/cef_mac.pkg2012-07-12T08:13:22.000Z"daf91f573c7ce1557c0671383f2b2cb6"20062051STANDARDowen-cloud/app.zip2013-04-18T08:57:43.000Z"0ba12cf3d221985b6cf28929cedd7ec2"2231248STANDARDplayground/2012-11-08T13:57:37.000Z"d41d8cd98f00b204e9800998ecf8427e"0STANDARDplayground/nw_release_mac.zip2012-11-09T03:15:19.000Z"690bd6c5298c149fb8852d2e8cf29ecd"23407829STANDARDppt.tar2012-10-30T06:46:04.000Z"c4276be5d330a44f26241ac2700b6708"488448STANDARDv0.2.2/nw_release_linux_x32.tar.gz2012-08-23T03:07:30.000Z"6f2a352a1172c88c6209d8ee32da59fd"27180297STANDARDv0.2.2/nw_release_linux_x64.tar.gz2012-08-23T03:11:30.000Z"431af624f01ae78aa5a507fa88b99f98"27236898STANDARDv0.2.2/nw_release_mac.zip2012-08-23T03:16:02.000Z"cbbb2c1a3751ca9b86570d61b2bcb538"22160220STANDARDv0.2.2/nw_release_win32.zip2012-08-23T03:19:01.000Z"386439bfe30390061c0be3a1734029fc"20365825STANDARDv0.2.3/nw_release_linux_x32.tar.gz2012-08-27T02:19:36.000Z"987fc8883028305a4e94d66bfd6a2afc"24809883STANDARDv0.2.3/nw_release_linux_x64.tar.gz2012-08-27T02:20:50.000Z"43a24bae52e9075c2f69025f7570e363"24830503STANDARDv0.2.3/nw_release_mac.zip2012-08-27T01:35:59.000Z"6ce79a90daaeb787e2907f94ac6208d0"22200208STANDARDv0.2.3/nw_release_win32.zip2012-08-27T02:36:45.000Z"cb3486ad9d13a425e25bd1a1ac2f53d1"20310660STANDARDv0.2.4/nw_release_linux_x32.tar.gz2012-08-30T07:20:45.000Z"949e5960356a163a7458ec98dc8479ea"24879548STANDARDv0.2.4/nw_release_linux_x64.tar.gz2012-08-30T07:26:28.000Z"5b3aa4b012b69a5c3bd76620ac1da0d7"24900340STANDARDv0.2.4/nw_release_mac.zip2012-08-30T07:30:21.000Z"bc300c9b1bf84b6aa07ae37bd079e68f"22220054STANDARDv0.2.4/nw_release_win32.zip2012-08-30T07:33:27.000Z"30ef55741446568c0ec7969adfb8b3aa"20323129STANDARDv0.2.5/nw_release_linux_x32.tar.gz2012-09-10T07:01:20.000Z"74c1e96cff3515096d4e9ba71f4036e6"25061415STANDARDv0.2.5/nw_release_linux_x64.tar.gz2012-09-10T07:02:59.000Z"a670166293c710e8a9b40395fdf67c6f"25093596STANDARDv0.2.5/nw_release_mac.zip2012-09-10T07:04:08.000Z"3a347cc5fd6daefd34b9db6e0db1e9a3"22294577STANDARDv0.2.5/nw_release_win32.zip2012-09-10T07:06:52.000Z"e8473725bc96a78d3e0eecd913b34f9d"19980779STANDARDv0.2.6/nw_release_linux_x32.tar.gz2012-09-25T08:11:13.000Z"1a84ecfbef8a49317f0e2fb9c5bb5f92"27155757STANDARDv0.2.6/nw_release_linux_x64.tar.gz2012-09-25T08:15:04.000Z"3ce9faa3d9fabd4846fc67bbbe61aec9"27180697STANDARDv0.2.6/nw_release_mac.zip2012-09-25T08:18:32.000Z"33492f5e68a98533af43ac57f5be3fda"22586992STANDARDv0.2.6/nw_release_win32.zip2012-09-25T08:20:04.000Z"a9263ac061a54c38e7c78076b26b691b"20638194STANDARDv0.3.0/nw_release_linux_x32.tar.gz2012-10-22T07:22:03.000Z"553aaa0f2143bb76fc6cbe4d10416d79"27386485STANDARDv0.3.0/nw_release_linux_x64.tar.gz2012-10-22T07:27:22.000Z"e1a6a00cf5a209cd765314627889a52d"27391859STANDARDv0.3.0/nw_release_mac.zip2012-10-22T07:30:40.000Z"0e0b8f7365ac94ad964df6878edeb97b"22829703STANDARDv0.3.0/nw_release_win32.zip2012-10-23T01:23:02.000Z"0c1cd828e980cf8443dfab4ac08a26af"21040466STANDARDv0.3.1/nw_release_linux_x32.tar.gz2012-10-29T02:16:03.000Z"17ec4de8fbb74225a30107d0bc8804b1"27717885STANDARDv0.3.1/nw_release_linux_x64.tar.gz2012-10-29T02:22:16.000Z"00b86f024ff0de523c48fbd058321790"27723901STANDARDv0.3.1/nw_release_mac.zip2012-10-29T02:26:18.000Z"50867dc3a0972c4108de7ca9f16f8bf8"23212438STANDARDv0.3.1/nw_release_win32.zip2012-10-29T02:30:36.000Z"1b34961609610b37d4769f759e25a5eb"21077696STANDARDv0.3.2/nw-headers-v0.3.2.tar.gz2012-11-07T06:11:38.000Z"68dcf98971a125a67df233214e858d28"2324014STANDARDv0.3.2/nw.exp2012-11-07T08:15:48.000Z"68f44ca8abecfbb159478f3d59d59b41"186006STANDARDv0.3.2/nw.lib2012-11-07T08:15:50.000Z"730b8d90017ccef80c16e1b3983a8d62"301462STANDARDv0.3.2/nw.pdb2012-11-07T08:15:54.000Z"947c9e5393dac4b4b83f4c36e504933d"929792STANDARDv0.3.2/nw_release_linux_x32.tar.gz2012-11-07T09:28:48.000Z"d162ee6b440d8c37f72017e307a789bc"27011029STANDARDv0.3.2/nw_release_linux_x64.tar.gz2012-11-07T09:29:33.000Z"2949c3f5189ce8593e207fc47d8a6d3f"29614911STANDARDv0.3.2/nw_release_mac.zip2012-11-07T01:56:11.000Z"abd0ad4913fb92a740425a18e71eaa62"23407592STANDARDv0.3.2/nw_release_win32.zip2012-11-07T08:15:57.000Z"96c059c75ba1ab89978e7efd61152163"21248627STANDARDv0.3.3/node-webkit-v0.3.3-linux-ia32.tar.gz2012-11-12T06:19:48.000Z"e96fb795bb2e94fcaef686da91a1a3f7"27009526STANDARDv0.3.3/node-webkit-v0.3.3-linux-x64.tar.gz2012-11-12T06:21:34.000Z"bcb90de09df7d3bab80d700f412073a6"29613499STANDARDv0.3.3/node-webkit-v0.3.3-osx-ia32.zip2012-11-12T05:10:55.000Z"9be6819a3fc0d48325e8310aa720e1e2"23407832STANDARDv0.3.3/node-webkit-v0.3.3-win-ia32.zip2012-11-12T06:18:08.000Z"e1c212d35fb756824307431714cb3499"21143088STANDARDv0.3.3/nw-headers-v0.3.3.tar.gz2012-11-12T05:38:53.000Z"2e8d6f8058e4da13a175000585dff586"2324616STANDARDv0.3.3/nw.exp2012-11-12T06:17:57.000Z"d164c43ec5c85c757061aed035a113b4"186006STANDARDv0.3.3/nw.lib2012-11-12T06:18:00.000Z"435f534dd3009bfca36b799ae2168752"301462STANDARDv0.3.3/nw.pdb2012-11-12T06:18:02.000Z"947c9e5393dac4b4b83f4c36e504933d"929792STANDARDv0.3.4/2012-11-20T04:34:32.000Z"d41d8cd98f00b204e9800998ecf8427e"0STANDARDv0.3.4/node-webkit-v0.3.4-linux-ia32.tar.gz2012-11-20T06:12:03.000Z"613c57af853255a25e77df24fd0211e4"27174508STANDARDv0.3.4/node-webkit-v0.3.4-linux-x64.tar.gz2012-11-20T06:12:26.000Z"5ebb760e89acb8e2839cc05759582973"29787150STANDARDv0.3.4/node-webkit-v0.3.4-osx-ia32.zip2012-11-20T06:01:51.000Z"8a8e2ea1c2928ce1ca493c82af6debd1"24146886STANDARDv0.3.4/node-webkit-v0.3.4-win-ia32.zip2012-11-20T06:12:45.000Z"3bb05ef986f83c4b2a6ce697f213b22f"21502491STANDARDv0.3.4/nw-headers-v0.3.4.tar.gz2012-11-20T04:35:03.000Z"c515e44c548b7309f144ba8100004ce5"2331894STANDARDv0.3.4/nw.exp2012-11-20T06:03:21.000Z"d998b77baf015bffa3f6a95a8f351e04"188480STANDARDv0.3.4/nw.lib2012-11-20T06:03:23.000Z"9fdc4496453a6e927ed76fa33e2c1c86"305506STANDARDv0.3.4/nw.pdb2012-11-20T06:03:24.000Z"87566c3f2fb7938ded466c643539f951"929792STANDARDv0.3.5/node-webkit-v0.3.5-linux-ia32.tar.gz2012-12-13T02:20:40.000Z"c10fcd1f2500a6ddfeb7e417df117835"27204011STANDARDv0.3.5/node-webkit-v0.3.5-linux-x64.tar.gz2012-12-13T02:21:45.000Z"a1b40dd7d3f489f06fa7c4f0c19a79d7"29817866STANDARDv0.3.5/node-webkit-v0.3.5-osx-ia32.zip2012-12-13T02:22:06.000Z"280cd8c4ff1de3b9992a49396565f945"24788847STANDARDv0.3.5/node-webkit-v0.3.5-win-ia32.zip2012-12-13T02:23:55.000Z"b19f683d1a2d1223496321889e65470d"21536015STANDARDv0.3.5/nw-headers-v0.3.5.tar.gz2012-12-03T08:32:29.000Z"d0eb5af623ea43f0bfa9f1c5c890e789"2332327STANDARDv0.3.5/nw.exp2012-12-13T02:24:47.000Z"214f32f24db8f51a8d5ebd82021075f7"188764STANDARDv0.3.5/nw.lib2012-12-13T02:24:49.000Z"57f56ef863f30133947da90f1dc29e78"305862STANDARDv0.3.5/nw.pdb2012-12-13T02:24:51.000Z"15a97d8cac2091d735a72fdd81ccce8c"929792STANDARDv0.3.6-pre/node-webkit-v0.3.6-pre-linux-ia32.tar.gz2012-12-04T06:04:31.000Z"349c7615701d9a1200583407882657b2"27204384STANDARDv0.3.6-pre/node-webkit-v0.3.6-pre-linux-x64.tar.gz2012-12-04T06:06:12.000Z"42e3679a25889906fc2a2f124da47064"29818500STANDARDv0.3.6-pre/node-webkit-v0.3.6-pre-osx-ia32.zip2012-12-04T06:08:08.000Z"813a7b8c7442ff134359f0e064431f4d"24789320STANDARDv0.3.6-pre/node-webkit-v0.3.6-pre-win-ia32.zip2012-12-04T06:08:58.000Z"fbdf2d42b3ba52cbe90ae11f1109f9a7"21537443STANDARDv0.3.6-pre/nw-headers-v0.3.6-pre.tar.gz2012-12-04T08:27:35.000Z"d0eb5af623ea43f0bfa9f1c5c890e789"2332327STANDARDv0.3.6-pre/nw.exp2012-12-04T06:09:46.000Z"168cf9be47b8e040e389dc8f36d21b99"188764STANDARDv0.3.6-pre/nw.lib2012-12-04T06:09:47.000Z"6dfde9bc92b957f9a3713c2aa07ed114"305862STANDARDv0.3.6-pre/nw.pdb2012-12-04T06:11:43.000Z"9335c1f4914a1747f84c5bf9803a8355"929792STANDARDv0.3.6/node-webkit-v0.3.6-linux-ia32.tar.gz2012-12-14T06:00:29.000Z"971f12bb8fafb24c4c16d8341cd2ddfa"27233868STANDARDv0.3.6/node-webkit-v0.3.6-linux-x64.tar.gz2012-12-14T06:01:00.000Z"fcb2bafe66c042c93bb335c9aa6c7269"29835063STANDARDv0.3.6/node-webkit-v0.3.6-osx-ia32.zip2012-12-14T04:44:50.000Z"3fd51be1e27da3f6d972b5cb3e70dd7d"24470776STANDARDv0.3.6/node-webkit-v0.3.6-win-ia32.zip2012-12-14T13:53:18.000Z"5eab8c695b61be78782c3fb10de24095-2"21550966STANDARDv0.3.6/nw-headers-v0.3.6.tar.gz2012-12-14T13:58:04.000Z"315b3f0d6843b8480e395e3cf911dc05"2332254STANDARDv0.3.6/nw.exp2012-12-14T04:50:34.000Z"c917efe9a1119a0c89bf252bd208d31d"188764STANDARDv0.3.6/nw.lib2012-12-14T04:50:36.000Z"ebcc86e12dda3011acfc64faffe59b5a"305862STANDARDv0.3.6/nw.pdb2012-12-14T04:50:38.000Z"2e60eb1475c47b414951e9bde1858c55"929792STANDARDv0.3.7/2013-01-05T06:07:54.000Z"d41d8cd98f00b204e9800998ecf8427e"0STANDARDv0.3.7/node-webkit-v0.3.7-linux-ia32.tar.gz2013-01-06T04:39:52.000Z"9dcc570602e04f51582141583410291f-2"27263064STANDARDv0.3.7/node-webkit-v0.3.7-linux-x64.tar.gz2013-01-06T04:34:56.000Z"de9b7deebbff6e4acdc7a06d938a3a0c-2"29864029STANDARDv0.3.7/node-webkit-v0.3.7-osx-ia32.zip2013-01-06T03:08:32.000Z"8996ed99d984012731b85bef7d2e54bb-2"24472805STANDARDv0.3.7/node-webkit-v0.3.7-win-ia32.zip2013-01-06T05:41:32.000Z"0fdce49375da1005d7c0a4d481192b6d-2"21543541STANDARDv0.3.7/nw-headers-v0.3.7.tar.gz2013-01-06T02:53:26.000Z"c66a40ade91ffd7a3d043b18495c849f"2332306STANDARDv0.3.7/nw.exp2013-01-06T05:42:22.000Z"a5f0efb180992b591285542c488e66bd"188781STANDARDv0.3.7/nw.lib2013-01-06T05:42:24.000Z"bc94b36d393e61adf382bcb77cc88b33"305862STANDARDv0.3.7/nw.pdb2013-01-06T05:42:26.000Z"543158dc552a5dd17473273c4cecff53"929792STANDARDv0.3.8-pre/node-webkit-v0.3.8-pre-osx-ia32.zip2013-01-09T06:15:05.000Z"2d10a91d3d870fdcc6a0fadb90e6b974"24476537STANDARDv0.4.0-pre/node-webkit-v0.3.8-pre-linux-ia32.tar.gz2013-01-13T01:24:06.000Z"89768c3fb34977c2daba0965e5ede65b"31906625STANDARDv0.4.0-pre/node-webkit-v0.4.0-pre-win-ia32.zip2013-01-15T07:22:26.000Z"ea9292633c70d2daa42b49dc70ba95dd-2"22035957STANDARDv0.4.0/node-webkit-v0.4.0-linux-ia32.tar.gz2013-01-17T06:07:49.000Z"f8a721d050c877ee9a3c66b8c7daed28"27903470STANDARDv0.4.0/node-webkit-v0.4.0-linux-x64.tar.gz2013-01-17T13:37:03.000Z"6b846b1240fe9b16ecb5df7e1c7a7f87"30545314STANDARDv0.4.0/node-webkit-v0.4.0-osx-ia32.zip2013-01-18T03:18:55.000Z"dd513b5db4947d28532075d4809f8730"25106138STANDARDv0.4.0/node-webkit-v0.4.0-win-ia32.zip2013-01-18T01:49:46.000Z"2837f1bd174b99d3bb7ec1f69851cfdc-2"22037168STANDARDv0.4.0/nw-headers-v0.4.0.tar.gz2013-01-17T03:06:12.000Z"d01bb25c0453f868bfdc8599da2d8d46"2595077STANDARDv0.4.0/nw.exp2013-01-18T01:50:56.000Z"308a0f0f82165eeda5a1ff66f57f554e"195177STANDARDv0.4.0/nw.lib2013-01-18T01:50:57.000Z"a1beef5b602ed2a02f439a3ddf53a70a"316354STANDARDv0.4.0/nw.pdb2013-01-18T01:50:59.000Z"19b60971fecddf9e404121e051855d44"937984STANDARDv0.4.1/node-webkit-v0.4.1-linux-ia32.tar.gz2013-01-31T04:58:55.000Z"8de3d355fd517b28bd49695cfbdb262f"27904750STANDARDv0.4.1/node-webkit-v0.4.1-linux-x64.tar.gz2013-01-31T04:29:02.000Z"18ef0a7ef5719e8e24611462ec7fc9a2"30546497STANDARDv0.4.1/node-webkit-v0.4.1-osx-ia32.zip2013-01-31T06:38:06.000Z"2e1938ee5621a997d7c428f2e5083374"25111685STANDARDv0.4.1/node-webkit-v0.4.1-win-ia32.zip2013-01-31T06:39:20.000Z"fb6ae77c539a9f6842591d9ebed1c2ac-2"21775290STANDARDv0.4.1/nw-headers-v0.4.1.tar.gz2013-01-31T03:21:59.000Z"551befd9a57b92488292f818cbaa9ec7"2595126STANDARDv0.4.1/nw.exp2013-01-31T06:39:45.000Z"d2cdab4c50d48a31d8f07e77912e1559"195177STANDARDv0.4.1/nw.lib2013-01-31T06:39:47.000Z"627dc8144306380d09192ec89bb3a136"316354STANDARDv0.4.1/nw.pdb2013-01-31T06:39:49.000Z"c38c9e22adda866a1822af3c7911fdf2"937984STANDARDv0.4.2/node-webkit-v0.4.2-linux-ia32.tar.gz2013-02-21T01:51:18.000Z"267dcb18df7052c2a97a065c9f182b1a-2"29941792STANDARDv0.4.2/node-webkit-v0.4.2-linux-x64.tar.gz2013-02-21T01:52:54.000Z"4333cb9e12e680d2b96931756bdecfbb-3"32751776STANDARDv0.4.2/node-webkit-v0.4.2-osx-ia32.zip2013-02-21T02:30:30.000Z"946199334b04f6cad56e35d558c46546"26276696STANDARDv0.4.2/node-webkit-v0.4.2-win-ia32.zip2013-02-21T01:54:10.000Z"86553c8256fe22c93eb49a793c03d19d-2"22943198STANDARDv0.4.2/nw-headers-v0.4.2.tar.gz2013-02-20T14:40:27.000Z"476595c3660c6a427d2bd74bf796ef82"2594914STANDARDv0.4.2/nw.exp2013-02-21T01:34:04.000Z"4e503091e88bd9dd4050e4ea41109835"195197STANDARDv0.4.2/nw.lib2013-02-21T01:35:20.000Z"cc5434ffc8cbff761aab464a387a6976"316388STANDARDv0.4.2/nw.pdb2013-02-20T09:15:35.000Z"c38c9e22adda866a1822af3c7911fdf2"937984STANDARDv0.4.3-pre/node-webkit-v0.4.3-pre-win-ia32.zip2013-04-10T02:41:41.000Z"ad0525c59342b43bd22cf2fca3bedaa9-2"23888968STANDARDv0.4.3-pre/nw.exp2013-04-10T02:46:01.000Z"1bb341ce87b3e14e66cca1f277e2c004"206545STANDARDv0.4.3-pre/nw.lib2013-04-10T02:46:06.000Z"61e611ceb1dbee4ff1add763ebf81079"334572STANDARDv0.4.3-pre/nw.pdb2013-04-10T02:46:12.000Z"c2151793c0d13a24bb404cd55bb1b2e7"937984STANDARDv0.5.0/node-webkit-v0.5.0-ia32.msi2013-04-19T06:12:22.000Z"9957dc72688cbd3a18cf8898529bbd51-2"22720512STANDARDv0.5.0/node-webkit-v0.5.0-linux-ia32.tar.gz2013-04-19T06:35:23.000Z"eb66171c71703b2eba25f466ee6c24e4"31715671STANDARDv0.5.0/node-webkit-v0.5.0-linux-x64.tar.gz2013-04-19T07:04:50.000Z"2c25bc0a382f9d636467486c368e1516"34174507STANDARDv0.5.0/node-webkit-v0.5.0-osx-ia32.zip2013-04-19T08:40:57.000Z"bf4b69657004b97f404383d38deed8f4"27427546STANDARDv0.5.0/node-webkit-v0.5.0-win-ia32.zip2013-04-19T06:16:04.000Z"4289d3eedf8870c38c315d8aa1222301-2"23892782STANDARDv0.5.0/node-webkit-v0.5.0rc-linux-ia32.tar.gz2013-04-10T05:43:40.000Z"7f0054fbafbf473ed918f4587f5bbb0f"37863768STANDARDv0.5.0/node-webkit-v0.5.0rc-linux-x64.tar.gz2013-04-10T07:44:35.000Z"8ccf0c9aa68b5ce1abeb6cf75c656947"38309777STANDARDv0.5.0/node-webkit-v0.5.0rc-osx-ia32.zip2013-04-10T05:48:42.000Z"c6c492f94b766a0474425029517ac9ef-2"27427456STANDARDv0.5.0/node-webkit-v0.5.0rc-win-ia32.zip2013-04-10T06:24:12.000Z"a94db2aa0d3db68361b8ca0243241840"23888706STANDARDv0.5.0/node-webkit-v0.5.0rc2-linux-ia32.tar.gz2013-04-16T02:45:07.000Z"43b75fc7a5bfd227677ab35de4eb3415-3"31717936STANDARDv0.5.0/node-webkit-v0.5.0rc2-linux-x64.tar.gz2013-04-16T02:46:28.000Z"84c45a8ec57d9367aacf181954376cbf-3"34398584STANDARDv0.5.0/node-webkit-v0.5.0rc2-osx-ia32.zip2013-04-15T04:25:30.000Z"69776b098fd36d1d12cb5143b5433905"27425904STANDARDv0.5.0/node-webkit-v0.5.0rc2-win-ia32.zip2013-04-16T03:19:00.000Z"4a6ae00d834ff15b858f934f8be6e5ed-2"23892773STANDARDv0.5.0/nw-headers-v0.5.0.tar.gz2013-04-09T11:51:54.000Z"953bd49311340afc18de274f404ed25f"2615168STANDARDv0.5.0/nw.exp2013-04-19T06:19:34.000Z"37acd1d1b6c68c4a03a66f281e7a62bd"206545STANDARDv0.5.0/nw.lib2013-04-19T06:19:38.000Z"86d111891bcfccf1b591914266241dd2"334572STANDARDv0.5.0rc/nw.exp2013-04-16T03:16:30.000Z"c1b25f72749c48f398bfd5946756cc2f"206545STANDARDv0.5.0rc/nw.lib2013-04-16T03:16:39.000Z"896ada75c151e1b9568e6882b6118652"334572STANDARDv0.5.0rc/nw.pdb2013-04-16T03:16:50.000Z"c2151793c0d13a24bb404cd55bb1b2e7"937984STANDARDv0.5.1/node-webkit-v0.5.1-linux-ia32.tar.gz2013-04-27T03:15:35.000Z"d228b891d6398fb42918df58865bf8e5"31636072STANDARDv0.5.1/node-webkit-v0.5.1-linux-x64.tar.gz2013-04-27T04:25:25.000Z"de7b8dfce7138abc8f646f4276873a9f"34286245STANDARDv0.5.1/node-webkit-v0.5.1-osx-ia32.zip2013-04-27T17:09:18.000Z"3d590a80aaf2a1f58ab55a0990442d55"27545314STANDARDv0.5.1/node-webkit-v0.5.1-win-ia32.zip2013-04-27T04:33:25.000Z"75458be41eacacd0c9bcd05d618881ce-2"23973968STANDARDv0.5.1/nw-headers-v0.5.1.tar.gz2013-04-25T06:58:33.000Z"574681921e665822071439848a5da191"2657926STANDARDv0.5.1/nw.exp2013-04-27T04:34:08.000Z"6202955a93c9552133dffa01882a58c4"207333STANDARDv0.5.1/nw.lib2013-04-27T04:34:14.000Z"8c6440dfbec4b7b5a2cf03afd55dc2ef"335976STANDARDv0.6.0/chromedriver2-nw-v0.6.0-linux-ia32.tar.gz2013-06-17T05:38:06.000Z"7d8ef9f6608c3186ac18e483f14caecc"10400314STANDARDv0.6.0/chromedriver2-nw-v0.6.0-linux-x64.tar.gz2013-06-17T04:23:20.000Z"2e61049b26d50338bee6fcb874d0c493"10676088STANDARDv0.6.0/chromedriver2-nw-v0.6.0-osx-ia32.zip2013-06-17T07:17:32.000Z"278875693153c10fd60d53c1337a61d1"8905425STANDARDv0.6.0/chromedriver2-nw-v0.6.0-win-ia32.zip2013-06-17T06:28:24.000Z"1676e252b5c38a46726dec8f0d71c746"4265123STANDARDv0.6.0/node-webkit-v0.6.0-linux-ia32.tar.gz2013-06-17T05:36:43.000Z"6b6599dc943693e4fa720e56b0046090"31640576STANDARDv0.6.0/node-webkit-v0.6.0-linux-x64.tar.gz2013-06-17T04:21:40.000Z"a89b47d74b1be6906648e907e75df35f"34605229STANDARDv0.6.0/node-webkit-v0.6.0-osx-ia32.zip2013-06-17T02:39:37.000Z"e9dd2be6ed9797fd47d21f2b2d4cf6fb"27343133STANDARDv0.6.0/node-webkit-v0.6.0-rc1-linux-ia32.tar.gz2013-06-10T12:37:50.000Z"b5ff453f34f1accbf52e6a8aab3c821e"31613845STANDARDv0.6.0/node-webkit-v0.6.0-rc1-linux-x64.tar.gz2013-06-10T10:20:18.000Z"4d70c4bd3f42aa88cfb88f425e30e2f7"34577384STANDARDv0.6.0/node-webkit-v0.6.0-rc1-osx-ia32.zip2013-06-11T09:15:37.000Z"c02a56bcd18f9a3ca434b65aa39791cb-2"27311153STANDARDv0.6.0/node-webkit-v0.6.0-rc1-win-ia32.zip2013-06-11T01:07:36.000Z"b8f233d939456e9e531dbca71cf30d6f-2"24451103STANDARDv0.6.0/node-webkit-v0.6.0-win-ia32.zip2013-06-17T06:25:09.000Z"8b347c91d271eb0440b1d0fad9f5c981-2"24447613STANDARDv0.6.0/nw-headers-v0.6.0.tar.gz2013-06-10T23:03:44.000Z"daaa475d3f3582e54170fd92f8fa6bab"2689500STANDARDv0.6.0/nw.exp2013-06-17T06:28:49.000Z"efb26d0c8ec6518bc2a09eb8cc152167"235141STANDARDv0.6.0/nw.lib2013-06-17T06:28:42.000Z"ff0143c7b93fbbff8ed3007eae636893"381488STANDARDv0.6.1/node-webkit-v0.6.1-linux-ia32.tar.gz2013-06-23T13:56:01.000Z"54fbb2b560d26a453609623c2fb1d446"31641478STANDARDv0.6.1/node-webkit-v0.6.1-linux-x64.tar.gz2013-06-23T14:37:47.000Z"752c5eda5a93c1fa66d0affb6a6f4c01"34605637STANDARDv0.6.1/node-webkit-v0.6.1-osx-ia32.zip2013-06-24T02:30:27.000Z"a61e72ea929e6b63da89af17758c6f29"27345815STANDARDv0.6.1/node-webkit-v0.6.1-win-ia32.zip2013-06-24T02:37:29.000Z"0b87545bfd25615ae50b4a3d348e7e2a-2"24448942STANDARDv0.6.1/nw-headers-v0.6.1.tar.gz2013-06-27T00:53:31.000Z"ce0742c686f1bd020337f70516fb48d4"2204120STANDARDv0.6.1/nw.exp2013-06-24T02:38:40.000Z"a80af85ddf1646683e6d9e917274957b"235141STANDARDv0.6.1/nw.lib2013-06-24T02:38:33.000Z"eb87076b73423600d55fb22e66d96e54"381488STANDARDv0.6.2/node-webkit-v0.6.2-linux-ia32.tar.gz2013-07-08T02:04:52.000Z"4fd9fb1a2f0b0589fe97c04fbd0012ce"31644911STANDARDv0.6.2/node-webkit-v0.6.2-linux-x64.tar.gz2013-07-08T02:25:22.000Z"0569181dd39d34b3368386815859d668"34610141STANDARDv0.6.2/node-webkit-v0.6.2-osx-ia32.zip2013-07-08T05:55:49.000Z"f1d00bdb494a4b025ba10d40ab195b80"27348757STANDARDv0.6.2/node-webkit-v0.6.2-pre-osx-ia32.zip2013-07-05T01:24:23.000Z"7b459c11933c58a1401399c97e94654d"26086916STANDARDv0.6.2/node-webkit-v0.6.2-win-ia32.zip2013-07-08T01:28:07.000Z"49e42f52b0a0befd3c89ddce35ee9438-2"24449788STANDARDv0.6.2/nw-headers-v0.6.2.tar.gz2013-07-08T01:27:40.000Z"b440af5b83be77158783e51162060ac8"2204123STANDARDv0.6.2/nw.exp2013-07-08T01:28:43.000Z"b163eebda4276cace5a853e38df1fb57"235141STANDARDv0.6.2/nw.lib2013-07-08T01:28:50.000Z"a7b99d6c6dc2def8ad33d3f68b42bc70"381488STANDARDv0.6.3/node-webkit-v0.6.3-linux-ia32.tar.gz2013-07-21T13:31:39.000Z"67428c6b53692c660011d95c8efc553b"31645409STANDARDv0.6.3/node-webkit-v0.6.3-linux-x64.tar.gz2013-07-21T16:02:20.000Z"a021c0dcc68070b91386a0b0812cf0d5"34611495STANDARDv0.6.3/node-webkit-v0.6.3-osx-ia32.zip2013-07-22T04:25:22.000Z"554342ddd9598b3c95b7e60c3710c078"27351588STANDARDv0.6.3/node-webkit-v0.6.3-pre-linux-ia32.tar.gz2013-07-10T02:47:12.000Z"0fc18bbbd97465fed52f01b96045a5ff"31644926STANDARDv0.6.3/node-webkit-v0.6.3-pre-linux-x64.tar.gz2013-07-10T02:32:47.000Z"23b86de25bc0fc4b1254b34315aa10fb"34609317STANDARDv0.6.3/node-webkit-v0.6.3-win-ia32.zip2013-07-23T00:56:02.000Z"49fb242bb793a70c9c8fa5450992e9f7-2"24456603STANDARDv0.6.3/nw-headers-v0.6.3.tar.gz2013-07-21T14:13:55.000Z"973bebb481ce27c8faca01cdaaee34b8"2205593STANDARDv0.6.3/nw.exp2013-07-23T00:55:49.000Z"a252282830cf9b74caa10b451e5614b8"235141STANDARDv0.6.3/nw.lib2013-07-23T00:55:55.000Z"6623e91ae3e4a3eeb667f3aacb85e10b"381488STANDARDv0.7.0/chromedriver2-nw-v0.7-linux-ia32.tar.gz2013-08-12T00:25:07.000Z"c76444c9b2b273d5244890ed71f78b2b"10632230STANDARDv0.7.0/chromedriver2-nw-v0.7-linux-x64.tar.gz2013-08-12T00:25:43.000Z"1d8f778aa0e53e02c10f4a7c8f0a6052"10900319STANDARDv0.7.0/chromedriver2-nw-v0.7-osx-ia32.zip2013-08-12T01:09:42.000Z"d3f6246d939e3f813f0a1ccba7c382a9"9084332STANDARDv0.7.0/chromedriver2-nw-v0.7-win-ia32.zip2013-08-12T00:50:48.000Z"f5e8b25ef5b8ee81f0d1ceb73b1efa06"4425010STANDARDv0.7.0/node-webkit-v0.7.0-linux-ia32.tar.gz2013-08-12T00:21:21.000Z"263e8edda8a342e77c0818baf4d24b87"32406561STANDARDv0.7.0/node-webkit-v0.7.0-linux-x64.tar.gz2013-08-11T22:40:20.000Z"07c02fd24c89a4e6d44142c19ec2879b"35449315STANDARDv0.7.0/node-webkit-v0.7.0-osx-ia32.zip2013-08-12T07:19:38.000Z"0dff5244b8176ec51fe1a74a64a4478e"28074525STANDARDv0.7.0/node-webkit-v0.7.0-win-ia32.zip2013-08-12T00:49:17.000Z"7f008576d85228fdf00b0845fff4c8e2-2"25036289STANDARDv0.7.0/nw-headers-v0.7.0.tar.gz2013-08-19T02:44:41.000Z"f89e294dfbac905191e38c18f9724dac"2225603STANDARDv0.7.0/nw.exp2013-08-12T00:50:33.000Z"53b856b586a6342eba789b65c9e46ab4"247037STANDARDv0.7.0/nw.lib2013-08-12T00:50:27.000Z"a20bc515929f469f305ad70ad25284a8"401116STANDARDv0.7.1/node-webkit-v0.7.1-linux-ia32.tar.gz2013-08-18T12:42:58.000Z"be5a77bbb8b5313f417dad699bb36271"32407366STANDARDv0.7.1/node-webkit-v0.7.1-linux-x64.tar.gz2013-08-18T12:17:44.000Z"1e818cc3603b2fdd82b09a2528c687e0"35449780STANDARDv0.7.1/node-webkit-v0.7.1-osx-ia32.zip2013-08-19T02:00:56.000Z"c9d30a3ab0c9aedc5c36a3463107a0f0"28013612STANDARDv0.7.1/node-webkit-v0.7.1-win-ia32.zip2013-08-19T02:20:12.000Z"b95d8e7a58f2142582fe92d7cf0a37ef"25037910STANDARDv0.7.1/nw-headers-v0.7.1.tar.gz2013-08-19T02:45:23.000Z"f89e294dfbac905191e38c18f9724dac"2225603STANDARDv0.7.1/nw.exp2013-08-19T02:20:30.000Z"4d7ee42570e71039455ae9adcbac1e69"247037STANDARDv0.7.1/nw.lib2013-08-19T02:20:28.000Z"126c8217bf5939ba8dc39681e9925520"401116STANDARDv0.7.2/node-webkit-v0.7.2-linux-ia32-xdk.tar.gz2013-08-29T10:36:06.000Z"956feac74914ebe32e97f8ecc3db3e07"32409515STANDARDv0.7.2/node-webkit-v0.7.2-linux-ia32.tar.gz2013-08-26T03:16:17.000Z"3d5dca3b038b3fa1b4ec6a78b0aa6801"32409933STANDARDv0.7.2/node-webkit-v0.7.2-linux-x64-xdk.tar.gz2013-08-29T10:48:44.000Z"384105b5b0f756f725205e0b12698121"35449995STANDARDv0.7.2/node-webkit-v0.7.2-linux-x64.tar.gz2013-08-26T02:51:33.000Z"64360aa40c42f917d30f50bfc0156e80"35450028STANDARDv0.7.2/node-webkit-v0.7.2-osx-ia32-xdk.zip2013-08-29T11:02:06.000Z"32771da5cc5462d18b8ea6c212047aad"28014962STANDARDv0.7.2/node-webkit-v0.7.2-osx-ia32.zip2013-08-26T02:54:06.000Z"98d41e949f33a3377d8b755e71fd8b3e"28014377STANDARDv0.7.2/node-webkit-v0.7.2-pre-linux-ia32.tar.gz2013-08-22T04:36:42.000Z"2334c214c2ae8685e1a0e6f1b6ab09e2"32410007STANDARDv0.7.2/node-webkit-v0.7.2-pre-linux-x64.tar.gz2013-08-22T02:26:07.000Z"bdaff82a8880facaf176c712e425a41e"35449279STANDARDv0.7.2/node-webkit-v0.7.2-pre-osx-ia32.zip2013-08-22T04:42:19.000Z"613902a7ffbbff3dcb5074860320fe9d"28021396STANDARDv0.7.2/node-webkit-v0.7.2-pre-win-ia32.zip2013-08-22T01:12:55.000Z"83dc86c926186da7070623badc99378e-2"25035605STANDARDv0.7.2/node-webkit-v0.7.2-win-ia32-xdk.zip2013-08-29T10:40:04.000Z"4da67939f699f60fdda180ee2d357f8f-2"25038596STANDARDv0.7.2/node-webkit-v0.7.2-win-ia32.zip2013-08-26T03:21:50.000Z"a7b2870f5cb9bf900d963a0cf9f03930-2"25038320STANDARDv0.7.2/nw-headers-v0.7.2.tar.gz2013-08-26T01:13:23.000Z"f89e294dfbac905191e38c18f9724dac"2225603STANDARDv0.7.2/nw.exp2013-08-26T03:21:39.000Z"382b8256ac734cd33892fe9c76cffa82"247037STANDARDv0.7.2/nw.lib2013-08-26T03:21:44.000Z"1abc32c5f4351ece616c8818f0585840"401116STANDARDv0.7.3/node-webkit-v0.7.3-linux-ia32.tar.gz2013-09-11T05:13:46.000Z"808f93d92f26e3822e269aac0623b73f"32608225STANDARDv0.7.3/node-webkit-v0.7.3-linux-x64.tar.gz2013-09-11T05:14:27.000Z"8a7ac824b2f5068324473e7afd736857"35646302STANDARDv0.7.3/node-webkit-v0.7.3-osx-ia32.zip2013-09-11T02:15:17.000Z"a1b11774b027aa0ad3462ee1b459daa0"28210230STANDARDv0.7.3/node-webkit-v0.7.3-win-ia32.zip2013-09-11T03:21:47.000Z"49c5a9284f37a9421a0f34fe0756876d-2"25243564STANDARDv0.7.3/nw-headers-v0.7.3.tar.gz2013-09-10T05:12:40.000Z"f89e294dfbac905191e38c18f9724dac"2225603STANDARDv0.7.3/nw.exp2013-09-11T03:21:31.000Z"d5a88d7a8a60c8fb590ccd84ae1c9ee9"247037STANDARDv0.7.3/nw.lib2013-09-11T03:21:37.000Z"5d66db50037f45b1cc061adbe997964d"401116STANDARDv0.7.4/node-webkit-v0.7.4-linux-ia32.tar.gz2013-09-18T01:33:00.000Z"ac85af244c1102f66d3379f96af7e210"32608168STANDARDv0.7.4/node-webkit-v0.7.4-linux-x64.tar.gz2013-09-18T01:34:23.000Z"050792b8e23b629905d0a0de5780ae07"35649840STANDARDv0.7.4/node-webkit-v0.7.4-osx-ia32.zip2013-09-17T07:45:20.000Z"458687522ca98a1b1f0123d94e5d34ec"28984391STANDARDv0.7.4/node-webkit-v0.7.4-win-ia32.zip2013-09-18T00:56:01.000Z"e300d5a748d808adfeaefeb299ca9693-2"25249396STANDARDv0.7.4/nw-headers-v0.7.4.tar.gz2013-09-17T07:48:32.000Z"f89e294dfbac905191e38c18f9724dac"2225603STANDARDv0.7.4/nw.exp2013-09-18T00:58:04.000Z"1f0e21a09c4fcf6680da912b6dbc215b"247037STANDARDv0.7.4/nw.lib2013-09-18T00:57:56.000Z"41d4fa73e0e50fc416ad167eb441cd6c"401116STANDARDv0.7.5/node-webkit-v0.7.5-linux-ia32.tar.gz2013-09-18T12:07:33.000Z"5af9c0783b4988a7a39db973c371bb3b"32608567STANDARDv0.7.5/node-webkit-v0.7.5-linux-x64.tar.gz2013-09-18T12:04:41.000Z"39a5a8ac8db0aa3aabea6d7722364b26"35650592STANDARDv0.7.5/node-webkit-v0.7.5-osx-ia32.zip2013-09-18T11:47:19.000Z"7feafeff113e90b2111d2e11409510c1"28984343STANDARDv0.7.5/node-webkit-v0.7.5-win-ia32.zip2013-09-18T11:31:48.000Z"4e0ebb449ba11e282a722737973eeaec-2"25249090STANDARDv0.7.5/nw-headers-v0.7.5.tar.gz2013-09-18T15:03:17.000Z"f89e294dfbac905191e38c18f9724dac"2225603STANDARDv0.7.5/nw.exp2013-09-18T11:37:37.000Z"6e370b7f47691a7000a01652f5c58ecf"247037STANDARDv0.7.5/nw.lib2013-09-18T11:37:52.000Z"3bdaa312249c16139b49e2c9370eda57"401116STANDARDv0.8.0-pre/node-webkit-v0.8.0-pre-osx-ia32.zip2013-10-10T07:43:43.000Z"276948553530469cd9bf02baab59e6ed"35704814STANDARDv0.8.0-pre/node-webkit-v0.8.0-pre-win-ia32.zip2013-10-11T15:34:39.000Z"9e89450e0ed7b955280e428a5c3037cf-2"25690851STANDARDv0.8.0-pre/nw-headers-v0.8.0-pre.tar.gz2013-10-10T08:00:43.000Z"7e17916d4aecf37485cb2a49abfba5a7"2244668STANDARDv0.8.0-pre/nw.exe.pdb2013-10-11T15:38:53.000Z"6e89d7c43f8c1c195c02946a147b78a4-31"480603136STANDARDv0.8.0-pre/nw.exp2013-10-11T15:38:30.000Z"2fed0c1e132160e21af0f8d17ccb57d9"248409STANDARDv0.8.0-pre/nw.lib2013-10-11T15:38:37.000Z"89704013918c998e3a8ff6cda88e95b0"403114STANDARDv0.8.0-rc1/chromedriver2-nw-v0.8.0-rc1-linux-ia32.tar.gz2013-10-21T04:47:16.000Z"beb00af254302cf472cb4eefcf71383e"9320445STANDARDv0.8.0-rc1/chromedriver2-nw-v0.8.0-rc1-linux-x64.tar.gz2013-10-21T02:40:53.000Z"797354b16323f9fb95a1ea49d6b77971"9913574STANDARDv0.8.0-rc1/chromedriver2-nw-v0.8.0-rc1-osx-ia32.zip2013-10-21T01:04:15.000Z"e5b004357ad68d6535a8493f9c078e3b"9176313STANDARDv0.8.0-rc1/node-webkit-osx-dsym-v0.8.0-rc1.tar.gz2013-10-21T05:18:46.000Z"40b237fabf681ecb0e6c9a4e1904ef20"32130653STANDARDv0.8.0-rc1/node-webkit-v0.8.0-rc1-linux-ia32.tar.gz2013-10-21T04:47:42.000Z"8afaec53db125e338e52e0c76a3b14c1"37556733STANDARDv0.8.0-rc1/node-webkit-v0.8.0-rc1-linux-x64.tar.gz2013-10-21T02:20:12.000Z"6457f2262c3a01d0832c16e034d1f5f9"41199178STANDARDv0.8.0-rc1/node-webkit-v0.8.0-rc1-osx-ia32.zip2013-10-21T01:03:03.000Z"c075fe1791ae16a9d1fa0fb8d3452ed5"35835927STANDARDv0.8.0-rc1/node-webkit-v0.8.0-rc1-win-ia32.zip2013-10-21T08:35:35.000Z"dfa0285ddfe7eeec5aa2618b15c3cbfe-2"25788884STANDARDv0.8.0-rc1/nw-headers-v0.8.0-rc1.tar.gz2013-10-21T01:07:58.000Z"7e17916d4aecf37485cb2a49abfba5a7"2244668STANDARDv0.8.0-rc1/nw.breakpad.ia32.gz2013-10-21T04:48:51.000Z"51d1938c5c57909e26604afbbd46142b"33283368STANDARDv0.8.0-rc1/nw.breakpad.x64.gz2013-10-21T04:49:10.000Z"14e73c88db5c16ba804371398f35537f"32033117STANDARDv0.8.0-rc1/nw.exe.pdb.zip2013-10-21T04:12:02.000Z"cf38f0e69b3c34b1034d7550e2a8ac99-8"112568719STANDARDv0.8.0-rc1/nw.exp2013-10-21T04:16:24.000Z"b5ac01a215b18d0ca530e7ba445d2af6"248409STANDARDv0.8.0-rc1/nw.lib2013-10-21T04:15:48.000Z"7c53f1f6551883c2010e55a89a5bab73"403114STANDARDv0.8.0/chromedriver2-nw-v0.8.0-linux-ia32.tar.gz2013-10-29T06:02:55.000Z"a3fec138dc776b25ff2681bf562e9080"9261326STANDARDv0.8.0/chromedriver2-nw-v0.8.0-linux-x64.tar.gz2013-10-29T05:42:24.000Z"e4039d898ac4534af13fdfc5500a3e77"9913284STANDARDv0.8.0/chromedriver2-nw-v0.8.0-osx-ia32.zip2013-10-30T05:23:32.000Z"b229eaf8a1eb7afe769b6bbd58329970"9176313STANDARDv0.8.0/chromedriver2-nw-v0.8.0-win-ia32.zip2013-10-30T00:43:18.000Z"d677ac401a9dd746e2b5811a4de99638"4405133STANDARDv0.8.0/node-webkit-osx-dsym-v0.8.0.tar.gz2013-10-30T05:26:02.000Z"4f3a0052be63cd800753186dbef013e0"32133714STANDARDv0.8.0/node-webkit-v0.8.0-linux-ia32.tar.gz2013-10-29T06:02:24.000Z"52e3721291923f8726faebebf0e51fd9"36489850STANDARDv0.8.0/node-webkit-v0.8.0-linux-x64.tar.gz2013-10-29T05:40:47.000Z"4b2c471e666e68e975b45baea90ed99e"40326142STANDARDv0.8.0/node-webkit-v0.8.0-osx-ia32.zip2013-10-30T05:21:10.000Z"2b90b8ebd50de228ea1b9207de191fbf"35837580STANDARDv0.8.0/node-webkit-v0.8.0-win-ia32.zip2013-10-30T00:38:52.000Z"81c08477f32772db3c4ebf71fb7ddb6d-2"25789557STANDARDv0.8.0/nw-headers-v0.8.0.tar.gz2013-10-29T08:40:48.000Z"54cece266e0ebed2a9d24e14c7a80b44"2244679STANDARDv0.8.0/nw.breakpad.ia32.gz2013-10-29T06:01:47.000Z"cb0e56c12480adb0d5a047cfef348abd"34133106STANDARDv0.8.0/nw.breakpad.x64.gz2013-10-29T05:38:11.000Z"06341be5e3f2d1e2b8b3fe092aa2a064"32481093STANDARDv0.8.0/nw.exe.pdb.zip2013-10-30T00:39:24.000Z"5bc1553afb78236d7b09cf2160ebe616-8"111663686STANDARDv0.8.0/nw.exp2013-10-30T00:41:51.000Z"a4190b0a98e040396ebefd7e475f7f22"248409STANDARDv0.8.0/nw.lib2013-10-30T00:42:01.000Z"68e7d7217b1d907cf3392f2bf881c5df"403114STANDARDv0.8.1/node-webkit-osx-dsym-v0.8.1.tar.gz2013-11-22T07:51:57.000Z"b383e971fca33a593e8416c8f019354d"32150467STANDARDv0.8.1/node-webkit-v0.8.1-linux-ia32.tar.gz2013-11-22T07:41:43.000Z"a136c1e375f4127674be9314769182de"36500143STANDARDv0.8.1/node-webkit-v0.8.1-linux-x64.tar.gz2013-11-22T05:04:50.000Z"acb70c9417a2584bda5e6a0e31d7f456-3"40098863STANDARDv0.8.1/node-webkit-v0.8.1-osx-ia32.zip2013-11-22T05:42:24.000Z"bd0d51ca0169e70af6a60dc1f7e8fabf"35818767STANDARDv0.8.1/node-webkit-v0.8.1-rc1-linux-ia32.tar.gz2013-11-06T05:13:30.000Z"8231308b2cc5fda4a747efd7152d0a25"36489639STANDARDv0.8.1/node-webkit-v0.8.1-rc1-linux-x64.tar.gz2013-11-06T05:50:50.000Z"9b12fbee3d6791b3eed09b310ec5465d"41197729STANDARDv0.8.1/node-webkit-v0.8.1-rc1-osx-ia32.zip2013-11-06T03:02:57.000Z"86a38538e3a49a81cd89b54b9e909a62-3"35837061STANDARDv0.8.1/node-webkit-v0.8.1-rc1-win-ia32.zip2013-11-06T05:36:02.000Z"5e6f9bcbb37ed628a57e23f2b5647adc-2"25790337STANDARDv0.8.1/node-webkit-v0.8.1-win-ia32.zip2013-11-22T04:50:01.000Z"5a877975e1b947a2d37980740270591d-2"25795282STANDARDv0.8.1/nw-headers-v0.8.1.tar.gz2013-11-06T05:17:27.000Z"54cece266e0ebed2a9d24e14c7a80b44"2244679STANDARDv0.8.1/nw.breakpad.ia32.gz2013-11-22T07:43:57.000Z"a3cae99804ba7f30cf22db36aaca7f8f"33302332STANDARDv0.8.1/nw.breakpad.x64.gz2013-11-22T07:46:34.000Z"e0804023e7b8e728c11c9560246c9ccf"32048714STANDARDv0.8.1/nw.exe.pdb.zip2013-11-22T07:45:59.000Z"e348afd84ac5cad556b52a2ed6ab97e2-8"111680927STANDARDv0.8.1/nw.exp2013-11-22T05:00:53.000Z"872cd1eb5b3df7d9c4a3c0a447c73b6e"248409STANDARDv0.8.1/nw.lib2013-11-22T05:00:32.000Z"c53e0ae5720e39374be1a6721347d5a6"403114STANDARDv0.8.2/node-webkit-osx-dsym-v0.8.2.tar.gz2013-12-06T06:24:57.000Z"2365e2517b3d8d2876a8710f50de4a41"32155831STANDARDv0.8.2/node-webkit-v0.8.2-linux-ia32.tar.gz2013-12-06T03:16:37.000Z"a9a039d1e0c6fe6feff55a09baeb6b09"37576170STANDARDv0.8.2/node-webkit-v0.8.2-linux-x64.tar.gz2013-12-06T01:28:03.000Z"09832b0b0801acb74de38b7769fdc006"40103569STANDARDv0.8.2/node-webkit-v0.8.2-osx-ia32.zip2013-12-06T01:12:41.000Z"aaa9fab8d90d54bea33c3c5b393c3d8e"35854837STANDARDv0.8.2/node-webkit-v0.8.2-win-ia32.zip2013-12-06T01:45:47.000Z"ab386bd7c969d318e44316e0b80696f7-2"25799737STANDARDv0.8.2/nw-headers-v0.8.2.tar.gz2013-12-05T08:11:58.000Z"57d3b539063dba021757a55e5f9a8da3"2288783STANDARDv0.8.2/nw.breakpad.ia32.gz2013-12-06T03:17:59.000Z"6c1fbf9a4ad5c67a403407b1b065b7da"33302066STANDARDv0.8.2/nw.breakpad.x64.gz2013-12-06T03:19:43.000Z"197971a3ee448638aa13a56b4be516f3"32054923STANDARDv0.8.2/nw.exe.pdb.zip2013-12-06T06:17:13.000Z"09ae1cb5bf0e2ec93df2fd41c7ac2045-8"113849660STANDARDv0.8.2/nw.exp2013-12-06T01:51:26.000Z"226cf776bd85990283e0fbcafb4f487e"249097STANDARDv0.8.2/nw.lib2013-12-06T01:51:17.000Z"753d59b603534f769b75acac75adb88c"404244STANDARDv0.8.3-rc1/node-webkit-v0.8.3-rc1-win-ia32.zip2013-12-11T00:34:31.000Z"ba96fd22dedb3314c98a211c4ac8849e-2"25800473STANDARDv0.8.3/node-webkit-osx-dsym-v0.8.3.tar.gz2013-12-20T01:29:46.000Z"40a5675d7ce45d8c9e9e19ee79635f8f"32156697STANDARDv0.8.3/node-webkit-v0.8.3-linux-ia32.tar.gz2013-12-20T02:25:23.000Z"b76890570306aec25697f445d594eb18"37568119STANDARDv0.8.3/node-webkit-v0.8.3-linux-x64.tar.gz2013-12-20T02:47:42.000Z"ba4f8cd9caa05a3e1c36e677fd103abe"40099758STANDARDv0.8.3/node-webkit-v0.8.3-osx-ia32.zip2013-12-20T01:24:13.000Z"a931ef1d4ddef98e37db4474bddf991e"35845948STANDARDv0.8.3/node-webkit-v0.8.3-win-ia32.zip2013-12-20T01:02:26.000Z"dfd9b0c45356f8e10a50c1d92fd16fed"25793645STANDARDv0.8.3/nw-headers-v0.8.3.tar.gz2013-12-20T01:28:45.000Z"57d3b539063dba021757a55e5f9a8da3"2288783STANDARDv0.8.3/nw.breakpad.ia32.gz2013-12-20T02:27:08.000Z"a61456efac25adaba2ca9433a4299b34"33307446STANDARDv0.8.3/nw.breakpad.x64.gz2013-12-20T02:50:27.000Z"c47c2b029c3caaee1879786b86ea9b7b"32054532STANDARDv0.8.3/nw.exe.pdb.zip2013-12-20T01:05:41.000Z"b642e793185b14ba15b64fa9a97f5375"113145100STANDARDv0.8.3/nw.exp2013-12-20T01:04:40.000Z"c7de31af3d9d830a11e3dce5a193e78d"249097STANDARDv0.8.3/nw.lib2013-12-20T01:04:32.000Z"3c2977c9b3b603a7fd115578024a89fa"404244STANDARDv0.8.4/node-webkit-osx-dsym-v0.8.4.tar.gz2013-12-30T10:54:16.000Z"3c7c1148b83117194dc1b60a535f3998"32156633STANDARDv0.8.4/node-webkit-src-v0.8.4.tar.gz2014-01-13T05:52:49.000Z"07574ce9f8981f55f663ce14a6ddcf33"1352888846STANDARDv0.8.4/node-webkit-v0.8.4-linux-ia32.tar.gz2013-12-30T05:37:29.000Z"f92fa04ffab48b8542a5e4ddc2dbbe5b"37568145STANDARDv0.8.4/node-webkit-v0.8.4-linux-x64.tar.gz2013-12-30T05:25:04.000Z"41bb09965cf724c0d972436f64f0de88"40098594STANDARDv0.8.4/node-webkit-v0.8.4-osx-ia32.zip2013-12-30T01:33:14.000Z"70c7e89ceeef11b5d6090a14b72ecd02"35846286STANDARDv0.8.4/node-webkit-v0.8.4-win-ia32.zip2013-12-30T02:50:03.000Z"886062473950c0e45a6988043e5e6df1-2"25794523STANDARDv0.8.4/nw-headers-v0.8.4.tar.gz2013-12-30T01:36:52.000Z"57d3b539063dba021757a55e5f9a8da3"2288783STANDARDv0.8.4/nw.breakpad.ia32.gz2013-12-30T05:36:30.000Z"7794a50e10b5037607b5da9463a37dfd"34155011STANDARDv0.8.4/nw.breakpad.x64.gz2013-12-30T05:24:31.000Z"7f7d85187f26461755e5c21d10a5d9f2"32499820STANDARDv0.8.4/nw.exe.pdb.zip2013-12-30T02:52:00.000Z"6b3e7336964d5c6ff60bb2959984f2c5"113144382STANDARDv0.8.4/nw.exp2013-12-30T02:54:01.000Z"a34ab8cc6cad57066e1c1269725cca64"249097STANDARDv0.8.4/nw.lib2013-12-30T02:54:08.000Z"e8910b9d931f12fe3453060b6a6726b5"404244STANDARDv0.9.0-rc1/node-webkit-v0.9.0-rc1-osx-ia32.zip2014-01-22T02:43:38.000Z"f4c4c5f72d2c6ca6d874ecc2c4cd1e0e"36213086STANDARDv0.9.0-rc1/nw-headers-v0.9.0-rc1.tar.gz2014-01-22T08:30:56.000Z"2eaada3c34683255204a213c10ac1bed"2314268STANDARD'; var baseUrl = 'https://amazon.s3.nw.com'; @@ -26,7 +31,7 @@ test('Should check if we have some files', function (t) { t.plan(2); var x = new NwBuilder({ - files: './test/fixtures/nwapp/**/*', + files: './test/fixtures/nwapp/**/*' }); x.checkFiles().then(function (data) { @@ -53,7 +58,7 @@ test('Should check if we have some files: rejection', function (t) { t.plan(1); var x = new NwBuilder({ - files: './test/fixtures/nwapp/images/**', + files: './test/fixtures/nwapp/images/**' }); x.checkFiles().catch(function (error) { @@ -62,6 +67,96 @@ test('Should check if we have some files: rejection', function (t) { }); +test('Should apply platform-specific overrides correctly', function (t) { + t.plan(4); + + var x = new NwBuilder({ + files: './test/fixtures/platformOverrides/**/*', + platforms: ['osx', 'win', 'linux32', 'linux64'] + }); + + x.checkFiles().bind(x) + .then(x.preparePlatformSpecificManifests) + .then(function () { + _.forEach(x._platforms, function(platform, platformName){ + var file = fs.readFileSync(path.join('./test/expected/platformOverrides', platformName + '.json')); + t.deepEqual(platform.platformSpecificManifest, JSON.parse(file.toString()), platformName + '.json'); + }); + }); +}); + +test('Should only create one ZIP if there are no platform-specific overrides', function (t) { + t.plan(11); + + var x = new NwBuilder({ + files: './test/fixtures/nwapp/**/*', + platforms: ['osx', 'win', 'linux32', 'linux64'], + macZip: true + }); + + x.checkFiles().bind(x) + .then(x.preparePlatformSpecificManifests) + .then(x.zipAppFiles) + .then(function () { + _.forEach(x._zips, function(zip, platformName){ + t.equal(zip.platformSpecific, false, platformName + ' should be marked as platform specific'); + t.equal(!!zip.file, true, platformName + " ZIP file property should exist"); + }); + + t.deepEqual(x._zips.osx, x._zips.win, 'OSX ZIP should be equal to the Windows one'); + t.deepEqual(x._zips.win, x._zips.linux32, 'Windows ZIP should be equal to the Linux 32 one'); + t.deepEqual(x._zips.linux32, x._zips.linux64, 'Linux 32 ZIP should be equal to the Linux 64 one'); + }); +}); + +test('Should create a ZIP per platform if every platform has overrides', function (t) { + t.plan(11); + + var x = new NwBuilder({ + files: './test/fixtures/platformOverrides/**/*', + platforms: ['osx', 'win', 'linux32', 'linux64'], + macZip: true + }); + + x.checkFiles().bind(x) + .then(x.preparePlatformSpecificManifests) + .then(x.zipAppFiles) + .then(function () { + _.forEach(x._zips, function(zip, platformName){ + t.equal(zip.platformSpecific, true, platformName + ' should be marked as platform specific'); + t.equal(!!zip.file, true, platformName + " ZIP file property should exist"); + }); + + t.notDeepEqual(x._zips.osx, x._zips.win, "OSX ZIP should be different to the Windows one"); + t.notDeepEqual(x._zips.win, x._zips.linux32, "Windows ZIP should be different to the Linux 32 one"); + t.notDeepEqual(x._zips.linux32, x._zips.linux64, "Linux 32 ZIP should be different to the Linux 64 one"); + }); +}); + +test('Should create a ZIP per platform which has overrides and one between the rest', function (t) { + t.plan(11); + + var x = new NwBuilder({ + files: './test/fixtures/oneOveriddenRestNot/**/*', + platforms: ['osx', 'win', 'linux32', 'linux64'], + macZip: true + }); + + x.checkFiles().bind(x) + .then(x.preparePlatformSpecificManifests) + .then(x.zipAppFiles) + .then(function () { + _.forEach(x._zips, function(zip, platformName){ + t.equal(zip.platformSpecific, platformName === 'osx', platformName + ' should be marked as platform specific'); + t.equal(!!zip.file, true, platformName + " ZIP file property should exist"); + }); + + t.notDeepEqual(x._zips.osx, x._zips.win, "OSX ZIP should be different to the Windows one"); + t.deepEqual(x._zips.win, x._zips.linux32, "Windows ZIP should be equal to the Linux 32 one"); + t.deepEqual(x._zips.linux32, x._zips.linux64, "Linux 32 ZIP should be equal to the Linux 64 one"); + }); +}); + test('Should find latest version', function (t) { t.plan(2); @@ -103,3 +198,35 @@ test('Should not zip mac apps by default', function (t) { }); }); + + +testSetup({ + afterEach: function(done){ + del('./test/temp/oneOverridenRestNot', done); + } +})('Should write package.json with platform overrides for (unzipped) Mac build', function (t) { + t.plan(1); + + var appName = 'theapp', + buildDir = './test/temp/oneOverridenRestNot', + x = new NwBuilder({ + files: './test/fixtures/oneOveriddenRestNot/**/*', + platforms: ['osx'], + appName: appName, + buildDir: buildDir + }); + + x.checkFiles().bind(x) + .then(x.preparePlatformSpecificManifests) + .then(x.createReleaseFolder) + .then(x.mergeAppFiles) + .then(function () { + t.deepEqual( + JSON.parse(fs.readFileSync(path.join( + buildDir, appName, 'osx', appName + '.app', 'Contents', 'Resources', 'app.nw', 'package.json' + )).toString()), + JSON.parse(fs.readFileSync('./test/expected/oneOveriddenRestNot/osx.json').toString()) + ); + t.end(); + }); +}); \ No newline at end of file diff --git a/test/utils.js b/test/utils.js index b17e93769..2b1910f9c 100644 --- a/test/utils.js +++ b/test/utils.js @@ -1,4 +1,5 @@ var test = require('tape'); +var testSetup = require('redtape'); var temp = require('temp'); var fs = require('fs'); var path = require('path'); @@ -6,6 +7,7 @@ var utils = require('./../lib/utils'); var DecompressZip = require('decompress-zip'); var _ = require('lodash'); var EventEmitter = require('events').EventEmitter; +var del = require('rimraf'); test('getPackageInfo invalid', function (t) { t.plan(1); @@ -129,6 +131,42 @@ test('should zip the app and create the app.nw file + log it', function (t) { }); +testSetup({ + afterEach: function(done){ + del('./test/temp/platform-specific-unzipped', done); + } +})('should zip but use platform-specific manifest with overrides in package.json', function (t) { + t.plan(3); + + var files = [{ + "src" : path.normalize("test/fixtures/nwapp/images/imagefile.img"), + "dest": path.normalize("images/imagefile.img") + }, { + "src" : path.normalize("test/fixtures/nwapp/package.json"), + "dest": path.normalize("package.json") + }], expectedPackage = "{hello: 'world'}"; + + var _evt = new EventEmitter(); + _evt.on('log', function (logging) { + t.ok(logging, 'LOG: ' + logging); + }); + + utils.generateZipFile(files, _evt, expectedPackage).then(function(nwfile) { + var unzipper = new DecompressZip(nwfile), + unzipDestination = 'test/temp/platform-specific-unzipped'; + + unzipper.on('extract', function (log) { + t.equal(fs.readFileSync(path.join(unzipDestination, 'package.json')).toString(), expectedPackage); + t.end(); + }); + + unzipper.extract({ + path: unzipDestination + }); + }); + +}); + test('mergeFiles', function (t) { t.plan(2);