transform-tree.js
991 Bytes
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
var recast = require('recast');
var rewritePattern = require('./rewrite-pattern.js');
var types = recast.types;
var visitor = types.PathVisitor.fromMethodsObject({
// This method is called for any AST node whose `type` is `Literal`.
'visitLiteral': function(path) {
var node = path.value;
if (!node.regex) {
return false;
}
var flags = node.regex.flags;
if (flags.indexOf('u') == -1) {
return false;
}
var newPattern = rewritePattern(node.regex.pattern, flags);
var newFlags = flags.replace('u', '');
var result = '/' + newPattern + '/' + newFlags;
node.regex = {
'pattern': newPattern,
'flags': newFlags
}
node.raw = result;
node.value = {
'toString': function() {
return result;
}
};
// Return `false` to indicate that the traversal need not continue any
// further down this subtree. (`Literal`s don’t have descendants anyway.)
return false;
}
});
module.exports = function(node) {
return types.visit(node, visitor);
};