six-caver-js
Version:
caver-js is a JavaScript API library that allows developers to interact with a Klaytn node
153 lines (138 loc) • 4.4 kB
JavaScript
const path = require('path')
const del = require('del')
const gulp = require('gulp')
const browserify = require('browserify')
const uglify = require('gulp-uglify')
const babel = require('gulp-babel')
const rename = require('gulp-rename')
const source = require('vinyl-source-stream')
const exorcist = require('exorcist')
const streamify = require('gulp-streamify')
const DEST = path.join(__dirname, 'dist/')
const packages = [
{
fileName: 'caver',
expose: 'Caver',
src: './index.js',
ignore: ['xhr2', 'xmlhttprequest', 'websocket'],
},
{
fileName: 'caver-utils',
expose: 'CaverUtils',
src: './packages/caver-utils/src/index.js',
},
{
fileName: 'caver-klay',
expose: 'CaverKlay',
src: './packages/caver-klay/src/index.js',
},
{
fileName: 'caver-core-helpers',
expose: 'CaverHelpers',
src: './packages/caver-core-helpers/src/index.js',
},
{
fileName: 'caver-middleware',
expose: 'CaverMiddleware',
src: './packages/caver-middleware/src/index.js',
},
{
fileName: 'caver-rtm',
expose: 'CaverRtm',
src: './packages/caver-middleware/src/index.js',
},
{
fileName: 'caver-net',
expose: 'CaverNet',
src: './packages/caver-net/src/index.js',
},
{
fileName: 'caver-core-requestmanager',
expose: 'CaverRequestManager',
src: './packages/caver-core-requestmanager/src/index.js',
ignore: ['xhr2', 'xmlhttprequest', 'websocket'],
},
{
fileName: 'caver-core-subscriptions',
expose: 'CaverSubscriptions',
src: './packages/caver-core-subscriptions/src/index.js',
},
{
fileName: 'caver-core-method',
expose: 'CaverMethod',
src: './packages/caver-core-method/src/index.js',
},
]
const browserifyOptions = {
debug: true,
derequire: true,
insertGlobalVars: false, // jshint ignore:line
detectGlobals: true,
bundleExternal: true,
}
const ugliyOptions = {
compress: {
dead_code: true, // jshint ignore:line
drop_debugger: true, // jshint ignore:line
global_defs: {
// jshint ignore:line
DEBUG: false, // matters for some libraries
},
},
}
gulp.task(
'clean',
gulp.series(function(cb) {
del([DEST]).then(cb.bind(null, null))
})
)
packages.forEach(function(pckg, i) {
const prevPckg = !i ? 'clean' : packages[i - 1].fileName
gulp.task(
pckg.fileName,
gulp.series(prevPckg, function() {
browserifyOptions.standalone = pckg.expose
const pipe = browserify(browserifyOptions)
.require(pckg.src, { expose: pckg.expose })
.require('bn.js', { expose: 'BN' }) // expose it to dapp developers
.add(pckg.src)
if (pckg.ignore) {
pckg.ignore.forEach(function(ignore) {
pipe.ignore(ignore)
})
}
return pipe
.bundle()
.pipe(exorcist(path.join(DEST, `${pckg.fileName}.js.map`)))
.pipe(source(`${pckg.fileName}.js`))
.pipe(
streamify(
babel({
compact: false,
presets: ['@babel/preset-env'],
plugins: ['@babel/plugin-transform-runtime'],
})
)
)
.pipe(gulp.dest(DEST))
.pipe(
streamify(
babel({
compact: true,
presets: ['@babel/preset-env'],
plugins: ['@babel/plugin-transform-runtime'],
})
)
)
.pipe(streamify(uglify(ugliyOptions)))
.on('error', function(err) {
console.error(err)
})
.pipe(rename(`${pckg.fileName}.min.js`))
.pipe(gulp.dest(DEST))
})
)
})
gulp.task('all', gulp.series('clean', packages[packages.length - 1].fileName))
gulp.task('default', gulp.series('clean', packages[0].fileName))