333
schangxiang@126.com
2025-09-19 18966e02fb573c7e2bb0c6426ed792b38b910940
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
"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;
 
 */