-
-
Notifications
You must be signed in to change notification settings - Fork 5.6k
/
6to5
executable file
路143 lines (109 loc) 路 3.5 KB
/
6to5
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#!/usr/bin/env node
var commander = require("commander");
var readdir = require("fs-readdir-recursive");
var mkdirp = require("mkdirp");
var path = require("path");
var util = require("../lib/6to5/util");
var to5 = require("../lib/6to5/node");
var fs = require("fs");
var _ = require("lodash");
commander.option("-c, --source-maps-comment", "Generate source map and append it with a sourceMappingURL comment alongside the compiled output");
commander.option("-s, --source-maps", "Save source map alongside the compiled code when using --out-file and --out-dir flags");
//commander.option("-w, --watch", "Watch, only works with --out-dir");
var list = function (val) {
return val ? val.split(",") : [];
};
commander.option("-w, --whitelist [whitelist]", "Whitelist", list);
commander.option("-b, --blacklist [blacklist]", "Blacklist", list);
commander.option("-o, --out-file [out]", "Compile all input files into a single file");
commander.option("-d, --out-dir [out]", "Compile an input directory of modules into an output directory");
var pkg = require("../package.json");
commander.version(pkg.version);
commander.usage("[options] <files ...>");
commander.parse(process.argv);
//
var errors = [];
var filenames = commander.args;
if (!filenames.length) commander.help();
_.each(filenames, function (filename) {
if (!fs.existsSync(filename)) {
errors.push(filename + " doesn't exist");
}
});
if (commander.outFile && commander.outDir) {
errors.push("cannot have --out-file and --out-dir");
}
if (errors.length) {
console.error(errors.join(". "));
process.exit(2);
}
//
var readdirFilter = function (filename) {
return readdir(filename).filter(util.canCompile);
};
var mainOpts = {
blacklist: commander.blacklist,
whitelist: commander.whitelist,
sourceMap: commander.sourceMapsComment || commander.sourceMaps,
tolerant: commander.tolerant
};
var data = [];
var compile = function (filename) {
var opts = _.clone(mainOpts);
opts.filename = filename;
var file = fs.readFileSync(filename);
return to5.transform(file, opts);
};
if (commander.outDir) {
if (commander.sourceMaps) {
mainOpts.sourceMapObject = true;
}
var write = function (src, relative) {
var data = compile(src);
var dest = path.join(commander.outDir, relative);
var up = path.normalize(dest + "/..");
mkdirp.sync(up);
if (mainOpts.sourceMapObject) {
fs.writeFileSync(dest + ".map", data.map.toJSON());
data = data.code;
}
fs.writeFileSync(dest, data);
console.log(src + " -> " + dest);
};
var handle = function (filename) {
var stat = fs.statSync(filename);
if (stat.isDirectory(filename)) {
var dirname = filename;
_.each(readdirFilter(dirname), function (filename) {
write(path.join(dirname, filename), filename);
});
} else {
write(filename, filename);
}
};
_.each(filenames, handle);
} else {
var data = [];
var _filenames = filenames;
filenames = [];
_.each(_filenames, function (filename) {
var stat = fs.statSync(filename);
if (stat.isDirectory()) {
var dirname = filename;
_.each(readdirFilter(filename), function (filename) {
filenames.push(path.join(dirname, filename));
});
} else {
filenames.push(filename);
}
});
_.each(filenames, function (filename) {
data.push(compile(filename) + "\n");
});
data = data.join("");
if (commander.outFile) {
fs.writeFileSync(commander.outFile, data);
} else {
console.log(data);
}
}