2019-08-25 09:39:20 +03:00
import resolve from 'rollup-plugin-node-resolve' ;
import commonjs from 'rollup-plugin-commonjs' ;
import json from 'rollup-plugin-json' ;
import { terser } from "rollup-plugin-terser" ;
import { createFilter } from 'rollup-pluginutils' ;
function Replacer ( options = { } ) {
const filter = createFilter ( options . include , options . exclude ) ;
let suffixes = Object . keys ( options . replace ) ;
return {
name : "file-replacer" ,
transform ( code , id ) {
2019-09-06 19:25:17 +03:00
/ *
console . log ( "------" ) ;
console . log ( "NAME" , id , id . match ( "node-resolve:empty.js$" ) ) ;
console . log ( code ) ;
console . log ( "------" ) ;
* /
2019-08-25 09:39:20 +03:00
if ( ! filter ( id ) ) { return null ; }
2019-09-06 19:25:17 +03:00
2019-08-25 09:39:20 +03:00
for ( let i = 0 ; i < suffixes . length ; i ++ ) {
const suffix = suffixes [ i ] ;
if ( id . match ( new RegExp ( suffix ) ) ) {
//if (id.substring(id.length - suffix.length) === suffix) {
let newCode = options . replace [ suffix ] ;
console . log ( ` Replace: ${ id } ( ${ code . length } => ${ newCode . length } ) ` ) ;
return {
2019-09-06 19:25:17 +03:00
code : newCode ,
map : { mappings : '' }
2019-08-25 09:39:20 +03:00
} ;
}
}
return null ;
}
} ;
}
const undef = "module.exports = undefined;" ;
const empty = "module.exports = {};" ;
const brorand = "module.exports = function(length) { var result = new Uint8Array(length); (global.crypto || global.msCrypto).getRandomValues(result); return result; }" ;
const ellipticPackage = ( function ( ) {
const ellipticPackage = require ( './node_modules/elliptic/package.json' ) ;
return JSON . stringify ( { version : ellipticPackage . version } ) ;
} ) ( ) ;
export default commandLineArgs => {
let minify = commandLineArgs . configMinify ;
let buildModule = commandLineArgs . configModule ;
let testing = commandLineArgs . configTest ;
2019-08-25 23:20:34 +03:00
let input = "packages/ethers/lib/index.js"
2019-08-25 09:39:20 +03:00
let output = [ "umd" ] ;
let format = "umd" ;
let mainFields = [ "browser" , "main" ] ;
if ( buildModule ) {
2019-08-25 23:20:34 +03:00
input = "packages/ethers/lib.esm/index.js" ;
2019-08-25 09:39:20 +03:00
output = [ "esm" ] ;
format = "esm" ;
mainFields = [ "browser" , "module" , "main" ] ;
}
const replacer = Replacer ( {
replace : {
// Remove the precomputed secp256k1 points
"elliptic/lib/elliptic/precomputed/secp256k1.js$" : undef ,
// Remove curves we don't care about
"elliptic/curve/edwards.js$" : empty ,
"elliptic/curve/mont.js$" : empty ,
"elliptic/lib/elliptic/eddsa/.*$" : empty ,
// We only use the version from this JSON package
"elliptic/package.json$" : ellipticPackage ,
// Remove unneeded hashing algorithms
"hash.js/lib/hash/sha/1.js$" : empty ,
"hash.js/lib/hash/sha/224.js$" : empty ,
"hash.js/lib/hash/sha/384.js$" : empty ,
// Swap out borland for the random bytes we already have
"brorand/index.js$" : brorand ,
}
} ) ;
const plugins = [
replacer ,
json ( ) ,
resolve ( {
mainFields : mainFields
} ) ,
commonjs ( {
namedExports : {
"bn.js" : [ "BN" ] ,
"elliptic" : [ "ec" ]
2019-09-06 19:25:17 +03:00
} ,
} ) ,
2019-08-25 09:39:20 +03:00
] ;
if ( minify ) {
output . push ( "min" ) ;
plugins . push ( terser ( ) ) ;
}
let outputFile = ( ( "packages/" ) +
( testing ? "tests" : "ethers" ) +
( "/dist/ethers." + output . join ( "." ) + ".js" ) ) ;
return {
input : input ,
output : {
file : outputFile ,
format : format ,
name : "ethers"
} ,
treeshake : false ,
plugins : plugins
} ;
}