file.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. "use strict";
  2. var _stringify = require("babel-runtime/core-js/json/stringify");
  3. var _stringify2 = _interopRequireDefault(_stringify);
  4. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  5. var convertSourceMap = require("convert-source-map");
  6. var pathExists = require("path-exists");
  7. var sourceMap = require("source-map");
  8. var slash = require("slash");
  9. var path = require("path");
  10. var util = require("./util");
  11. var fs = require("fs");
  12. var _ = require("lodash");
  13. module.exports = function (commander, filenames, opts) {
  14. if (commander.sourceMaps === "inline") {
  15. opts.sourceMaps = true;
  16. }
  17. var results = [];
  18. var buildResult = function buildResult() {
  19. var map = new sourceMap.SourceMapGenerator({
  20. file: path.basename(commander.outFile || "") || "stdout",
  21. sourceRoot: opts.sourceRoot
  22. });
  23. var code = "";
  24. var offset = 0;
  25. _.each(results, function (result) {
  26. var filename = result.filename || "stdout";
  27. code += result.code + "\n";
  28. if (result.map) {
  29. (function () {
  30. var consumer = new sourceMap.SourceMapConsumer(result.map);
  31. var sourceFilename = filename;
  32. if (commander.outFile) {
  33. sourceFilename = path.relative(path.dirname(commander.outFile), sourceFilename);
  34. }
  35. sourceFilename = slash(sourceFilename);
  36. map._sources.add(sourceFilename);
  37. map.setSourceContent(sourceFilename, result.actual);
  38. consumer.eachMapping(function (mapping) {
  39. map._mappings.add({
  40. generatedLine: mapping.generatedLine + offset,
  41. generatedColumn: mapping.generatedColumn,
  42. originalLine: mapping.source == null ? null : mapping.originalLine,
  43. originalColumn: mapping.source == null ? null : mapping.originalColumn,
  44. source: mapping.source == null ? null : sourceFilename
  45. });
  46. });
  47. offset = code.split("\n").length;
  48. })();
  49. }
  50. });
  51. if (commander.sourceMaps === "inline" || !commander.outFile && commander.sourceMaps) {
  52. code += "\n" + convertSourceMap.fromObject(map).toComment();
  53. }
  54. return {
  55. map: map,
  56. code: code
  57. };
  58. };
  59. var output = function output() {
  60. var result = buildResult();
  61. if (commander.outFile) {
  62. if (commander.sourceMaps && commander.sourceMaps !== "inline") {
  63. var mapLoc = commander.outFile + ".map";
  64. result.code = util.addSourceMappingUrl(result.code, mapLoc);
  65. fs.writeFileSync(mapLoc, (0, _stringify2.default)(result.map));
  66. }
  67. fs.writeFileSync(commander.outFile, result.code);
  68. } else {
  69. process.stdout.write(result.code + "\n");
  70. }
  71. };
  72. var stdin = function stdin() {
  73. var code = "";
  74. process.stdin.setEncoding("utf8");
  75. process.stdin.on("readable", function () {
  76. var chunk = process.stdin.read();
  77. if (chunk !== null) code += chunk;
  78. });
  79. process.stdin.on("end", function () {
  80. results.push(util.transform(commander.filename, code));
  81. output();
  82. });
  83. };
  84. var walk = function walk() {
  85. var _filenames = [];
  86. results = [];
  87. _.each(filenames, function (filename) {
  88. if (!pathExists.sync(filename)) return;
  89. var stat = fs.statSync(filename);
  90. if (stat.isDirectory()) {
  91. (function () {
  92. var dirname = filename;
  93. _.each(util.readdirFilter(filename), function (filename) {
  94. _filenames.push(path.join(dirname, filename));
  95. });
  96. })();
  97. } else {
  98. _filenames.push(filename);
  99. }
  100. });
  101. _.each(_filenames, function (filename) {
  102. if (util.shouldIgnore(filename)) return;
  103. var data = util.compile(filename);
  104. if (data.ignored) return;
  105. results.push(data);
  106. });
  107. output();
  108. };
  109. var files = function files() {
  110. if (!commander.skipInitialBuild) {
  111. walk();
  112. }
  113. if (commander.watch) {
  114. var chokidar = util.requireChokidar();
  115. chokidar.watch(filenames, {
  116. persistent: true,
  117. ignoreInitial: true
  118. }).on("all", function (type, filename) {
  119. if (util.shouldIgnore(filename) || !util.canCompile(filename, commander.extensions)) return;
  120. if (type === "add" || type === "change") {
  121. util.log(type + " " + filename);
  122. try {
  123. walk();
  124. } catch (err) {
  125. console.error(err.stack);
  126. }
  127. }
  128. });
  129. }
  130. };
  131. if (filenames.length) {
  132. files();
  133. } else {
  134. stdin();
  135. }
  136. };