forked from shreeve/coffeescript-brunch
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
72 lines (60 loc) · 1.84 KB
/
index.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
72
'use strict';
const coffee = require('coffeescript');
const normalizeChecker = checker => {
if (typeof checker === 'function') return checker;
if (checker instanceof RegExp) return path => checker.test(path);
return () => false;
};
const formatError = err => {
// console.log(err.message);
const loc = err.location;
let msg = `${err.name}: ${err.message}\n${err.code}`;
if (loc) {
msg = `L${loc.first_line + 1}:${loc.first_column + 1} ${msg}`;
}
const error = new Error(msg);
error.name = '';
error.stack = err.stack;
return error;
};
class CoffeeScriptCompiler {
constructor(config) {
const plugin = config.plugins.coffeescript || {};
this.bare = plugin.bare;
this.sourceMaps = config.sourceMaps;
this.isVendor = normalizeChecker(config.conventions.vendor);
this.transpile = config.plugins.babel;
}
compile(file) {
const data = file.data;
const path = file.path;
let compiled;
const options = {
filename: path,
sourceFiles: [path],
bare: this.bare == null ? !this.isVendor(path) : this.bare,
literate: coffee.helpers.isLiterate(path),
};
if (this.sourceMaps === 'inline') {
options.inlineMap = true;
} else if (this.sourceMaps) {
options.sourceMap = true;
}
if (this.transpile) {
options.transpile = this.transpile;
}
try {
compiled = coffee.compile(data, options);
} catch (err) {
return Promise.reject(formatError(err));
}
const result = typeof compiled === 'string' ?
{data: compiled} :
{data: compiled.js, map: compiled.v3SourceMap};
return Promise.resolve(result);
}
}
CoffeeScriptCompiler.prototype.brunchPlugin = true;
CoffeeScriptCompiler.prototype.type = 'javascript';
CoffeeScriptCompiler.prototype.pattern = /\.(coffee(\.md)?|litcoffee)$/;
module.exports = CoffeeScriptCompiler;