flocore/browser/build.js
Ryan X. Charles fc942c2ac5 remove network stuff from main build
The network classes Connection, Peer and PeerManager are not useful from the
browser, so I have removed them from the main browser bundle by default.  This
saves several tens of kilobytes from the browser bundle (since not only are
these files not included, but their dependencies are not included either).
2014-07-14 20:53:22 -07:00

175 lines
4.3 KiB
JavaScript

'use strict';
var fs = require('fs');
var browserify = require('browserify');
var exec = require('child_process').exec;
var sys = require('sys');
var puts = function(error, stdout, stderr) {
if (error) console.log(error);
//sys.puts(stdout);
//sys.puts(stderr);
};
var modules = [
'lib/Address',
'lib/Armory',
'lib/Base58',
'lib/HierarchicalKey',
'lib/BIP39',
'lib/BIP39WordlistEn',
'lib/Block',
'lib/Bloom',
'lib/Connection',
'lib/Curve',
'lib/Deserialize',
'lib/ECIES',
'lib/Electrum',
'lib/Message',
'lib/Opcode',
'lib/PayPro',
'lib/Peer',
'lib/PeerManager',
'lib/PrivateKey',
'lib/RpcClient',
'lib/Key',
'lib/Point',
'lib/SIN',
'lib/SINKey',
'lib/Script',
'lib/ScriptInterpreter',
'lib/SecureRandom',
'lib/Sign',
'lib/sjcl',
'lib/Transaction',
'lib/TransactionBuilder',
'lib/Wallet',
'lib/WalletKey',
'patches/Buffers.monkey',
'patches/Number.monkey',
'config',
'const',
'networks',
'util/log',
'util/util',
'util/EncodedData',
'util/VersionedData',
'util/BinaryParser',
];
module.exports.moduleNames = modules;
var createBitcore = function(opts) {
opts.dir = opts.dir || '';
if (!opts.includeall && !opts.includemain && (!opts.submodules || opts.submodules.length === 0)) {
if (!opts.stdout) console.log('Must use either -s or -a or -m option. For more info use the --help option');
process.exit(1);
}
var submodules = opts.submodules;
//modules included in "all" but not included in "main" bundle
if (opts.includemain) {
submodules = JSON.parse(JSON.stringify(modules));
submodules.splice(submodules.indexOf('lib/BIP39'), 1);
submodules.splice(submodules.indexOf('lib/BIP39WordlistEn'), 1);
submodules.splice(submodules.indexOf('lib/PayPro'), 1);
submodules.splice(submodules.indexOf('lib/Connection'), 1);
submodules.splice(submodules.indexOf('lib/Peer'), 1);
submodules.splice(submodules.indexOf('lib/PeerManager'), 1);
var assert = require('assert');
assert(submodules.length == modules.length - 6);
}
if (opts.submodules) {
for (var i = 0; i < opts.submodules.length; i++) {
var sm = opts.submodules[i];
if (modules.indexOf(sm) === -1) throw new Error('Unknown submodule ' + sm);
}
}
var bopts = {
debug: true,
standalone: 'bitcore',
insertGlobals: true
};
var b = browserify(bopts);
b.require(opts.dir + 'browserify-buffertools/buffertools.js', {
expose: 'buffertools'
});
b.require(opts.dir + 'bufferput', {
expose: 'bufferput'
});
b.require(opts.dir + 'buffers', {
expose: 'buffers'
});
b.require('./' + opts.dir + 'bitcore', {
expose: 'bitcore'
});
modules.forEach(function(m) {
if (opts.includeall || submodules.indexOf(m) > -1) {
if (!opts.stdout) console.log('Including ' + m + ' in the browser bundle');
b.require('./' + opts.dir + m + '.js', {
expose: './' + m
});
}
});
if (!opts.dontminify) {
b.transform({
global: true
}, 'uglifyify');
}
var bundle = b.bundle();
return bundle;
};
var createTestData = function() {
var bopts = {
debug: true,
standalone: 'testdata',
insertGlobals: true
};
var tb = browserify(bopts);
tb.require('./test/testdata', {
expose: 'testdata'
});
tb.transform('brfs');
return tb.bundle();
};
if (require.main === module) {
var list = function(val) {
return val.split(',');
};
var program = require('commander');
program
.version('0.0.1')
.option('-a, --includeall', 'Include all submodules.')
.option('-m, --includemain', 'Include main submodules.')
.option('-d, --dontminify', 'Don\'t minify the code.')
.option('-o, --stdout', 'Specify output as stdout')
.option('-D, --dir <dir>', 'Specify a base directory')
.option('-s, --submodules <items>', 'Include the listed comma-separated submodules.', list)
.parse(process.argv);
if (!program.stdout) {
var testBundle = createTestData(program);
testBundle.pipe(fs.createWriteStream('browser/testdata.js'));
}
var bitcoreBundle = createBitcore(program);
var pjson = require('../package.json');
bitcoreBundle.pipe(
program.stdout ? process.stdout :
fs.createWriteStream('browser/bitcore-dev.js'));
}
module.exports.createBitcore = createBitcore;
module.exports.createTestData = createTestData;