autoprovider, buildQt not builds only necessery files, fixed gulpfile

This commit is contained in:
Marek Kotewicz 2014-11-11 15:47:58 +01:00
parent 84b36a7193
commit 838ca2fd93
8 changed files with 153 additions and 15 deletions

12
dist/ethereum.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -3,7 +3,7 @@
<head> <head>
<script type="text/javascript" src="js/es6-promise/promise.min.js"></script> <script type="text/javascript" src="js/es6-promise/promise.min.js"></script>
<script type="text/javascript" src="../dist/ethereum.min.js"></script> <script type="text/javascript" src="../dist/ethereum.js"></script>
<script type="text/javascript"> <script type="text/javascript">
if (window.Promise === undefined) { if (window.Promise === undefined) {
@ -13,8 +13,9 @@ if (window.Promise === undefined) {
var web3 = require('web3'); var web3 = require('web3');
//web3.setProvider(new web3.providers.QtProvider()); //web3.setProvider(new web3.providers.QtProvider());
web3.setProvider(new web3.providers.HttpRpcProvider("http://localhost:8080")); //web3.setProvider(new web3.providers.HttpRpcProvider("http://localhost:8080"));
// web3.setProvider(new web3.providers.WebSocketProvider("ws://localhost:40404/eth")); // web3.setProvider(new web3.providers.WebSocketProvider("ws://localhost:40404/eth"));
web3.setProvider(new web3.providers.AutoProvider());
function testSnippet() { function testSnippet() {
web3.eth.watch({altered: web3.eth.coinbase}).changed(function() { web3.eth.watch({altered: web3.eth.coinbase}).changed(function() {

@ -25,8 +25,8 @@ var build = function(src, dst) {
detectGlobals: false, detectGlobals: false,
bundleExternal: false bundleExternal: false
}) })
.add('./')
.require('./' + src + '.js', {expose: 'web3'}) .require('./' + src + '.js', {expose: 'web3'})
.add('./' + src + '.js')
.transform('envify', { .transform('envify', {
NODE_ENV: 'build' NODE_ENV: 'build'
}) })
@ -50,6 +50,25 @@ var build = function(src, dst) {
.pipe(gulp.dest( DEST )); .pipe(gulp.dest( DEST ));
}; };
var buildDev = function(src, dst) {
return browserify({
debug: true,
insert_global_vars: false,
detectGlobals: false,
bundleExternal: false
})
.require('./' + src + '.js', {expose: 'web3'})
.add('./' + src + '.js')
.transform('envify', {
NODE_ENV: 'build'
})
.transform('unreachable-branch-transform')
.bundle()
.pipe(exorcist(path.join( DEST, dst + '.js.map')))
.pipe(source(dst + '.js'))
.pipe(gulp.dest( DEST ));
};
var uglifyFile = function(file) { var uglifyFile = function(file) {
return gulp.src( DEST + file + '.js') return gulp.src( DEST + file + '.js')
.pipe(uglify()) .pipe(uglify())
@ -79,7 +98,11 @@ gulp.task('build', ['clean'], function () {
}); });
gulp.task('buildQt', ['clean'], function () { gulp.task('buildQt', ['clean'], function () {
return build('index_qt', 'ethereum_qt'); return build('index_qt', 'ethereum');
});
gulp.task('buildDev', ['clean'], function () {
return buildDev('index', 'ethereum');
}); });
gulp.task('uglify', ['build'], function(){ gulp.task('uglify', ['build'], function(){
@ -87,7 +110,7 @@ gulp.task('uglify', ['build'], function(){
}); });
gulp.task('uglifyQt', ['buildQt'], function () { gulp.task('uglifyQt', ['buildQt'], function () {
return uglifyFile('ethereum_qt'); return uglifyFile('ethereum');
}); });
gulp.task('watch', function() { gulp.task('watch', function() {
@ -96,3 +119,5 @@ gulp.task('watch', function() {
gulp.task('default', ['bower', 'lint', 'build', 'uglify']); gulp.task('default', ['bower', 'lint', 'build', 'uglify']);
gulp.task('qt', ['bower', 'lint', 'buildQt', 'uglifyQt']); gulp.task('qt', ['bower', 'lint', 'buildQt', 'uglifyQt']);
gulp.task('dev', ['bower', 'lint', 'buildDev']);

@ -2,5 +2,6 @@ var web3 = require('./lib/main');
web3.providers.WebSocketProvider = require('./lib/websocket'); web3.providers.WebSocketProvider = require('./lib/websocket');
web3.providers.HttpRpcProvider = require('./lib/httprpc'); web3.providers.HttpRpcProvider = require('./lib/httprpc');
web3.providers.QtProvider = require('./lib/qt'); web3.providers.QtProvider = require('./lib/qt');
web3.providers.AutoProvider = require('./lib/autoprovider');
module.exports = web3; module.exports = web3;

103
lib/autoprovider.js Normal file

@ -0,0 +1,103 @@
/*
This file is part of ethereum.js.
ethereum.js is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
ethereum.js is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with ethereum.js. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file websocket.js
* @authors:
* Marek Kotewicz <marek@ethdev.com>
* Marian Oancea <marian@ethdev.com>
* @date 2014
*/
/*
* @brief if qt object is available, uses QtProvider,
* if not tries to connect over websockets
* if it fails, it uses HttpRpcProvider
*/
if (process.env.NODE_ENV !== 'build') {
var WebSocket = require('ws'); // jshint ignore:line
}
if (process.env.NODE_ENV !== 'build') {
var web3 = require('./web3'); // jshint ignore:line
}
var AutoProvider = function (userOptions) {
if (web3.haveProvider()) {
return;
}
// before we determine what provider we are, we have to cache request
this.sendQueue = [];
this.onmessageQueue = [];
if (navigator.qt) {
this.provider = new web3.providers.QtProvider();
return;
}
userOptions = userOptions || {};
var options = {
httprpc: userOptions.httprpc || 'http://localhost:8080',
websockets: userOptions.websockets || 'ws://localhost:40404/eth'
};
var self = this;
var closeWithSuccess = function (success) {
ws.close();
if (success) {
self.provider = new web3.providers.WebSocketProvider(options.websockets);
return;
}
self.provider = new web3.providers.HttpRpcProvider(options.httprpc);
self.poll = self.provider.poll.bind(self.provider);
self.sendQueue.forEach(function (payload) {
self.provider(payload);
});
self.onmessageQueue.forEach(function (handler) {
self.provider.onmessage = handler;
});
};
var ws = new WebSocket(options.websockets);
ws.onopen = function() {
closeWithSuccess(true);
};
ws.onerror = function() {
closeWithSuccess(false);
};
};
AutoProvider.prototype.send = function (payload) {
if (this.provider) {
this.provider.send(payload);
return;
}
this.sendQueue.push(payload);
};
Object.defineProperty(AutoProvider.prototype, 'onmessage', {
set: function (handler) {
if (this.provider) {
this.provider.onmessage = handler;
return;
}
this.onmessageQueue.push(handler);
}
});
module.exports = AutoProvider;

@ -387,6 +387,10 @@ web3.setProvider = function(provider) {
web3.provider.sendQueued(); web3.provider.sendQueued();
}; };
web3.haveProvider = function() {
return !!web3.provider.provider;
};
var Filter = function(options, impl) { var Filter = function(options, impl) {
this.impl = impl; this.impl = impl;
this.callbacks = []; this.callbacks = [];