mirror of
https://github.com/Xahau/xahau.js.git
synced 2025-11-04 21:15:47 +00:00
152 lines
4.0 KiB
JavaScript
152 lines
4.0 KiB
JavaScript
/* eslint-disable no-var, no-param-reassign */
|
|
/* these eslint rules are disabled because gulp does not support babel yet */
|
|
'use strict';
|
|
const _ = require('lodash');
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
const assert = require('assert');
|
|
const gulp = require('gulp');
|
|
const webpack = require('webpack');
|
|
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
|
|
|
|
const pkg = require('./package.json');
|
|
|
|
const uglifyOptions = {
|
|
mangle: {
|
|
reserved: ['_', 'RippleError', 'RippledError', 'UnexpectedError',
|
|
'LedgerVersionError', 'ConnectionError', 'NotConnectedError',
|
|
'DisconnectedError', 'TimeoutError', 'ResponseFormatError',
|
|
'ValidationError', 'NotFoundError', 'MissingLedgerHistoryError',
|
|
'PendingLedgerVersionError'
|
|
]
|
|
}
|
|
};
|
|
|
|
function getWebpackConfig(extension, overrides) {
|
|
overrides = overrides || {};
|
|
let defaults = {
|
|
cache: true,
|
|
externals: [{
|
|
'lodash': '_'
|
|
}],
|
|
entry: './src/index.ts',
|
|
output: {
|
|
library: 'ripple',
|
|
path: path.join(__dirname, 'build/'),
|
|
filename: `ripple-${pkg.version}${extension}`
|
|
},
|
|
plugins: [
|
|
new webpack.NormalModuleReplacementPlugin(/^ws$/, './wswrapper'),
|
|
new webpack.NormalModuleReplacementPlugin(/^\.\/wallet$/, './wallet-web'),
|
|
new webpack.NormalModuleReplacementPlugin(/^.*setup-api$/,
|
|
'./setup-api-web')
|
|
],
|
|
module: {
|
|
rules: [{
|
|
test: /jayson/,
|
|
use: 'null',
|
|
}, {
|
|
test: /\.ts$/,
|
|
use: [{
|
|
loader: 'ts-loader',
|
|
options: {
|
|
compilerOptions: {
|
|
composite: false,
|
|
declaration: false,
|
|
declarationMap: false
|
|
}
|
|
},
|
|
}],
|
|
}]
|
|
},
|
|
resolve: {
|
|
extensions: [ '.ts', '.js' ]
|
|
},
|
|
};
|
|
return _.assign({}, defaults, overrides);
|
|
}
|
|
|
|
function webpackConfigForWebTest(testFileName) {
|
|
var match = testFileName.match(/\/?([^\/]*)-test.js$/);
|
|
if (!match) {
|
|
assert(false, 'wrong filename:' + testFileName);
|
|
}
|
|
var configOverrides = {
|
|
externals: [{
|
|
'lodash': '_',
|
|
'ripple-api': 'ripple',
|
|
'net': 'null'
|
|
}],
|
|
entry: testFileName,
|
|
output: {
|
|
library: match[1].replace(/-/g, '_'),
|
|
path: path.join(__dirname, 'test-compiled-for-web/'),
|
|
filename: match[1] + '-test.js'
|
|
}
|
|
};
|
|
return getWebpackConfig('.js', configOverrides);
|
|
}
|
|
|
|
function createLink(from, to) {
|
|
if (fs.existsSync(to)) {
|
|
fs.unlinkSync(to);
|
|
}
|
|
fs.linkSync(from, to);
|
|
}
|
|
|
|
function createBuildLink(callback) {
|
|
return function(err, res) {
|
|
createLink('./build/ripple-' + pkg.version + '.js',
|
|
'./build/ripple-latest.js');
|
|
callback(err, res);
|
|
};
|
|
}
|
|
|
|
function watch(callback) {
|
|
gulp.watch('src/*', gulp.series(buildDebug));
|
|
callback();
|
|
}
|
|
|
|
function build(callback) {
|
|
webpack(getWebpackConfig('.js'), createBuildLink(callback));
|
|
}
|
|
|
|
function buildDebug(callback) {
|
|
const webpackConfig = getWebpackConfig('-debug.js', {devtool: 'eval'});
|
|
webpackConfig.plugins.unshift(new webpack.LoaderOptionsPlugin({debug: true}));
|
|
webpack(webpackConfig, callback);
|
|
}
|
|
|
|
function buildMin(callback) {
|
|
const webpackConfig = getWebpackConfig('-min.js');
|
|
webpackConfig.plugins.push(new UglifyJsPlugin({uglifyOptions}));
|
|
webpack(webpackConfig, function() {
|
|
createLink('./build/ripple-' + pkg.version + '-min.js',
|
|
'./build/ripple-latest-min.js');
|
|
callback();
|
|
});
|
|
}
|
|
|
|
function buildTests(callback) {
|
|
var times = 0;
|
|
function done() {
|
|
if (++times >= 5) {
|
|
callback();
|
|
}
|
|
}
|
|
webpack(webpackConfigForWebTest('./test/rangeset-test.js'), done);
|
|
webpack(webpackConfigForWebTest('./test/connection-test.js'), done);
|
|
webpack(webpackConfigForWebTest('./test/api-test.js'), done);
|
|
webpack(webpackConfigForWebTest('./test/broadcast-api-test.js'), done);
|
|
webpack(webpackConfigForWebTest('./test/integration/integration-test.js',
|
|
'integration/'), done);
|
|
}
|
|
|
|
exports.watch = watch;
|
|
exports.build = build;
|
|
exports.buildDebug = buildDebug;
|
|
exports.buildMin = buildMin;
|
|
exports.buildTests = buildTests;
|
|
|
|
exports.default = gulp.parallel(build, buildDebug, buildMin);
|