unbuild.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. var fs = require('fs');
  2. var nodePath = require('path');
  3. var dir = __dirname + '/../';
  4. var read = function(path){
  5. return fs.readFileSync(nodePath.join(dir, path)).toString();
  6. }
  7. var write = function(path, data){
  8. return fs.writeFileSync(nodePath.join(dir, path), data);
  9. }
  10. var rm = function(path, full) {
  11. path = full || nodePath.join(dir, path);
  12. if(!fs.existsSync(path)){ return }
  13. fs.readdirSync(path).forEach(function(file,index){
  14. var curPath = path + "/" + file;
  15. if(fs.lstatSync(curPath).isDirectory()) { // recurse
  16. rm(null, curPath);
  17. } else { // delete file
  18. fs.unlinkSync(curPath);
  19. }
  20. });
  21. fs.rmdirSync(path);
  22. };
  23. var mk = function(path){
  24. path = nodePath.join(dir, path);
  25. if(fs.existsSync(path)){ return }
  26. fs.mkdirSync(path);
  27. }
  28. var between = function(text, start, end){
  29. end = end || start;
  30. var s = text.indexOf(start);
  31. if(s < 0){ return ''}
  32. s += start.length;
  33. var e = text.indexOf(end, s);
  34. if(e < 0){ return '' }
  35. var code = text.slice(s, e);
  36. return {s: s, t: code, e: e};
  37. }
  38. var next = function(start, end){
  39. end = end || start;
  40. if(!next.text){
  41. next.text = start;
  42. return;
  43. }
  44. var code = between(next.text, start, end);
  45. next.text = next.text.slice(code.e + end.length);
  46. return code.t;
  47. }
  48. var path = function(p){
  49. var code = next(',', ')');
  50. var path;
  51. try{path = eval(code);
  52. }catch(e){console.log("fail", e)};
  53. if(!path){ return }
  54. if('.js' !== path.slice(-3)){
  55. path += '.js';
  56. }
  57. return nodePath.join('./'+(p||'src'), path);
  58. }
  59. var undent = function(code, n){
  60. var regex = /\n\t\t/g;
  61. if(1 === n){
  62. regex = /\n\t/g;
  63. }
  64. return code.replace(regex, '\n');
  65. }
  66. ;(function(){
  67. var arg = process.argv[2] || 'gun';
  68. if('gun' === arg){
  69. rm('./src');
  70. mk('./src');
  71. mk('./src/polyfill');
  72. mk('./src/adapters');
  73. } else {
  74. rm('./'+arg);
  75. mk('./'+arg);
  76. }
  77. var f = read(arg+'.js');
  78. var code = next(f);
  79. code = next("/* UNBUILD */");
  80. if('gun' === arg){
  81. write('src/polyfill/unbuild.js', undent(code, 1));
  82. arg = '';
  83. }
  84. (function recurse(c){
  85. code = next(";USE(function(module){", "})(USE");
  86. if(!code){ return }
  87. var file = path(arg);
  88. if(!file){ return }
  89. code = code.replace(/\bUSE\(/g, 'require(');
  90. write(file, undent(code));
  91. recurse();
  92. }());
  93. }());