2019-05-15 01:25:46 +03:00
'use strict' ;
const fs = require ( 'fs' ) ;
const path = require ( 'path' ) ;
const through = require ( 'through' ) ;
let show = { transformed : true , preserved : true } ;
// The elliptic package.json is only used for its version
var ellipticPackage = require ( 'elliptic/package.json' ) ;
ellipticPackage = JSON . stringify ( { version : ellipticPackage . version } ) ;
var version = require ( '../package.json' ) . version ;
var undef = "module.exports = undefined;" ;
var empty = "module.exports = {};" ;
// This is only used in getKeyPair, which we do not use; but we'll
// leave it in tact using the browser crypto functions
var brorand = "module.exports = function(length) { var result = new Uint8Array(length); (global.crypto || global.msCrypto).getRandomValues(result); return result; }" ;
// setImmediate is installed globally by our src.browser/shims.ts, loaded from src.ts/index.ts
var process = "module.exports = { browser: true };" ;
var timers = "module.exports = { setImmediate: global.setImmediate }; " ;
function readShim ( filename ) {
return fs . readFileSync ( './shims/' + filename + '.js' ) . toString ( ) ;
}
var transforms = {
// 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 ,
2019-06-12 16:38:15 +03:00
// Remove unneeded hashing algorithms
2019-05-15 01:25:46 +03:00
"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 ,
2019-06-12 16:38:15 +03:00
// Used by sha3 if it exists; (so make it not exist)
2019-05-15 01:25:46 +03:00
"process/browser.js" : process ,
"timers-browserify/main.js" : timers ,
2019-06-12 16:38:15 +03:00
"ethers/platform.js" : '"use strict";\n\nexports.platform = "browser\"' ,
2019-05-15 01:25:46 +03:00
} ;
function padding ( length ) {
let pad = '' ;
while ( pad . length < length ) { pad += ' ' ; }
return pad ;
}
function transformFile ( path ) {
for ( var pattern in transforms ) {
if ( path . match ( new RegExp ( '/' + pattern + '$' ) ) ) {
return transforms [ pattern ] ;
}
}
return null ;
}
const dirname = path . resolve ( _ _dirname , '../../..' ) ;
module . exports = function ( pathname , options ) {
let data = '' ;
return through ( function ( chunk ) {
data += chunk ;
} , function ( ) {
var contents = fs . readFileSync ( pathname ) . toString ( ) ;
/ *
[ 'Buffer' ] . forEach ( ( word ) => {
if ( contents . indexOf ( word ) !== - 1 ) {
console . log ( "Found Bad Word:" , word , "in" , pathname )
}
} ) ;
* /
var transformed = transformFile ( pathname ) ;
var shortPath = pathname ;
if ( shortPath . substring ( 0 , dirname . length ) == dirname ) {
shortPath = shortPath . substring ( dirname . length ) ;
}
var size = fs . readFileSync ( pathname ) . length ;
if ( transformed != null ) {
if ( show . transformed ) {
console . log ( 'Transformed:' , shortPath , padding ( 70 - shortPath . length ) , size , padding ( 6 - String ( size ) . length ) , '=>' , transformed . length ) ;
}
data = transformed ;
} else if ( shortPath === '/src.ts/utils/wordlist.ts' ) {
data += '\n\nexportWordlist = true;'
if ( show . transformed ) {
console . log ( 'Transformed:' , shortPath , padding ( 70 - shortPath . length ) , size , padding ( 6 - String ( size ) . length ) , '=>' , data . length ) ;
}
} else {
if ( show . preserved ) {
console . log ( 'Preserved: ' , shortPath , padding ( 70 - shortPath . length ) , size ) ;
}
} this . queue ( data ) ;
this . queue ( null ) ;
} ) ;
}