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 | 1
1
1
1
1
1
1
1
154
154
154
153
1
154
154
154
154
154
154
154
154
154
30
30
30
30
30
124
124
124
114
114
114
114
114
144
1
144
2
2
2
2
2
2
2
1
308
3
1
1
1
20
| module.exports = transform;
var Transformer = require("./transformer");
var sourceMap = require("source-map");
var recast = require("recast");
var File = require("./file");
var util = require("./util");
var _ = require("lodash");
function transform(code, opts) {
opts = opts || {};
code = (code || "") + "";
var file = new File(opts);
return file.parse(code);
}
transform.test = function (task, assert) {
var actual = task.actual;
var expect = task.expect;
var opts = task.options;
var exec = task.exec;
var getOpts = function (filename) {
return _.merge({ filename: filename }, opts);
};
var execCode = exec.code.trim();
var result;
if (execCode) {
result = transform(execCode, getOpts(exec.filename));
execCode = result.code;
require("./polyfill");
var fn = new Function("assert", execCode);
fn(assert);
} else {
var actualCode = actual.code.trim();
var expectCode = expect.code.trim();
result = transform(actualCode, getOpts(actual.filename));
actualCode = recast.prettyPrint(result.ast).code;
var expectAst = util.parse(expect, expectCode);
var expectResult = recast.prettyPrint(expectAst);
expectCode = expectResult.code;
assert.equal(actualCode, expectCode);
}
if (task.sourceMap) {
assert.deepEqual(task.sourceMap, result.map);
}
if (task.sourceMappings) {
var consumer = new sourceMap.SourceMapConsumer(result.map);
_.each(task.sourceMappings, function (mapping, i) {
var generated = mapping.generated;
var original = mapping.original;
var pos = consumer.originalPositionFor(generated);
var msg = "source mapping " + i + " - generated: " + generated.line + ":" + generated.column;
assert.equal(pos.line + ":" + pos.column, original.line + ":" + original.column, msg);
});
}
};
transform._ensureTransformerNames = function (type, keys) {
_.each(keys, function (key) {
if (key[0] === "_" || !_.has(transform.transformers, key)) {
throw new ReferenceError("unknown transformer " + key + " specified in " + type);
}
});
};
transform.transformers = {
modules: require("./transformers/modules"),
computedPropertyNames: require("./transformers/computed-property-names"),
propertyNameShorthand: require("./transformers/property-name-shorthand"),
constants: require("./transformers/constants"),
arrayComprehension: require("./transformers/array-comprehension"),
arrowFunctions: require("./transformers/arrow-functions"),
classes: require("./transformers/classes"),
spread: require("./transformers/spread"),
templateLiterals: require("./transformers/template-literals"),
propertyMethodAssignment: require("./transformers/property-method-assignment"),
defaultParameters: require("./transformers/default-parameters"),
letScoping: require("./transformers/let-scoping"),
restParameters: require("./transformers/rest-parameters"),
destructuring: require("./transformers/destructuring"),
forOf: require("./transformers/for-of"),
unicodeRegex: require("./transformers/unicode-regex"),
generators: require("./transformers/generators"),
jsx: require("./transformers/jsx"),
_aliasFunctions: require("./transformers/_alias-functions"),
_blockHoist: require("./transformers/_block-hoist")
};
_.each(transform.transformers, function (transformer, key) {
transform.transformers[key] = new Transformer(key, transformer);
});
|