util.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. "use strict";
  2. exports.__esModule = true;
  3. exports.chmod = chmod;
  4. exports.readdirFilter = readdirFilter;
  5. exports.shouldIgnore = shouldIgnore;
  6. exports.addSourceMappingUrl = addSourceMappingUrl;
  7. exports.log = log;
  8. exports.transform = transform;
  9. exports.compile = compile;
  10. exports.requireChokidar = requireChokidar;
  11. var commander = require("commander");
  12. var readdir = require("fs-readdir-recursive");
  13. var index = require("./index");
  14. var babel = require("babel-core");
  15. var util = require("babel-core").util;
  16. var path = require("path");
  17. var fs = require("fs");
  18. var _ = require("lodash");
  19. function chmod(src, dest) {
  20. fs.chmodSync(dest, fs.statSync(src).mode);
  21. }
  22. function readdirFilter(filename) {
  23. return readdir(filename).filter(function (filename) {
  24. return util.canCompile(filename);
  25. });
  26. }
  27. exports.readdir = readdir;
  28. var canCompile = exports.canCompile = util.canCompile;
  29. function shouldIgnore(loc) {
  30. return util.shouldIgnore(loc, index.opts.ignore, index.opts.only);
  31. }
  32. function addSourceMappingUrl(code, loc) {
  33. return code + "\n//# sourceMappingURL=" + path.basename(loc);
  34. }
  35. function log(msg) {
  36. if (!commander.quiet) console.log(msg);
  37. }
  38. function transform(filename, code, opts) {
  39. opts = _.defaults(opts || {}, index.opts);
  40. opts.filename = filename;
  41. var result = babel.transform(code, opts);
  42. result.filename = filename;
  43. result.actual = code;
  44. return result;
  45. }
  46. function compile(filename, opts) {
  47. try {
  48. var code = fs.readFileSync(filename, "utf8");
  49. return transform(filename, code, opts);
  50. } catch (err) {
  51. if (commander.watch) {
  52. console.error(toErrorStack(err));
  53. return { ignored: true };
  54. } else {
  55. throw err;
  56. }
  57. }
  58. }
  59. function toErrorStack(err) {
  60. if (err._babel && err instanceof SyntaxError) {
  61. return err.name + ": " + err.message + "\n" + err.codeFrame;
  62. } else {
  63. return err.stack;
  64. }
  65. }
  66. process.on("uncaughtException", function (err) {
  67. console.error(toErrorStack(err));
  68. process.exit(1);
  69. });
  70. function requireChokidar() {
  71. try {
  72. return require("chokidar");
  73. } catch (err) {
  74. console.error("The optional dependency chokidar failed to install and is required for " + "--watch. Chokidar is likely not supported on your platform.");
  75. throw err;
  76. }
  77. }