dir.js 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284
  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");
  28. var watcher = require("./watcher");
  29. function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
  30. function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
  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 && babelOptions.sourceMaps && babelOptions.sourceMaps !== "inline") {
  68. const mapLoc = dest + ".map";
  69. res.code = util.addSourceMappingUrl(res.code, mapLoc);
  70. res.map.file = _path().basename(relative);
  71. outputFileSync(mapLoc, JSON.stringify(res.map));
  72. }
  73. outputFileSync(dest, res.code);
  74. util.chmod(src, dest);
  75. if (cliOptions.verbose) {
  76. console.log(_path().relative(process.cwd(), src) + " -> " + dest);
  77. }
  78. return FILE_TYPE.COMPILED;
  79. } catch (err) {
  80. if (cliOptions.watch) {
  81. console.error(err);
  82. return FILE_TYPE.ERR_COMPILATION;
  83. }
  84. throw err;
  85. }
  86. });
  87. return _write.apply(this, arguments);
  88. }
  89. function getDest(filename, base) {
  90. if (cliOptions.relative) {
  91. return _path().join(base, cliOptions.outDir, filename);
  92. }
  93. return _path().join(cliOptions.outDir, filename);
  94. }
  95. function handleFile(_x4, _x5) {
  96. return _handleFile.apply(this, arguments);
  97. }
  98. function _handleFile() {
  99. _handleFile = _asyncToGenerator(function* (src, base) {
  100. const written = yield write(src, base);
  101. if (cliOptions.copyFiles && written === FILE_TYPE.NON_COMPILABLE || cliOptions.copyIgnored && written === FILE_TYPE.IGNORED) {
  102. const filename = _path().relative(base, src);
  103. const dest = getDest(filename, base);
  104. outputFileSync(dest, _fs().readFileSync(src));
  105. util.chmod(src, dest);
  106. }
  107. return written === FILE_TYPE.COMPILED;
  108. });
  109. return _handleFile.apply(this, arguments);
  110. }
  111. function handle(_x6) {
  112. return _handle.apply(this, arguments);
  113. }
  114. function _handle() {
  115. _handle = _asyncToGenerator(function* (filenameOrDir) {
  116. if (!_fs().existsSync(filenameOrDir)) return 0;
  117. const stat = _fs().statSync(filenameOrDir);
  118. if (stat.isDirectory()) {
  119. const dirname = filenameOrDir;
  120. let count = 0;
  121. const files = util.readdir(dirname, cliOptions.includeDotfiles);
  122. for (const filename of files) {
  123. const src = _path().join(dirname, filename);
  124. const written = yield handleFile(src, dirname);
  125. if (written) count += 1;
  126. }
  127. return count;
  128. } else {
  129. const filename = filenameOrDir;
  130. const written = yield handleFile(filename, _path().dirname(filename));
  131. return written ? 1 : 0;
  132. }
  133. });
  134. return _handle.apply(this, arguments);
  135. }
  136. let compiledFiles = 0;
  137. let startTime = null;
  138. const logSuccess = util.debounce(function () {
  139. if (startTime === null) {
  140. return;
  141. }
  142. const diff = process.hrtime(startTime);
  143. console.log(`Successfully compiled ${compiledFiles} ${compiledFiles !== 1 ? "files" : "file"} with Babel (${diff[0] * 1e3 + Math.round(diff[1] / 1e6)}ms).`);
  144. compiledFiles = 0;
  145. startTime = null;
  146. }, 100);
  147. if (cliOptions.watch) watcher.enable({
  148. enableGlobbing: true
  149. });
  150. if (!cliOptions.skipInitialBuild) {
  151. if (cliOptions.deleteDirOnStart) {
  152. util.deleteDir(cliOptions.outDir);
  153. }
  154. (((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, {
  155. recursive: true
  156. });
  157. startTime = process.hrtime();
  158. for (const filename of cliOptions.filenames) {
  159. compiledFiles += yield handle(filename);
  160. }
  161. if (!cliOptions.quiet) {
  162. logSuccess();
  163. logSuccess.flush();
  164. }
  165. }
  166. if (cliOptions.watch) {
  167. let processing = 0;
  168. const {
  169. filenames
  170. } = cliOptions;
  171. let getBase;
  172. if (filenames.length === 1) {
  173. const base = filenames[0];
  174. const absoluteBase = _path().resolve(base);
  175. getBase = filename => {
  176. return filename === absoluteBase ? _path().dirname(base) : base;
  177. };
  178. } else {
  179. const filenameToBaseMap = new Map(filenames.map(filename => {
  180. const absoluteFilename = _path().resolve(filename);
  181. return [absoluteFilename, _path().dirname(filename)];
  182. }));
  183. const absoluteFilenames = new Map(filenames.map(filename => {
  184. const absoluteFilename = _path().resolve(filename);
  185. return [absoluteFilename, filename];
  186. }));
  187. const {
  188. sep
  189. } = _path();
  190. getBase = filename => {
  191. const base = filenameToBaseMap.get(filename);
  192. if (base !== undefined) {
  193. return base;
  194. }
  195. for (const [absoluteFilenameOrDir, relative] of absoluteFilenames) {
  196. if (filename.startsWith(absoluteFilenameOrDir + sep)) {
  197. filenameToBaseMap.set(filename, relative);
  198. return relative;
  199. }
  200. }
  201. return "";
  202. };
  203. }
  204. filenames.forEach(filenameOrDir => {
  205. watcher.watch(filenameOrDir);
  206. });
  207. watcher.onFilesChange(_asyncToGenerator(function* (filenames) {
  208. processing++;
  209. if (startTime === null) startTime = process.hrtime();
  210. try {
  211. const written = yield Promise.all(filenames.map(filename => handleFile(filename, getBase(filename))));
  212. compiledFiles += written.filter(Boolean).length;
  213. } catch (err) {
  214. console.error(err);
  215. }
  216. processing--;
  217. if (processing === 0 && !cliOptions.quiet) logSuccess();
  218. }));
  219. }
  220. });
  221. return _ref.apply(this, arguments);
  222. }