1 | "use strict";
|
2 | exports.__esModule = true;
|
3 | var decaffeinate_coffeescript_1 = require("decaffeinate-coffeescript");
|
4 | var nodes_1 = require("decaffeinate-coffeescript/lib/coffee-script/nodes");
|
5 | var nodes_2 = require("decaffeinate-coffeescript2/lib/coffeescript/nodes");
|
6 | var nodeTypeMap = new Map();
|
7 | nodeTypeMap.set(nodes_1.Base, nodes_2.Base);
|
8 | nodeTypeMap.set(nodes_1.Block, nodes_2.Block);
|
9 | nodeTypeMap.set(nodes_1.Literal, nodes_2.Literal);
|
10 | nodeTypeMap.set(nodes_1.NumberLiteral, nodes_2.NumberLiteral);
|
11 | nodeTypeMap.set(nodes_1.InfinityLiteral, nodes_2.InfinityLiteral);
|
12 | nodeTypeMap.set(nodes_1.NaNLiteral, nodes_2.NaNLiteral);
|
13 | nodeTypeMap.set(nodes_1.StringLiteral, nodes_2.StringLiteral);
|
14 | nodeTypeMap.set(nodes_1.RegexLiteral, nodes_2.RegexLiteral);
|
15 | nodeTypeMap.set(nodes_1.PassthroughLiteral, nodes_2.PassthroughLiteral);
|
16 | nodeTypeMap.set(nodes_1.IdentifierLiteral, nodes_2.IdentifierLiteral);
|
17 | nodeTypeMap.set(nodes_1.PropertyName, nodes_2.PropertyName);
|
18 | nodeTypeMap.set(nodes_1.StatementLiteral, nodes_2.StatementLiteral);
|
19 | nodeTypeMap.set(nodes_1.ThisLiteral, nodes_2.ThisLiteral);
|
20 | nodeTypeMap.set(nodes_1.UndefinedLiteral, nodes_2.UndefinedLiteral);
|
21 | nodeTypeMap.set(nodes_1.NullLiteral, nodes_2.NullLiteral);
|
22 | nodeTypeMap.set(nodes_1.BooleanLiteral, nodes_2.BooleanLiteral);
|
23 | nodeTypeMap.set(nodes_1.Return, nodes_2.Return);
|
24 | nodeTypeMap.set(nodes_1.YieldReturn, nodes_2.YieldReturn);
|
25 | nodeTypeMap.set(nodes_1.Value, nodes_2.Value);
|
26 | nodeTypeMap.set(nodes_1.Call, nodes_2.Call);
|
27 | nodeTypeMap.set(nodes_1.SuperCall, nodes_2.SuperCall);
|
28 | nodeTypeMap.set(nodes_1.RegexWithInterpolations, nodes_2.RegexWithInterpolations);
|
29 | nodeTypeMap.set(nodes_1.TaggedTemplateCall, nodes_2.TaggedTemplateCall);
|
30 | nodeTypeMap.set(nodes_1.Extends, nodes_2.Extends);
|
31 | nodeTypeMap.set(nodes_1.Access, nodes_2.Access);
|
32 | nodeTypeMap.set(nodes_1.Index, nodes_2.Index);
|
33 | nodeTypeMap.set(nodes_1.Range, nodes_2.Range);
|
34 | nodeTypeMap.set(nodes_1.Slice, nodes_2.Slice);
|
35 | nodeTypeMap.set(nodes_1.Obj, nodes_2.Obj);
|
36 | nodeTypeMap.set(nodes_1.Arr, nodes_2.Arr);
|
37 | nodeTypeMap.set(nodes_1.Class, nodes_2.Class);
|
38 | nodeTypeMap.set(nodes_1.ModuleDeclaration, nodes_2.ModuleDeclaration);
|
39 | nodeTypeMap.set(nodes_1.ImportDeclaration, nodes_2.ImportDeclaration);
|
40 | nodeTypeMap.set(nodes_1.ImportClause, nodes_2.ImportClause);
|
41 | nodeTypeMap.set(nodes_1.ExportDeclaration, nodes_2.ExportDeclaration);
|
42 | nodeTypeMap.set(nodes_1.ExportNamedDeclaration, nodes_2.ExportNamedDeclaration);
|
43 | nodeTypeMap.set(nodes_1.ExportDefaultDeclaration, nodes_2.ExportDefaultDeclaration);
|
44 | nodeTypeMap.set(nodes_1.ExportAllDeclaration, nodes_2.ExportAllDeclaration);
|
45 | nodeTypeMap.set(nodes_1.ModuleSpecifierList, nodes_2.ModuleSpecifierList);
|
46 | nodeTypeMap.set(nodes_1.ImportSpecifierList, nodes_2.ImportSpecifierList);
|
47 | nodeTypeMap.set(nodes_1.ExportSpecifierList, nodes_2.ExportSpecifierList);
|
48 | nodeTypeMap.set(nodes_1.ModuleSpecifier, nodes_2.ModuleSpecifier);
|
49 | nodeTypeMap.set(nodes_1.ImportSpecifier, nodes_2.ImportSpecifier);
|
50 | nodeTypeMap.set(nodes_1.ImportDefaultSpecifier, nodes_2.ImportDefaultSpecifier);
|
51 | nodeTypeMap.set(nodes_1.ImportNamespaceSpecifier, nodes_2.ImportNamespaceSpecifier);
|
52 | nodeTypeMap.set(nodes_1.ExportSpecifier, nodes_2.ExportSpecifier);
|
53 | nodeTypeMap.set(nodes_1.Assign, nodes_2.Assign);
|
54 | nodeTypeMap.set(nodes_1.Code, nodes_2.Code);
|
55 | nodeTypeMap.set(nodes_1.Param, nodes_2.Param);
|
56 | nodeTypeMap.set(nodes_1.Splat, nodes_2.Splat);
|
57 | nodeTypeMap.set(nodes_1.Expansion, nodes_2.Expansion);
|
58 | nodeTypeMap.set(nodes_1.While, nodes_2.While);
|
59 | nodeTypeMap.set(nodes_1.Op, nodes_2.Op);
|
60 | nodeTypeMap.set(nodes_1.In, nodes_2.In);
|
61 | nodeTypeMap.set(nodes_1.Try, nodes_2.Try);
|
62 | nodeTypeMap.set(nodes_1.Throw, nodes_2.Throw);
|
63 | nodeTypeMap.set(nodes_1.Existence, nodes_2.Existence);
|
64 | nodeTypeMap.set(nodes_1.Parens, nodes_2.Parens);
|
65 | nodeTypeMap.set(nodes_1.StringWithInterpolations, nodes_2.StringWithInterpolations);
|
66 | nodeTypeMap.set(nodes_1.For, nodes_2.For);
|
67 | nodeTypeMap.set(nodes_1.Switch, nodes_2.Switch);
|
68 | nodeTypeMap.set(nodes_1.If, nodes_2.If);
|
69 |
|
70 |
|
71 |
|
72 | function 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 | }
|
80 | exports["default"] = parseCS1AsCS2;
|
81 | function 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 |
|
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 | }
|