97 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
"use strict";
 | 
						|
 | 
						|
var _stringify = require("babel-runtime/core-js/json/stringify");
 | 
						|
 | 
						|
var _stringify2 = _interopRequireDefault(_stringify);
 | 
						|
 | 
						|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
 | 
						|
 | 
						|
var outputFileSync = require("output-file-sync");
 | 
						|
var slash = require("slash");
 | 
						|
var path = require("path");
 | 
						|
var util = require("./util");
 | 
						|
var fs = require("fs");
 | 
						|
 | 
						|
module.exports = function (commander, filenames) {
 | 
						|
  function write(src, relative) {
 | 
						|
    relative = relative.replace(/\.(\w*?)$/, "") + ".js";
 | 
						|
 | 
						|
    var dest = path.join(commander.outDir, relative);
 | 
						|
 | 
						|
    var data = util.compile(src, {
 | 
						|
      sourceFileName: slash(path.relative(dest + "/..", src)),
 | 
						|
      sourceMapTarget: path.basename(relative)
 | 
						|
    });
 | 
						|
    if (!commander.copyFiles && data.ignored) return;
 | 
						|
 | 
						|
    if (data.map && commander.sourceMaps && commander.sourceMaps !== "inline") {
 | 
						|
      var mapLoc = dest + ".map";
 | 
						|
      data.code = util.addSourceMappingUrl(data.code, mapLoc);
 | 
						|
      outputFileSync(mapLoc, (0, _stringify2.default)(data.map));
 | 
						|
    }
 | 
						|
 | 
						|
    outputFileSync(dest, data.code);
 | 
						|
    util.chmod(src, dest);
 | 
						|
 | 
						|
    util.log(src + " -> " + dest);
 | 
						|
  }
 | 
						|
 | 
						|
  function handleFile(src, filename) {
 | 
						|
    if (util.shouldIgnore(src)) return;
 | 
						|
 | 
						|
    if (util.canCompile(filename, commander.extensions)) {
 | 
						|
      write(src, filename);
 | 
						|
    } else if (commander.copyFiles) {
 | 
						|
      var dest = path.join(commander.outDir, filename);
 | 
						|
      outputFileSync(dest, fs.readFileSync(src));
 | 
						|
      util.chmod(src, dest);
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  function handle(filename) {
 | 
						|
    if (!fs.existsSync(filename)) return;
 | 
						|
 | 
						|
    var stat = fs.statSync(filename);
 | 
						|
 | 
						|
    if (stat.isDirectory(filename)) {
 | 
						|
      var dirname = filename;
 | 
						|
 | 
						|
      util.readdir(dirname).forEach(function (filename) {
 | 
						|
        var src = path.join(dirname, filename);
 | 
						|
        handleFile(src, filename);
 | 
						|
      });
 | 
						|
    } else {
 | 
						|
      write(filename, filename);
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  if (!commander.skipInitialBuild) {
 | 
						|
    filenames.forEach(handle);
 | 
						|
  }
 | 
						|
 | 
						|
  if (commander.watch) {
 | 
						|
    var chokidar = util.requireChokidar();
 | 
						|
 | 
						|
    filenames.forEach(function (dirname) {
 | 
						|
      var watcher = chokidar.watch(dirname, {
 | 
						|
        persistent: true,
 | 
						|
        ignoreInitial: true,
 | 
						|
        awaitWriteFinish: {
 | 
						|
          stabilityThreshold: 50,
 | 
						|
          pollInterval: 10
 | 
						|
        }
 | 
						|
      });
 | 
						|
 | 
						|
      ["add", "change"].forEach(function (type) {
 | 
						|
        watcher.on(type, function (filename) {
 | 
						|
          var relative = path.relative(dirname, filename) || filename;
 | 
						|
          try {
 | 
						|
            handleFile(filename, relative);
 | 
						|
          } catch (err) {
 | 
						|
            console.error(err.stack);
 | 
						|
          }
 | 
						|
        });
 | 
						|
      });
 | 
						|
    });
 | 
						|
  }
 | 
						|
}; |