@grey-ts/transpiler 1.1.2 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +70 -18
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -44,6 +44,7 @@ class NodeHandler {
|
|
|
44
44
|
}
|
|
45
45
|
NodeHandler.register(ts.SyntaxKind.TypeAliasDeclaration, () => "");
|
|
46
46
|
NodeHandler.register(ts.SyntaxKind.InterfaceDeclaration, () => "");
|
|
47
|
+
NodeHandler.register(ts.SyntaxKind.ModuleDeclaration, () => "");
|
|
47
48
|
NodeHandler.register(ts.SyntaxKind.EndOfFileToken, () => "");
|
|
48
49
|
NodeHandler.register(ts.SyntaxKind.EmptyStatement, () => "");
|
|
49
50
|
|
|
@@ -971,13 +972,26 @@ NodeHandler.register(ts8.SyntaxKind.AsExpression, (node) => {
|
|
|
971
972
|
return NodeHandler.handle(node.expression);
|
|
972
973
|
});
|
|
973
974
|
NodeHandler.register(ts8.SyntaxKind.DeleteExpression, (node) => {
|
|
974
|
-
if (
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
975
|
+
if (ts8.isPropertyAccessExpression(node.expression)) {
|
|
976
|
+
const pnode = node.expression;
|
|
977
|
+
const left = NodeHandler.handle(pnode.expression);
|
|
978
|
+
const leftType = checker.getTypeAtLocation(pnode.expression);
|
|
979
|
+
const right = replaceIdentifier(NodeHandler.handle(pnode.name), leftType, pnode.name.text);
|
|
980
|
+
return `${left}.remove("${right}")`;
|
|
981
|
+
}
|
|
982
|
+
if (ts8.isElementAccessExpression(node.expression)) {
|
|
983
|
+
const pnode = node.expression;
|
|
984
|
+
const left = NodeHandler.handle(pnode.expression);
|
|
985
|
+
let right;
|
|
986
|
+
if (ts8.isStringLiteral(pnode.argumentExpression)) {
|
|
987
|
+
const leftType = checker.getTypeAtLocation(pnode.expression);
|
|
988
|
+
right = `"${replaceIdentifier(pnode.argumentExpression.text, leftType, pnode.argumentExpression.text)}"`;
|
|
989
|
+
} else {
|
|
990
|
+
right = NodeHandler.handle(pnode.argumentExpression);
|
|
991
|
+
}
|
|
992
|
+
return `${left}.remove(${right})`;
|
|
993
|
+
}
|
|
994
|
+
throw `Cant handle delete expression for ${ts8.SyntaxKind[node.expression.kind]}`;
|
|
981
995
|
});
|
|
982
996
|
|
|
983
997
|
// src/visitors/functions.ts
|
|
@@ -1166,11 +1180,13 @@ NodeHandler.register(ts12.SyntaxKind.ForStatement, (node) => {
|
|
|
1166
1180
|
}
|
|
1167
1181
|
return false;
|
|
1168
1182
|
}
|
|
1183
|
+
const labelIf = ts12.isLabeledStatement(node.parent) ? ` if ${node.parent.label.text}Broke then break` : "";
|
|
1169
1184
|
if (!hasContinue(node)) {
|
|
1170
1185
|
return [
|
|
1171
1186
|
`${initializer}`,
|
|
1172
1187
|
`while ${condition}`,
|
|
1173
1188
|
` ${statement.trimStart()}`,
|
|
1189
|
+
...labelIf ? [labelIf] : [],
|
|
1174
1190
|
` ${incrementor}`,
|
|
1175
1191
|
`end while`
|
|
1176
1192
|
].join(`
|
|
@@ -1187,6 +1203,7 @@ NodeHandler.register(ts12.SyntaxKind.ForStatement, (node) => {
|
|
|
1187
1203
|
` end if`,
|
|
1188
1204
|
` ${incrementedStateVarName} = 0`,
|
|
1189
1205
|
` ${statement.trimStart()}`,
|
|
1206
|
+
...labelIf ? [labelIf] : [],
|
|
1190
1207
|
` ${incrementor}`,
|
|
1191
1208
|
` ${incrementedStateVarName} = 1`,
|
|
1192
1209
|
`end while`
|
|
@@ -1203,9 +1220,14 @@ NodeHandler.register(ts12.SyntaxKind.ForOfStatement, (node) => {
|
|
|
1203
1220
|
}
|
|
1204
1221
|
const varName = NodeHandler.handle(node.initializer.declarations[0].name);
|
|
1205
1222
|
const objToLoop = NodeHandler.handle(node.expression);
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1223
|
+
const labelIf = ts12.isLabeledStatement(node.parent) ? ` if ${node.parent.label.text}Broke then break` : "";
|
|
1224
|
+
return [
|
|
1225
|
+
`for ${varName} in ${objToLoop}`,
|
|
1226
|
+
`${NodeHandler.handle(node.statement)}`,
|
|
1227
|
+
...labelIf ? [labelIf] : [],
|
|
1228
|
+
`end for`
|
|
1229
|
+
].join(`
|
|
1230
|
+
`);
|
|
1209
1231
|
});
|
|
1210
1232
|
NodeHandler.register(ts12.SyntaxKind.ForInStatement, (node) => {
|
|
1211
1233
|
if (!ts12.isVariableDeclarationList(node.initializer)) {
|
|
@@ -1216,9 +1238,14 @@ NodeHandler.register(ts12.SyntaxKind.ForInStatement, (node) => {
|
|
|
1216
1238
|
}
|
|
1217
1239
|
const varName = NodeHandler.handle(node.initializer.declarations[0].name);
|
|
1218
1240
|
const objToLoop = NodeHandler.handle(node.expression);
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1241
|
+
const labelIf = ts12.isLabeledStatement(node.parent) ? ` if ${node.parent.label.text}Broke then break` : "";
|
|
1242
|
+
return [
|
|
1243
|
+
`for ${varName} in ${objToLoop}.indexes`,
|
|
1244
|
+
`${NodeHandler.handle(node.statement)}`,
|
|
1245
|
+
...labelIf ? [labelIf] : [],
|
|
1246
|
+
`end for`
|
|
1247
|
+
].join(`
|
|
1248
|
+
`);
|
|
1222
1249
|
});
|
|
1223
1250
|
NodeHandler.register(ts12.SyntaxKind.IfStatement, (node) => {
|
|
1224
1251
|
const condition = NodeHandler.handle(node.expression);
|
|
@@ -1248,20 +1275,24 @@ end if`;
|
|
|
1248
1275
|
});
|
|
1249
1276
|
NodeHandler.register(ts12.SyntaxKind.WhileStatement, (node, ctx) => {
|
|
1250
1277
|
const expression = NodeHandler.handle(node.expression);
|
|
1278
|
+
const labelIf = ts12.isLabeledStatement(node.parent) ? ` if ${node.parent.label.text}Broke then break` : "";
|
|
1251
1279
|
return [
|
|
1252
1280
|
`while ${expression}`,
|
|
1253
1281
|
` ${NodeHandler.handle(node.statement).trimStart()}`,
|
|
1282
|
+
...labelIf ? [labelIf] : [],
|
|
1254
1283
|
`end while`
|
|
1255
1284
|
].join(`
|
|
1256
1285
|
`);
|
|
1257
1286
|
});
|
|
1258
1287
|
NodeHandler.register(ts12.SyntaxKind.DoStatement, (node, ctx) => {
|
|
1259
1288
|
const expression = NodeHandler.handle(node.expression);
|
|
1289
|
+
const labelIf = ts12.isLabeledStatement(node.parent) ? ` if ${node.parent.label.text}Broke then break` : "";
|
|
1260
1290
|
return [
|
|
1261
1291
|
`did_once = 0`,
|
|
1262
1292
|
`while not did_once or ${expression}`,
|
|
1263
1293
|
` did_once = 1`,
|
|
1264
1294
|
` ${NodeHandler.handle(node.statement).trimStart()}`,
|
|
1295
|
+
...labelIf ? [labelIf] : [],
|
|
1265
1296
|
`end while`
|
|
1266
1297
|
].join(`
|
|
1267
1298
|
`);
|
|
@@ -1270,6 +1301,12 @@ NodeHandler.register(ts12.SyntaxKind.ContinueStatement, (node) => {
|
|
|
1270
1301
|
return "continue";
|
|
1271
1302
|
});
|
|
1272
1303
|
NodeHandler.register(ts12.SyntaxKind.BreakStatement, (node) => {
|
|
1304
|
+
if (node.label) {
|
|
1305
|
+
if (!ts12.isBlock(node.parent))
|
|
1306
|
+
throw "A break statement with a label must be in a block";
|
|
1307
|
+
return `${NodeHandler.handle(node.label)}Broke = 1
|
|
1308
|
+
break`;
|
|
1309
|
+
}
|
|
1273
1310
|
return "break";
|
|
1274
1311
|
});
|
|
1275
1312
|
NodeHandler.register(ts12.SyntaxKind.ReturnStatement, (node) => {
|
|
@@ -1281,6 +1318,10 @@ NodeHandler.register(ts12.SyntaxKind.ReturnStatement, (node) => {
|
|
|
1281
1318
|
}
|
|
1282
1319
|
return `return ${NodeHandler.handle(node.expression)}`;
|
|
1283
1320
|
});
|
|
1321
|
+
NodeHandler.register(ts12.SyntaxKind.LabeledStatement, (node) => {
|
|
1322
|
+
return `${NodeHandler.handle(node.label)}Broke = 0
|
|
1323
|
+
${NodeHandler.handle(node.statement)}`;
|
|
1324
|
+
});
|
|
1284
1325
|
|
|
1285
1326
|
// src/visitors/variables.ts
|
|
1286
1327
|
import ts13 from "typescript";
|
|
@@ -1309,16 +1350,27 @@ NodeHandler.register(ts13.SyntaxKind.VariableStatement, (node, ctx) => {
|
|
|
1309
1350
|
NodeHandler.register(ts13.SyntaxKind.VariableDeclaration, handleVariableDeclaration);
|
|
1310
1351
|
NodeHandler.register(ts13.SyntaxKind.PropertyDeclaration, handleVariableDeclaration);
|
|
1311
1352
|
NodeHandler.register(ts13.SyntaxKind.EnumDeclaration, (node) => {
|
|
1312
|
-
const members =
|
|
1313
|
-
|
|
1353
|
+
const members = [];
|
|
1354
|
+
function addMember(name, initializer) {
|
|
1355
|
+
members.push(`${name}: ${initializer}`);
|
|
1356
|
+
if (isNaN(+initializer))
|
|
1357
|
+
return;
|
|
1358
|
+
members.push(`${initializer}: ${name}`);
|
|
1359
|
+
}
|
|
1360
|
+
node.members.forEach((member, index) => {
|
|
1361
|
+
let name = NodeHandler.handle(member.name);
|
|
1362
|
+
if (!ts13.isStringLiteral(member.name))
|
|
1363
|
+
name = `"${name}"`;
|
|
1314
1364
|
if (member.initializer) {
|
|
1315
|
-
|
|
1365
|
+
addMember(name, NodeHandler.handle(member.initializer));
|
|
1366
|
+
return;
|
|
1316
1367
|
}
|
|
1317
1368
|
const type = checker.getTypeAtLocation(member);
|
|
1318
1369
|
if ("value" in type) {
|
|
1319
|
-
|
|
1370
|
+
addMember(name, String(type.value));
|
|
1371
|
+
return;
|
|
1320
1372
|
}
|
|
1321
|
-
|
|
1373
|
+
addMember(name, index.toString());
|
|
1322
1374
|
});
|
|
1323
1375
|
return `${node.name.text} = { ${members.join(", ")} }`;
|
|
1324
1376
|
});
|