/** * @author mrdoob / http://mrdoob.com/ */ var fs = require( 'fs' ); var srcFolder = '../examples/js/'; var dstFolder = '../examples/jsm/'; var files = [ { path: 'controls/OrbitControls.js', ignoreList: [] }, { path: 'controls/MapControls.js', ignoreList: [] }, { path: 'controls/TrackballControls.js', ignoreList: [] }, // { file: 'controls/TransformControls.js', ignoreList: [] }, { path: 'loaders/GLTFLoader.js', ignoreList: [ 'NoSide', 'Matrix2', 'DDSLoader', 'DRACOLoader', 'BufferGeometryUtils' ] }, { path: 'loaders/OBJLoader.js', ignoreList: [] } ]; for ( var i = 0; i < files.length; i ++ ) { var file = files[ i ]; convert( file.path, file.ignoreList ); } // function convert( path, ignoreList ) { var contents = fs.readFileSync( srcFolder + path, 'utf8' ); var className = ''; var dependencies = {}; // class name contents = contents.replace( /THREE\.([a-zA-Z0-9]+) = /g, function ( match, p1 ) { className = p1; console.log( className ); return `_IMPORTS_\n\nvar ${p1} = `; } ); contents = contents.replace( /THREE\.([a-zA-Z0-9]+)\./g, function ( match, p1 ) { if ( p1 === className ) return `${p1}.`; return match; } ); // methods contents = contents.replace( /new THREE\.([a-zA-Z0-9]+)\(/g, function ( match, p1 ) { if ( ignoreList.includes( p1 ) ) return match; dependencies[ p1 ] = true; return `new ${p1}(`; } ); // constants contents = contents.replace( /THREE\.([a-zA-Z0-9]+)/g, function ( match, p1 ) { if ( ignoreList.includes( p1 ) ) return match; if ( p1 === className ) return match; dependencies[ p1 ] = true; // console.log( match, p1 ); return `${p1}`; } ); // var keys = Object.keys( dependencies ).sort().map( value => '\n\t' + value ).toString(); var imports = `import {${keys}\n} from "../../../build/three.module.js";`; var exports = `export { ${className} }`; var output = contents.replace( '_IMPORTS_', imports ) + '\n' + exports; // console.log( output ); fs.writeFileSync( dstFolder + path, output, 'utf-8' ); };