UNPKG

5.97 kBJavaScriptView Raw
1"use strict";
2exports.__esModule = true;
3var decaffeinate_coffeescript_1 = require("decaffeinate-coffeescript");
4var nodes_1 = require("decaffeinate-coffeescript/lib/coffee-script/nodes");
5var nodes_2 = require("decaffeinate-coffeescript2/lib/coffeescript/nodes");
6var nodeTypeMap = new Map();
7nodeTypeMap.set(nodes_1.Base, nodes_2.Base);
8nodeTypeMap.set(nodes_1.Block, nodes_2.Block);
9nodeTypeMap.set(nodes_1.Literal, nodes_2.Literal);
10nodeTypeMap.set(nodes_1.NumberLiteral, nodes_2.NumberLiteral);
11nodeTypeMap.set(nodes_1.InfinityLiteral, nodes_2.InfinityLiteral);
12nodeTypeMap.set(nodes_1.NaNLiteral, nodes_2.NaNLiteral);
13nodeTypeMap.set(nodes_1.StringLiteral, nodes_2.StringLiteral);
14nodeTypeMap.set(nodes_1.RegexLiteral, nodes_2.RegexLiteral);
15nodeTypeMap.set(nodes_1.PassthroughLiteral, nodes_2.PassthroughLiteral);
16nodeTypeMap.set(nodes_1.IdentifierLiteral, nodes_2.IdentifierLiteral);
17nodeTypeMap.set(nodes_1.PropertyName, nodes_2.PropertyName);
18nodeTypeMap.set(nodes_1.StatementLiteral, nodes_2.StatementLiteral);
19nodeTypeMap.set(nodes_1.ThisLiteral, nodes_2.ThisLiteral);
20nodeTypeMap.set(nodes_1.UndefinedLiteral, nodes_2.UndefinedLiteral);
21nodeTypeMap.set(nodes_1.NullLiteral, nodes_2.NullLiteral);
22nodeTypeMap.set(nodes_1.BooleanLiteral, nodes_2.BooleanLiteral);
23nodeTypeMap.set(nodes_1.Return, nodes_2.Return);
24nodeTypeMap.set(nodes_1.YieldReturn, nodes_2.YieldReturn);
25nodeTypeMap.set(nodes_1.Value, nodes_2.Value);
26nodeTypeMap.set(nodes_1.Call, nodes_2.Call);
27nodeTypeMap.set(nodes_1.SuperCall, nodes_2.SuperCall);
28nodeTypeMap.set(nodes_1.RegexWithInterpolations, nodes_2.RegexWithInterpolations);
29nodeTypeMap.set(nodes_1.TaggedTemplateCall, nodes_2.TaggedTemplateCall);
30nodeTypeMap.set(nodes_1.Extends, nodes_2.Extends);
31nodeTypeMap.set(nodes_1.Access, nodes_2.Access);
32nodeTypeMap.set(nodes_1.Index, nodes_2.Index);
33nodeTypeMap.set(nodes_1.Range, nodes_2.Range);
34nodeTypeMap.set(nodes_1.Slice, nodes_2.Slice);
35nodeTypeMap.set(nodes_1.Obj, nodes_2.Obj);
36nodeTypeMap.set(nodes_1.Arr, nodes_2.Arr);
37nodeTypeMap.set(nodes_1.Class, nodes_2.Class);
38nodeTypeMap.set(nodes_1.ModuleDeclaration, nodes_2.ModuleDeclaration);
39nodeTypeMap.set(nodes_1.ImportDeclaration, nodes_2.ImportDeclaration);
40nodeTypeMap.set(nodes_1.ImportClause, nodes_2.ImportClause);
41nodeTypeMap.set(nodes_1.ExportDeclaration, nodes_2.ExportDeclaration);
42nodeTypeMap.set(nodes_1.ExportNamedDeclaration, nodes_2.ExportNamedDeclaration);
43nodeTypeMap.set(nodes_1.ExportDefaultDeclaration, nodes_2.ExportDefaultDeclaration);
44nodeTypeMap.set(nodes_1.ExportAllDeclaration, nodes_2.ExportAllDeclaration);
45nodeTypeMap.set(nodes_1.ModuleSpecifierList, nodes_2.ModuleSpecifierList);
46nodeTypeMap.set(nodes_1.ImportSpecifierList, nodes_2.ImportSpecifierList);
47nodeTypeMap.set(nodes_1.ExportSpecifierList, nodes_2.ExportSpecifierList);
48nodeTypeMap.set(nodes_1.ModuleSpecifier, nodes_2.ModuleSpecifier);
49nodeTypeMap.set(nodes_1.ImportSpecifier, nodes_2.ImportSpecifier);
50nodeTypeMap.set(nodes_1.ImportDefaultSpecifier, nodes_2.ImportDefaultSpecifier);
51nodeTypeMap.set(nodes_1.ImportNamespaceSpecifier, nodes_2.ImportNamespaceSpecifier);
52nodeTypeMap.set(nodes_1.ExportSpecifier, nodes_2.ExportSpecifier);
53nodeTypeMap.set(nodes_1.Assign, nodes_2.Assign);
54nodeTypeMap.set(nodes_1.Code, nodes_2.Code);
55nodeTypeMap.set(nodes_1.Param, nodes_2.Param);
56nodeTypeMap.set(nodes_1.Splat, nodes_2.Splat);
57nodeTypeMap.set(nodes_1.Expansion, nodes_2.Expansion);
58nodeTypeMap.set(nodes_1.While, nodes_2.While);
59nodeTypeMap.set(nodes_1.Op, nodes_2.Op);
60nodeTypeMap.set(nodes_1.In, nodes_2.In);
61nodeTypeMap.set(nodes_1.Try, nodes_2.Try);
62nodeTypeMap.set(nodes_1.Throw, nodes_2.Throw);
63nodeTypeMap.set(nodes_1.Existence, nodes_2.Existence);
64nodeTypeMap.set(nodes_1.Parens, nodes_2.Parens);
65nodeTypeMap.set(nodes_1.StringWithInterpolations, nodes_2.StringWithInterpolations);
66nodeTypeMap.set(nodes_1.For, nodes_2.For);
67nodeTypeMap.set(nodes_1.Switch, nodes_2.Switch);
68nodeTypeMap.set(nodes_1.If, nodes_2.If);
69/**
70 * Run the CS1 parser and convert the resulting AST into a CS2-compatible AST.
71 */
72function parseCS1AsCS2(source) {
73 var cs1AST = decaffeinate_coffeescript_1.nodes(source);
74 var cs2AST = convertCS1NodeToCS2(cs1AST);
75 if (!(cs2AST instanceof nodes_2.Block)) {
76 throw new Error('Expected top-level CS file to convert to a Block');
77 }
78 return cs2AST;
79}
80exports["default"] = parseCS1AsCS2;
81function convertCS1NodeToCS2(node) {
82 var cs1Constructor = node.constructor;
83 var cs2Constructor = nodeTypeMap.get(cs1Constructor);
84 if (!cs2Constructor) {
85 throw new Error("Unexpected CS1 type for node " + node);
86 }
87 var result = Object.create(cs2Constructor.prototype);
88 for (var _i = 0, _a = Object.keys(node); _i < _a.length; _i++) {
89 var key = _a[_i];
90 var value = node[key];
91 if (Array.isArray(value) && value.length > 0 && value[0] instanceof nodes_1.Base) {
92 result[key] = value
93 .filter(function (child) { return !(child instanceof nodes_1.Comment); })
94 .map(function (child) { return convertCS1NodeToCS2(child); });
95 }
96 else if (key === 'cases') {
97 // Switch cases have a complex structure, so special-case those.
98 result[key] = value.map(function (_a) {
99 var switchCaseCondition = _a[0], block = _a[1];
100 if (Array.isArray(switchCaseCondition)) {
101 return [
102 switchCaseCondition.map(function (condition) { return convertCS1NodeToCS2(condition); }),
103 convertCS1NodeToCS2(block)
104 ];
105 }
106 else {
107 return [convertCS1NodeToCS2(switchCaseCondition), convertCS1NodeToCS2(block)];
108 }
109 });
110 }
111 else if (value instanceof nodes_1.Base) {
112 result[key] = convertCS1NodeToCS2(value);
113 }
114 else {
115 result[key] = value;
116 }
117 }
118 return result;
119}