file.js 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = _default;
  6. function _convertSourceMap() {
  7. const data = require("convert-source-map");
  8. _convertSourceMap = function () {
  9. return data;
  10. };
  11. return data;
  12. }
  13. function _traceMapping() {
  14. const data = require("@jridgewell/trace-mapping");
  15. _traceMapping = function () {
  16. return data;
  17. };
  18. return data;
  19. }
  20. function _slash() {
  21. const data = require("slash");
  22. _slash = function () {
  23. return data;
  24. };
  25. return data;
  26. }
  27. function _path() {
  28. const data = require("path");
  29. _path = function () {
  30. return data;
  31. };
  32. return data;
  33. }
  34. function _fs() {
  35. const data = require("fs");
  36. _fs = function () {
  37. return data;
  38. };
  39. return data;
  40. }
  41. var util = require("./util.js");
  42. var watcher = require("./watcher.js");
  43. function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
  44. function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
  45. function _default(_x) {
  46. return _ref.apply(this, arguments);
  47. }
  48. function _ref() {
  49. _ref = _asyncToGenerator(function* ({
  50. cliOptions,
  51. babelOptions
  52. }) {
  53. function buildResult(fileResults) {
  54. const mapSections = [];
  55. let code = "";
  56. let offset = 0;
  57. let hasRawMap = false;
  58. for (const result of fileResults) {
  59. if (!result) continue;
  60. hasRawMap = !!result.map;
  61. mapSections.push({
  62. offset: {
  63. line: offset,
  64. column: 0
  65. },
  66. map: result.map || {
  67. version: 3,
  68. names: [],
  69. sources: [],
  70. mappings: []
  71. }
  72. });
  73. code += result.code + "\n";
  74. offset += countNewlines(result.code) + 1;
  75. }
  76. const map = new (_traceMapping().AnyMap)({
  77. version: 3,
  78. file: cliOptions.sourceMapTarget || _path().basename(cliOptions.outFile || "") || "stdout",
  79. sections: mapSections
  80. });
  81. map.sourceRoot = babelOptions.sourceRoot;
  82. if (babelOptions.sourceMaps === "inline" || !cliOptions.outFile && babelOptions.sourceMaps) {
  83. code += "\n" + _convertSourceMap().fromObject((0, _traceMapping().encodedMap)(map)).toComment();
  84. }
  85. return {
  86. map: map,
  87. code: code,
  88. hasRawMap: hasRawMap
  89. };
  90. }
  91. function countNewlines(code) {
  92. let count = 0;
  93. let index = -1;
  94. while ((index = code.indexOf("\n", index + 1)) !== -1) {
  95. count++;
  96. }
  97. return count;
  98. }
  99. function output(fileResults) {
  100. const result = buildResult(fileResults);
  101. if (cliOptions.outFile) {
  102. (((v, w) => (v = v.split("."), w = w.split("."), +v[0] > +w[0] || v[0] == w[0] && +v[1] >= +w[1]))(process.versions.node, "10.12") ? _fs().mkdirSync : require("make-dir").sync)(_path().dirname(cliOptions.outFile), {
  103. recursive: true
  104. });
  105. let outputMap = false;
  106. if (babelOptions.sourceMaps && babelOptions.sourceMaps !== "inline") {
  107. outputMap = "external";
  108. } else if (babelOptions.sourceMaps == null && result.hasRawMap) {
  109. outputMap = util.hasDataSourcemap(result.code) ? "external" : "both";
  110. }
  111. if (outputMap) {
  112. const mapLoc = cliOptions.outFile + ".map";
  113. if (outputMap === "external") {
  114. result.code = util.addSourceMappingUrl(result.code, mapLoc);
  115. }
  116. _fs().writeFileSync(mapLoc, JSON.stringify((0, _traceMapping().encodedMap)(result.map)));
  117. }
  118. _fs().writeFileSync(cliOptions.outFile, result.code);
  119. } else {
  120. process.stdout.write(result.code + "\n");
  121. }
  122. }
  123. function readStdin() {
  124. return new Promise((resolve, reject) => {
  125. let code = "";
  126. process.stdin.setEncoding("utf8");
  127. process.stdin.on("readable", function () {
  128. const chunk = process.stdin.read();
  129. if (chunk !== null) code += chunk;
  130. });
  131. process.stdin.on("end", function () {
  132. resolve(code);
  133. });
  134. process.stdin.on("error", reject);
  135. });
  136. }
  137. function stdin() {
  138. return _stdin.apply(this, arguments);
  139. }
  140. function _stdin() {
  141. _stdin = _asyncToGenerator(function* () {
  142. const code = yield readStdin();
  143. const res = yield util.transformRepl(cliOptions.filename, code, Object.assign({}, babelOptions, {
  144. sourceFileName: "stdin"
  145. }));
  146. output([res]);
  147. });
  148. return _stdin.apply(this, arguments);
  149. }
  150. function walk(_x2) {
  151. return _walk.apply(this, arguments);
  152. }
  153. function _walk() {
  154. _walk = _asyncToGenerator(function* (filenames) {
  155. const _filenames = [];
  156. filenames.forEach(function (filename) {
  157. if (!_fs().existsSync(filename)) return;
  158. const stat = _fs().statSync(filename);
  159. if (stat.isDirectory()) {
  160. _filenames.push(...util.readdirForCompilable(filename, cliOptions.includeDotfiles, cliOptions.extensions));
  161. } else {
  162. _filenames.push(filename);
  163. }
  164. });
  165. const results = yield Promise.all(_filenames.map(_asyncToGenerator(function* (filename) {
  166. let sourceFilename = filename;
  167. if (cliOptions.outFile) {
  168. sourceFilename = _path().relative(_path().dirname(cliOptions.outFile), sourceFilename);
  169. }
  170. sourceFilename = _slash()(sourceFilename);
  171. try {
  172. return yield util.compile(filename, Object.assign({}, babelOptions, {
  173. sourceFileName: sourceFilename,
  174. sourceMaps: babelOptions.sourceMaps === "inline" ? true : babelOptions.sourceMaps
  175. }));
  176. } catch (err) {
  177. if (!cliOptions.watch) {
  178. throw err;
  179. }
  180. console.error(err);
  181. return null;
  182. }
  183. })));
  184. output(results);
  185. });
  186. return _walk.apply(this, arguments);
  187. }
  188. function files(_x3) {
  189. return _files.apply(this, arguments);
  190. }
  191. function _files() {
  192. _files = _asyncToGenerator(function* (filenames) {
  193. if (cliOptions.watch) {
  194. watcher.enable({
  195. enableGlobbing: false
  196. });
  197. }
  198. if (!cliOptions.skipInitialBuild) {
  199. yield walk(filenames);
  200. }
  201. if (cliOptions.watch) {
  202. filenames.forEach(watcher.watch);
  203. watcher.startWatcher();
  204. watcher.onFilesChange((changes, event, cause) => {
  205. const actionableChange = changes.some(filename => util.isCompilableExtension(filename, cliOptions.extensions) || filenames.includes(filename));
  206. if (!actionableChange) return;
  207. if (cliOptions.verbose) {
  208. console.log(`${event} ${cause}`);
  209. }
  210. walk(filenames).catch(err => {
  211. console.error(err);
  212. });
  213. });
  214. }
  215. });
  216. return _files.apply(this, arguments);
  217. }
  218. if (cliOptions.filenames.length) {
  219. yield files(cliOptions.filenames);
  220. } else {
  221. yield stdin();
  222. }
  223. });
  224. return _ref.apply(this, arguments);
  225. }
  226. //# sourceMappingURL=file.js.map