modularize.js 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. /**
  2. * @author mrdoob / http://mrdoob.com/
  3. */
  4. var fs = require( 'fs' );
  5. var srcFolder = '../examples/js/';
  6. var dstFolder = '../examples/jsm/';
  7. var files = [
  8. { path: 'controls/OrbitControls.js', ignoreList: [] },
  9. { path: 'controls/MapControls.js', ignoreList: [] },
  10. { path: 'controls/TrackballControls.js', ignoreList: [] },
  11. // { path: 'controls/TransformControls.js', ignoreList: [] },
  12. { path: 'exporters/GLTFExporter.js', ignoreList: [] },
  13. { path: 'loaders/GLTFLoader.js', ignoreList: [ 'NoSide', 'Matrix2', 'DDSLoader' ] },
  14. { path: 'loaders/OBJLoader.js', ignoreList: [] },
  15. { path: 'loaders/MTLLoader.js', ignoreList: [] }
  16. ];
  17. for ( var i = 0; i < files.length; i ++ ) {
  18. var file = files[ i ];
  19. convert( file.path, file.ignoreList );
  20. }
  21. //
  22. function convert( path, ignoreList ) {
  23. var contents = fs.readFileSync( srcFolder + path, 'utf8' );
  24. var className = '';
  25. var dependencies = {};
  26. // class name
  27. contents = contents.replace( /THREE\.([a-zA-Z0-9]+) = /g, function ( match, p1 ) {
  28. className = p1;
  29. console.log( className );
  30. return `_IMPORTS_\n\nvar ${p1} = `;
  31. } );
  32. contents = contents.replace( /(\'?)THREE\.([a-zA-Z0-9]+)(\.{0,1})/g, function ( match, p1, p2, p3 ) {
  33. if ( p1 === '\'' ) return match; // Inside a string
  34. if ( p2 === className ) return `${p2}${p3}`;
  35. return match;
  36. } );
  37. // methods
  38. contents = contents.replace( /new THREE\.([a-zA-Z0-9]+)\(/g, function ( match, p1 ) {
  39. if ( ignoreList.includes( p1 ) ) return match;
  40. dependencies[ p1 ] = true;
  41. return `new ${p1}(`;
  42. } );
  43. // constants
  44. contents = contents.replace( /THREE\.([a-zA-Z0-9]+)/g, function ( match, p1 ) {
  45. if ( ignoreList.includes( p1 ) ) return match;
  46. if ( p1 === className ) return match;
  47. dependencies[ p1 ] = true;
  48. // console.log( match, p1 );
  49. return `${p1}`;
  50. } );
  51. //
  52. var keys = Object.keys( dependencies ).sort().map( value => '\n\t' + value ).toString();
  53. var imports = `import {${keys}\n} from "../../../build/three.module.js";`;
  54. var exports = `export { ${className} };\n`;
  55. var output = contents.replace( '_IMPORTS_', imports ) + '\n' + exports;
  56. // console.log( output );
  57. fs.writeFileSync( dstFolder + path, output, 'utf-8' );
  58. };