build-acorn.js 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. var fs = require("fs"), path = require("path")
  2. var stream = require("stream")
  3. var browserify = require("browserify")
  4. var babel = require('babel-core')
  5. var babelify = require("babelify").configure({loose: "all"})
  6. process.chdir(path.resolve(__dirname, ".."))
  7. browserify({standalone: "acorn"})
  8. .plugin(require('browserify-derequire'))
  9. .transform(babelify)
  10. .require("./src/index.js", {entry: true})
  11. .bundle()
  12. .on("error", function (err) { console.log("Error: " + err.message) })
  13. .pipe(fs.createWriteStream("dist/acorn.js"))
  14. var ACORN_PLACEHOLDER = "this_function_call_should_be_replaced_with_a_call_to_load_acorn()";
  15. function acornShimPrepare(file) {
  16. var tr = new stream.Transform
  17. if (file == path.resolve(__dirname, "../src/index.js")) {
  18. var sent = false
  19. tr._transform = function(chunk, _, callback) {
  20. if (!sent) {
  21. sent = true
  22. callback(null, ACORN_PLACEHOLDER);
  23. } else {
  24. callback()
  25. }
  26. }
  27. } else {
  28. tr._transform = function(chunk, _, callback) { callback(null, chunk) }
  29. }
  30. return tr
  31. }
  32. function acornShimComplete() {
  33. var tr = new stream.Transform
  34. var buffer = "";
  35. tr._transform = function(chunk, _, callback) {
  36. buffer += chunk.toString("utf8");
  37. callback();
  38. };
  39. tr._flush = function (callback) {
  40. tr.push(buffer.replace(ACORN_PLACEHOLDER, "module.exports = typeof acorn != 'undefined' ? acorn : require(\"./acorn\")"));
  41. callback(null);
  42. };
  43. return tr;
  44. }
  45. browserify({standalone: "acorn.loose"})
  46. .plugin(require('browserify-derequire'))
  47. .transform(acornShimPrepare)
  48. .transform(babelify)
  49. .require("./src/loose/index.js", {entry: true})
  50. .bundle()
  51. .on("error", function (err) { console.log("Error: " + err.message) })
  52. .pipe(acornShimComplete())
  53. .pipe(fs.createWriteStream("dist/acorn_loose.js"))
  54. browserify({standalone: "acorn.walk"})
  55. .plugin(require('browserify-derequire'))
  56. .transform(acornShimPrepare)
  57. .transform(babelify)
  58. .require("./src/walk/index.js", {entry: true})
  59. .bundle()
  60. .on("error", function (err) { console.log("Error: " + err.message) })
  61. .pipe(acornShimComplete())
  62. .pipe(fs.createWriteStream("dist/walk.js"))
  63. babel.transformFile("./src/bin/acorn.js", function (err, result) {
  64. if (err) return console.log("Error: " + err.message)
  65. fs.writeFile("bin/acorn", result.code, function (err) {
  66. if (err) return console.log("Error: " + err.message)
  67. // Make bin/acorn executable
  68. if (process.platform === 'win32')
  69. return
  70. var stat = fs.statSync("bin/acorn")
  71. var newPerm = stat.mode | parseInt('111', 8)
  72. fs.chmodSync("bin/acorn", newPerm)
  73. })
  74. })