forked from babel/babel-sublime
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbabel-transform.js
71 lines (60 loc) · 1.83 KB
/
babel-transform.js
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
'use strict';
var path = require('path');
var resolve = require('resolve');
var stdin = require('get-stdin');
var opts = JSON.parse(process.argv[2]);
if (!opts.options) opts.options = {};
if (opts.filename) opts.options.filename = opts.filename;
(function(done) {
if (opts.use_local_babel && opts.filename) {
findBabel(path.dirname(opts.filename), resolveGlobal);
} else {
resolveGlobal();
}
function findBabel(basedir, next) {
var ropts = {basedir: basedir};
resolve('babel', ropts, function(err, file, pkg) {
if (!err) return done(require(file), {file: file, pkg: pkg});
resolve('babel-core', ropts, function(err2, file2, pkg2) {
if (!err2) return done(require(file2), {file: file2, pkg: pkg2});
next();
});
});
}
function resolveGlobal() {
findBabel(opts.node_modules, function() {
throw new Error('Couldn\'t find babel or babel-core');
});
}
}(function(babel, row) {
var debugLog = '';
if (opts.debug) {
debugLog = '\n\n';
debugLog += '// babel@' + row.pkg.version + ' (' + row.file + ')\n';
debugLog += '// filename: ' + opts.filename + '\n';
// debugLog += '// ' + JSON.stringify(opts) + '\n';
}
stdin(function (data) {
try {
var code = babel.transform(data, opts.options).code;
if (opts.debug) {
code += debugLog;
}
if (opts.newline_at_eof && code[code.length - 1] !== '\n') {
code += '\n';
}
process.stdout.write(code);
} catch (err) {
var message = err.name;
if (err.codeFrame) { // [email protected]
message += [err.message, err.codeFrame].filter(Boolean).join('\n\n');
} else { // [email protected]
message += err.annotated || err.message;
}
if (opts.debug) {
message += debugLog;
}
process.stderr.write(message);
}
});
}));