“use strict”; var coffee = require(“coffee-script”); var fs = require(“fs”); var transfer = require(“../lib/multi-stage-sourcemap”); var convert = require('convert-source-map'); var sourceMap = require(“source-map”); var esprima = require(“esprima”),
escodegen = require("escodegen"), esmangle = require("esmangle");
// coffee -> js -> min.jsb var filepath = “./origin.coffee”; var code = fs.readFileSync(filepath, “utf-8”); var result_coffee = coffee.compile(code, {
sourceMap: true
}); var ast = esprima.parse(result_coffee.js, {
loc: true, source: filepath
}); // Get optimized AST var optimized = esmangle.optimize(ast, null); // gets mangled AST var result_esmangle = esmangle.mangle(optimized); var result_escodegen = escodegen.generate(result_esmangle, {
sourceMap: true, // Settings source in esprima's options gives us sourceMapWithCode: true // Get both code and source map
});
fs.writeFileSync(“one_pass_result.js”, result_escodegen.code + “n” + convert.fromObject(result_escodegen.map).toComment(), “utf-8”); // multi level source map var re_map = JSON.parse(result_coffee.v3SourceMap); re_map.file = filepath; var newSource = transfer({
fromSourceMap: result_escodegen.map.toString(), toSourceMap: JSON.stringify(re_map)
}); var comment = convert.fromObject(JSON.parse(newSource)).toComment(); fs.writeFileSync(“two_pass_result.js”, result_escodegen.code + “n” + comment, “utf-8”);
/*
var coffee = require('coffee-script'),
originalCompileFile = coffee._compileFile, minimatch = require('minimatch'), espowerSource = require('espower-source');
var sourceMap = require(“source-map”); var Generator = sourceMap.SourceMapGenerator; var Consumer = sourceMap.SourceMapConsumer;
var transfer = require(“multi-stage-sourcemap”).transfer; var convert = require('convert-source-map'); function espowerCoffee(options) {
'use strict'; var separator = (options.pattern.lastIndexOf('/', 0) === 0) ? '' : '/', pattern = options.cwd + separator + options.pattern; coffee._compileFile = function (filepath, sourceMap) { var answer = originalCompileFile(filepath, sourceMap); if (minimatch(filepath, pattern)) { if (sourceMap) { answer.js = espowerSource(answer.js, filepath, options.espowerOptions); var endSource = convert.fromSource(answer.js); var map = JSON.parse(answer.v3SourceMap); map.file = filepath; var newSource = transfer({ fromSourceMap: JSON.stringify(endSource.sourcemap), toSourceMap: JSON.stringify(map) }); var comment = convert.fromObject(JSON.parse(newSource)).toComment(); answer.js = convert.removeComments(answer.js) + comment + "\n"; } else { answer = espowerSource(answer, filepath, options.espowerOptions); } } return answer; }; coffee.register();
}
module.exports = espowerCoffee;
*/