Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
81153 views
1
/*global exports:true*/
2
var es6ArrowFunctions = require('jstransform/visitors/es6-arrow-function-visitors');
3
var es6Classes = require('jstransform/visitors/es6-class-visitors');
4
var es6Destructuring = require('jstransform/visitors/es6-destructuring-visitors');
5
var es6ObjectConciseMethod = require('jstransform/visitors/es6-object-concise-method-visitors');
6
var es6ObjectShortNotation = require('jstransform/visitors/es6-object-short-notation-visitors');
7
var es6RestParameters = require('jstransform/visitors/es6-rest-param-visitors');
8
var es6Templates = require('jstransform/visitors/es6-template-visitors');
9
var es7SpreadProperty = require('jstransform/visitors/es7-spread-property-visitors');
10
var react = require('./transforms/react');
11
var reactDisplayName = require('./transforms/reactDisplayName');
12
13
/**
14
* Map from transformName => orderedListOfVisitors.
15
*/
16
var transformVisitors = {
17
'es6-arrow-functions': es6ArrowFunctions.visitorList,
18
'es6-classes': es6Classes.visitorList,
19
'es6-destructuring': es6Destructuring.visitorList,
20
'es6-object-concise-method': es6ObjectConciseMethod.visitorList,
21
'es6-object-short-notation': es6ObjectShortNotation.visitorList,
22
'es6-rest-params': es6RestParameters.visitorList,
23
'es6-templates': es6Templates.visitorList,
24
'es7-spread-property': es7SpreadProperty.visitorList,
25
'react': react.visitorList.concat(reactDisplayName.visitorList)
26
};
27
28
var transformSets = {
29
'harmony': [
30
'es6-arrow-functions',
31
'es6-object-concise-method',
32
'es6-object-short-notation',
33
'es6-classes',
34
'es6-rest-params',
35
'es6-templates',
36
'es6-destructuring',
37
'es7-spread-property'
38
],
39
'react': [
40
'react'
41
]
42
};
43
44
/**
45
* Specifies the order in which each transform should run.
46
*/
47
var transformRunOrder = [
48
'es6-arrow-functions',
49
'es6-object-concise-method',
50
'es6-object-short-notation',
51
'es6-classes',
52
'es6-rest-params',
53
'es6-templates',
54
'es6-destructuring',
55
'es7-spread-property',
56
'react'
57
];
58
59
/**
60
* Given a list of transform names, return the ordered list of visitors to be
61
* passed to the transform() function.
62
*
63
* @param {array?} excludes
64
* @return {array}
65
*/
66
function getAllVisitors(excludes) {
67
var ret = [];
68
for (var i = 0, il = transformRunOrder.length; i < il; i++) {
69
if (!excludes || excludes.indexOf(transformRunOrder[i]) === -1) {
70
ret = ret.concat(transformVisitors[transformRunOrder[i]]);
71
}
72
}
73
return ret;
74
}
75
76
/**
77
* Given a list of visitor set names, return the ordered list of visitors to be
78
* passed to jstransform.
79
*
80
* @param {array}
81
* @return {array}
82
*/
83
function getVisitorsBySet(sets) {
84
var visitorsToInclude = sets.reduce(function(visitors, set) {
85
if (!transformSets.hasOwnProperty(set)) {
86
throw new Error('Unknown visitor set: ' + set);
87
}
88
transformSets[set].forEach(function(visitor) {
89
visitors[visitor] = true;
90
});
91
return visitors;
92
}, {});
93
94
var visitorList = [];
95
for (var i = 0; i < transformRunOrder.length; i++) {
96
if (visitorsToInclude.hasOwnProperty(transformRunOrder[i])) {
97
visitorList = visitorList.concat(transformVisitors[transformRunOrder[i]]);
98
}
99
}
100
101
return visitorList;
102
}
103
104
exports.getVisitorsBySet = getVisitorsBySet;
105
exports.getAllVisitors = getAllVisitors;
106
exports.transformVisitors = transformVisitors;
107
108