UNPKG

5.21 kBJavaScriptView Raw
1var syntax = module.exports;
2
3syntax.ArrayExpression = require('./ArrayExpression');
4syntax.AssignmentExpression = require('./AssignmentExpression');
5syntax.BinaryExpression = require('./BinaryExpression');
6syntax.BlockStatement = require('./BlockStatement');
7syntax.BreakStatement = require('./BreakStatement');
8syntax.CallExpression = require('./CallExpression');
9syntax.CatchClause = require('./CatchClause');
10syntax.ConditionalExpression = require('./ConditionalExpression');
11syntax.ContinueStatement = require('./ContinueStatement');
12syntax.EmptyStatement = require('./EmptyStatement');
13syntax.ExpressionStatement = require('./ExpressionStatement');
14syntax.ForInStatement = require('./ForInStatement');
15syntax.ForStatement = require('./ForStatement');
16syntax.FunctionDeclaration = require('./FunctionDeclaration');
17syntax.FunctionExpression = require('./FunctionExpression');
18syntax.Identifier = require('./Identifier');
19syntax.IfStatement = require('./IfStatement');
20syntax.Literal = require('./Literal');
21syntax.LogicalExpression = require('./LogicalExpression');
22syntax.MemberExpression = require('./MemberExpression');
23syntax.NewExpression = require('./NewExpression');
24syntax.ObjectExpression = require('./ObjectExpression');
25syntax.Program = require('./Program');
26syntax.Property = require('./Property');
27syntax.ReturnStatement = require('./ReturnStatement');
28syntax.SequenceExpression = require('./SequenceExpression');
29syntax.SwitchStatement = require('./SwitchStatement');
30syntax.ThisExpression = require('./ThisExpression');
31syntax.ThrowStatement = require('./ThrowStatement');
32syntax.TryStatement = require('./TryStatement');
33syntax.UnaryExpression = require('./UnaryExpression');
34syntax.UpdateExpression = require('./UpdateExpression');
35syntax.VariableDeclaration = require('./VariableDeclaration');
36syntax.VariableDeclarator = require('./VariableDeclarator');
37syntax.WhileStatement = require('./WhileStatement');
38
39syntax.factory = function (node) {
40 switch (node.type) {
41 case 'ArrayExpression':
42 return new syntax.ArrayExpression(node.elements);
43 case 'AssignmentExpression':
44 return new syntax.AssignmentExpression(node.operator, node.left, node.right);
45 case 'BinaryExpression':
46 return new syntax.BinaryExpression(node.operator, node.left, node.right);
47 case 'BlockStatement':
48 return new syntax.BlockStatement(node.body);
49 case 'BreakStatement':
50 return new syntax.BreakStatement(node.label);
51 case 'CallExpression':
52 return new syntax.CallExpression(node.callee, node.arguments);
53 case 'CatchClause':
54 return new syntax.CatchClause(node.param, node.guard, node.body);
55 case 'ConditionalExpression':
56 return new syntax.ConditionalExpression(node.test, node.consequent, node.alternate);
57 case 'ContinueStatement':
58 return new syntax.ContinueStatement(node.label);
59 case 'EmptyStatement':
60 return new syntax.EmptyStatement();
61 case 'ExpressionStatement':
62 return new syntax.ExpressionStatement(node.expression);
63 case 'ForInStatement':
64 return new syntax.ForInStatement(node.left, node.right, node.body, node.each);
65 case 'ForStatement':
66 return new syntax.ForStatement(node.init, node.test, node.update, node.body);
67 case 'FunctionDeclaration':
68 return new syntax.FunctionDeclaration(node.id, node.params, node.body);
69 case 'FunctionExpression':
70 return new syntax.FunctionExpression(node.id, node.params, node.body);
71 case 'Identifier':
72 return new syntax.Identifier(node.name);
73 case 'IfStatement':
74 return new syntax.IfStatement(node.test, node.consequent, node.alternate);
75 case 'Literal':
76 return new syntax.Literal(node.value);
77 case 'LogicalExpression':
78 return new syntax.LogicalExpression(node.operator, node.left, node.right);
79 case 'MemberExpression':
80 return new syntax.MemberExpression(node.object, node.property, node.computed);
81 case 'NewExpression':
82 return new syntax.NewExpression(node.callee, node.arguments);
83 case 'ObjectExpression':
84 return new syntax.ObjectExpression(node.properties);
85 case 'Property':
86 return new syntax.Property(node.key, node.value, node.kind);
87 case 'ReturnStatement':
88 return new syntax.ReturnStatement(node.argument);
89 case 'SwitchStatement':
90 return new syntax.SwitchStatement(node.discriminant, node.cases);
91 case 'SequenceExpression':
92 return new syntax.SequenceExpression(node.expressions);
93 case 'ThisExpression':
94 return new syntax.ThisExpression(node);
95 case 'ThrowStatement':
96 return new syntax.ThrowStatement(node.argument);
97 case 'TryStatement':
98 return new syntax.TryStatement(node.block, node.handlers, node.finalizer);
99 case 'UnaryExpression':
100 return new syntax.UnaryExpression(node.operator, node.argument);
101 case 'UpdateExpression':
102 return new syntax.UpdateExpression(node.operator, node.argument, node.prefix);
103 case 'VariableDeclaration':
104 return new syntax.VariableDeclaration(node.declarations, node.kind);
105 case 'VariableDeclarator':
106 return new syntax.VariableDeclarator(node.id, node.init);
107 case 'WhileStatement':
108 return new syntax.WhileStatement(node.test, node.body);
109 default:
110 return node;
111 }
112};