123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- "use strict";
- var _stringify = require("babel-runtime/core-js/json/stringify");
- var _stringify2 = _interopRequireDefault(_stringify);
- var _set = require("babel-runtime/core-js/set");
- var _set2 = _interopRequireDefault(_set);
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var convertSourceMap = require("convert-source-map");
- var sourceMap = require("source-map");
- var slash = require("slash");
- var path = require("path");
- var util = require("./util");
- var fs = require("fs");
- module.exports = function (commander, filenames, opts) {
- if (commander.sourceMaps === "inline") {
- opts.sourceMaps = true;
- }
- var results = [];
- var buildResult = function buildResult() {
- var map = new sourceMap.SourceMapGenerator({
- file: path.basename(commander.outFile || "") || "stdout",
- sourceRoot: opts.sourceRoot
- });
- var code = "";
- var offset = 0;
- results.forEach(function (result) {
- code += result.code + "\n";
- if (result.map) {
- var consumer = new sourceMap.SourceMapConsumer(result.map);
- var sources = new _set2.default();
- consumer.eachMapping(function (mapping) {
- if (mapping.source != null) sources.add(mapping.source);
- map.addMapping({
- generated: {
- line: mapping.generatedLine + offset,
- column: mapping.generatedColumn
- },
- source: mapping.source,
- original: mapping.source == null ? null : {
- line: mapping.originalLine,
- column: mapping.originalColumn
- }
- });
- });
- sources.forEach(function (source) {
- var content = consumer.sourceContentFor(source, true);
- if (content !== null) {
- map.setSourceContent(source, content);
- }
- });
- offset = code.split("\n").length - 1;
- }
- });
- if (commander.sourceMaps === "inline" || !commander.outFile && commander.sourceMaps) {
- code += "\n" + convertSourceMap.fromObject(map).toComment();
- }
- return {
- map: map,
- code: code
- };
- };
- var output = function output() {
- var result = buildResult();
- if (commander.outFile) {
- if (commander.sourceMaps && commander.sourceMaps !== "inline") {
- var mapLoc = commander.outFile + ".map";
- result.code = util.addSourceMappingUrl(result.code, mapLoc);
- fs.writeFileSync(mapLoc, (0, _stringify2.default)(result.map));
- }
- fs.writeFileSync(commander.outFile, result.code);
- } else {
- process.stdout.write(result.code + "\n");
- }
- };
- var stdin = function stdin() {
- var code = "";
- process.stdin.setEncoding("utf8");
- process.stdin.on("readable", function () {
- var chunk = process.stdin.read();
- if (chunk !== null) code += chunk;
- });
- process.stdin.on("end", function () {
- results.push(util.transform(commander.filename, code, {
- sourceFileName: "stdin"
- }));
- output();
- });
- };
- var walk = function walk() {
- var _filenames = [];
- results = [];
- filenames.forEach(function (filename) {
- if (!fs.existsSync(filename)) return;
- var stat = fs.statSync(filename);
- if (stat.isDirectory()) {
- var dirname = filename;
- util.readdirFilter(filename).forEach(function (filename) {
- _filenames.push(path.join(dirname, filename));
- });
- } else {
- _filenames.push(filename);
- }
- });
- _filenames.forEach(function (filename) {
- if (util.shouldIgnore(filename)) return;
- var sourceFilename = filename;
- if (commander.outFile) {
- sourceFilename = path.relative(path.dirname(commander.outFile), sourceFilename);
- }
- sourceFilename = slash(sourceFilename);
- var data = util.compile(filename, {
- sourceFileName: sourceFilename
- });
- if (data.ignored) return;
- results.push(data);
- });
- output();
- };
- var files = function files() {
- if (!commander.skipInitialBuild) {
- walk();
- }
- if (commander.watch) {
- var chokidar = util.requireChokidar();
- chokidar.watch(filenames, {
- persistent: true,
- ignoreInitial: true,
- awaitWriteFinish: {
- stabilityThreshold: 50,
- pollInterval: 10
- }
- }).on("all", function (type, filename) {
- if (util.shouldIgnore(filename) || !util.canCompile(filename, commander.extensions)) return;
- if (type === "add" || type === "change") {
- util.log(type + " " + filename);
- try {
- walk();
- } catch (err) {
- console.error(err.stack);
- }
- }
- });
- }
- };
- if (filenames.length) {
- files();
- } else {
- stdin();
- }
- };
|