"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;
|
|
*/
|