dir.js 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = _default;
  6. function _slash() {
  7. const data = require("slash");
  8. _slash = function () {
  9. return data;
  10. };
  11. return data;
  12. }
  13. function _path() {
  14. const data = require("path");
  15. _path = function () {
  16. return data;
  17. };
  18. return data;
  19. }
  20. function _fs() {
  21. const data = require("fs");
  22. _fs = function () {
  23. return data;
  24. };
  25. return data;
  26. }
  27. var util = require("./util.js");
  28. var watcher = require("./watcher.js");
  29. 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); }
  30. 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); }); }; }
  31. const FILE_TYPE = Object.freeze({
  32. NON_COMPILABLE: "NON_COMPILABLE",
  33. COMPILED: "COMPILED",
  34. IGNORED: "IGNORED",
  35. ERR_COMPILATION: "ERR_COMPILATION"
  36. });
  37. function outputFileSync(filePath, data) {
  38. (((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(filePath), {
  39. recursive: true
  40. });
  41. _fs().writeFileSync(filePath, data);
  42. }
  43. function _default(_x) {
  44. return _ref.apply(this, arguments);
  45. }
  46. function _ref() {
  47. _ref = _asyncToGenerator(function* ({
  48. cliOptions,
  49. babelOptions
  50. }) {
  51. function write(_x2, _x3) {
  52. return _write.apply(this, arguments);
  53. }
  54. function _write() {
  55. _write = _asyncToGenerator(function* (src, base) {
  56. let relative = _path().relative(base, src);
  57. if (!util.isCompilableExtension(relative, cliOptions.extensions)) {
  58. return FILE_TYPE.NON_COMPILABLE;
  59. }
  60. relative = util.withExtension(relative, cliOptions.keepFileExtension ? _path().extname(relative) : cliOptions.outFileExtension);
  61. const dest = getDest(relative, base);
  62. try {
  63. const res = yield util.compile(src, Object.assign({}, babelOptions, {
  64. sourceFileName: _slash()(_path().relative(dest + "/..", src))
  65. }));
  66. if (!res) return FILE_TYPE.IGNORED;
  67. if (res.map) {
  68. let outputMap = false;
  69. if (babelOptions.sourceMaps && babelOptions.sourceMaps !== "inline") {
  70. outputMap = "external";
  71. } else if (babelOptions.sourceMaps == null) {
  72. outputMap = util.hasDataSourcemap(res.code) ? "external" : "both";
  73. }
  74. if (outputMap) {
  75. const mapLoc = dest + ".map";
  76. if (outputMap === "external") {
  77. res.code = util.addSourceMappingUrl(res.code, mapLoc);
  78. }
  79. res.map.file = _path().basename(relative);
  80. outputFileSync(mapLoc, JSON.stringify(res.map));
  81. }
  82. }
  83. outputFileSync(dest, res.code);
  84. util.chmod(src, dest);
  85. if (cliOptions.verbose) {
  86. console.log(_path().relative(process.cwd(), src) + " -> " + dest);
  87. }
  88. return FILE_TYPE.COMPILED;
  89. } catch (err) {
  90. if (cliOptions.watch) {
  91. console.error(err);
  92. return FILE_TYPE.ERR_COMPILATION;
  93. }
  94. throw err;
  95. }
  96. });
  97. return _write.apply(this, arguments);
  98. }
  99. function getDest(filename, base) {
  100. if (cliOptions.relative) {
  101. return _path().join(base, cliOptions.outDir, filename);
  102. }
  103. return _path().join(cliOptions.outDir, filename);
  104. }
  105. function handleFile(_x4, _x5) {
  106. return _handleFile.apply(this, arguments);
  107. }
  108. function _handleFile() {
  109. _handleFile = _asyncToGenerator(function* (src, base) {
  110. const written = yield write(src, base);
  111. if (cliOptions.copyFiles && written === FILE_TYPE.NON_COMPILABLE || cliOptions.copyIgnored && written === FILE_TYPE.IGNORED) {
  112. const filename = _path().relative(base, src);
  113. const dest = getDest(filename, base);
  114. outputFileSync(dest, _fs().readFileSync(src));
  115. util.chmod(src, dest);
  116. }
  117. return written === FILE_TYPE.COMPILED;
  118. });
  119. return _handleFile.apply(this, arguments);
  120. }
  121. function handle(_x6) {
  122. return _handle.apply(this, arguments);
  123. }
  124. function _handle() {
  125. _handle = _asyncToGenerator(function* (filenameOrDir) {
  126. if (!_fs().existsSync(filenameOrDir)) return 0;
  127. const stat = _fs().statSync(filenameOrDir);
  128. if (stat.isDirectory()) {
  129. const dirname = filenameOrDir;
  130. let count = 0;
  131. const files = util.readdir(dirname, cliOptions.includeDotfiles);
  132. for (const filename of files) {
  133. const written = yield handleFile(filename, dirname);
  134. if (written) count += 1;
  135. }
  136. return count;
  137. } else {
  138. const filename = filenameOrDir;
  139. const written = yield handleFile(filename, _path().dirname(filename));
  140. return written ? 1 : 0;
  141. }
  142. });
  143. return _handle.apply(this, arguments);
  144. }
  145. let compiledFiles = 0;
  146. let startTime = null;
  147. const logSuccess = util.debounce(function () {
  148. if (startTime === null) {
  149. return;
  150. }
  151. const diff = process.hrtime(startTime);
  152. console.log(`Successfully compiled ${compiledFiles} ${compiledFiles !== 1 ? "files" : "file"} with Babel (${diff[0] * 1e3 + Math.round(diff[1] / 1e6)}ms).`);
  153. compiledFiles = 0;
  154. startTime = null;
  155. }, 100);
  156. if (cliOptions.watch) watcher.enable({
  157. enableGlobbing: true
  158. });
  159. if (!cliOptions.skipInitialBuild) {
  160. if (cliOptions.deleteDirOnStart) {
  161. util.deleteDir(cliOptions.outDir);
  162. }
  163. (((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)(cliOptions.outDir, {
  164. recursive: true
  165. });
  166. startTime = process.hrtime();
  167. for (const filename of cliOptions.filenames) {
  168. compiledFiles += yield handle(filename);
  169. }
  170. if (!cliOptions.quiet) {
  171. logSuccess();
  172. logSuccess.flush();
  173. }
  174. }
  175. if (cliOptions.watch) {
  176. let processing = 0;
  177. const {
  178. filenames
  179. } = cliOptions;
  180. let getBase;
  181. if (filenames.length === 1) {
  182. const base = filenames[0];
  183. const absoluteBase = _path().resolve(base);
  184. getBase = filename => {
  185. return filename === absoluteBase ? _path().dirname(base) : base;
  186. };
  187. } else {
  188. const filenameToBaseMap = new Map(filenames.map(filename => {
  189. const absoluteFilename = _path().resolve(filename);
  190. return [absoluteFilename, _path().dirname(filename)];
  191. }));
  192. const absoluteFilenames = new Map(filenames.map(filename => {
  193. const absoluteFilename = _path().resolve(filename);
  194. return [absoluteFilename, filename];
  195. }));
  196. const {
  197. sep
  198. } = _path();
  199. getBase = filename => {
  200. const base = filenameToBaseMap.get(filename);
  201. if (base !== undefined) {
  202. return base;
  203. }
  204. for (const [absoluteFilenameOrDir, relative] of absoluteFilenames) {
  205. if (filename.startsWith(absoluteFilenameOrDir + sep)) {
  206. filenameToBaseMap.set(filename, relative);
  207. return relative;
  208. }
  209. }
  210. return "";
  211. };
  212. }
  213. filenames.forEach(filenameOrDir => {
  214. watcher.watch(filenameOrDir);
  215. });
  216. watcher.startWatcher();
  217. watcher.onFilesChange(_asyncToGenerator(function* (filenames) {
  218. processing++;
  219. if (startTime === null) startTime = process.hrtime();
  220. try {
  221. const written = yield Promise.all(filenames.map(filename => handleFile(filename, getBase(filename))));
  222. compiledFiles += written.filter(Boolean).length;
  223. } catch (err) {
  224. console.error(err);
  225. }
  226. processing--;
  227. if (processing === 0 && !cliOptions.quiet) logSuccess();
  228. }));
  229. }
  230. });
  231. return _ref.apply(this, arguments);
  232. }
  233. //# sourceMappingURL=dir.js.map