typescript-to-lua 1.31.0 → 1.31.1
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/transformation/pre-transformers/using-transformer.js +13 -4
- package/dist/transformation/utils/export.d.ts +1 -0
- package/dist/transformation/utils/export.js +8 -0
- package/dist/transformation/visitors/class/index.js +1 -1
- package/dist/transformation/visitors/unary-expression.js +22 -5
- package/package.json +1 -1
|
@@ -6,11 +6,13 @@ const lualib_1 = require("../utils/lualib");
|
|
|
6
6
|
function usingTransformer(context) {
|
|
7
7
|
return ctx => sourceFile => {
|
|
8
8
|
function visit(node) {
|
|
9
|
-
if (ts.isBlock(node)) {
|
|
9
|
+
if (ts.isBlock(node) || ts.isSourceFile(node)) {
|
|
10
10
|
const [hasUsings, newStatements] = transformBlockWithUsing(context, node.statements, node);
|
|
11
11
|
if (hasUsings) {
|
|
12
12
|
// Recurse visitor into updated block to find further usings
|
|
13
|
-
const updatedBlock = ts.
|
|
13
|
+
const updatedBlock = ts.isBlock(node)
|
|
14
|
+
? ts.factory.updateBlock(node, newStatements)
|
|
15
|
+
: ts.factory.updateSourceFile(node, newStatements);
|
|
14
16
|
const result = ts.visitEachChild(updatedBlock, visit, ctx);
|
|
15
17
|
// Set all the synthetic node parents to something that makes sense
|
|
16
18
|
const parent = [updatedBlock];
|
|
@@ -28,7 +30,8 @@ function usingTransformer(context) {
|
|
|
28
30
|
}
|
|
29
31
|
return ts.visitEachChild(node, visit, ctx);
|
|
30
32
|
}
|
|
31
|
-
|
|
33
|
+
const transformedSourceFile = ts.visitEachChild(sourceFile, visit, ctx);
|
|
34
|
+
return visit(transformedSourceFile);
|
|
32
35
|
};
|
|
33
36
|
}
|
|
34
37
|
function isUsingDeclarationList(node) {
|
|
@@ -68,7 +71,13 @@ function transformBlockWithUsing(context, statements, block) {
|
|
|
68
71
|
if (isAwaitUsing) {
|
|
69
72
|
call = ts.factory.createAwaitExpression(call);
|
|
70
73
|
}
|
|
71
|
-
if (ts.
|
|
74
|
+
if (ts.isSourceFile(block)) {
|
|
75
|
+
// If block is a sourcefile, don't insert a return statement into root code
|
|
76
|
+
newStatements.push(ts.factory.createExpressionStatement(call));
|
|
77
|
+
}
|
|
78
|
+
else if (block.parent &&
|
|
79
|
+
ts.isBlock(block.parent) &&
|
|
80
|
+
block.parent.statements[block.parent.statements.length - 1] !== block) {
|
|
72
81
|
// If this is a free-standing block in a function (not the last statement), dont return the value
|
|
73
82
|
newStatements.push(ts.factory.createExpressionStatement(call));
|
|
74
83
|
}
|
|
@@ -3,6 +3,7 @@ import * as lua from "../../LuaAST";
|
|
|
3
3
|
import { TransformationContext } from "../context";
|
|
4
4
|
export declare function hasDefaultExportModifier(node: ts.Node): boolean;
|
|
5
5
|
export declare function hasExportModifier(node: ts.Node): boolean;
|
|
6
|
+
export declare function shouldBeExported(node: ts.Node): boolean;
|
|
6
7
|
export declare const createDefaultExportStringLiteral: (original?: ts.Node) => lua.StringLiteral;
|
|
7
8
|
export declare function getExportedSymbolDeclaration(symbol: ts.Symbol): ts.Declaration | undefined;
|
|
8
9
|
export declare function getSymbolFromIdentifier(context: TransformationContext, identifier: lua.Identifier): ts.Symbol | undefined;
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.createDefaultExportStringLiteral = void 0;
|
|
4
4
|
exports.hasDefaultExportModifier = hasDefaultExportModifier;
|
|
5
5
|
exports.hasExportModifier = hasExportModifier;
|
|
6
|
+
exports.shouldBeExported = shouldBeExported;
|
|
6
7
|
exports.getExportedSymbolDeclaration = getExportedSymbolDeclaration;
|
|
7
8
|
exports.getSymbolFromIdentifier = getSymbolFromIdentifier;
|
|
8
9
|
exports.getIdentifierExportScope = getIdentifierExportScope;
|
|
@@ -30,6 +31,13 @@ function hasExportModifier(node) {
|
|
|
30
31
|
return (ts.canHaveModifiers(node) &&
|
|
31
32
|
((_a = node.modifiers) === null || _a === void 0 ? void 0 : _a.some(modifier => modifier.kind === ts.SyntaxKind.ExportKeyword)) === true);
|
|
32
33
|
}
|
|
34
|
+
function shouldBeExported(node) {
|
|
35
|
+
if (hasExportModifier(node)) {
|
|
36
|
+
// Don't export if we're inside a namespace (module declaration)
|
|
37
|
+
return ts.findAncestor(node, ts.isModuleDeclaration) === undefined;
|
|
38
|
+
}
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
33
41
|
const createDefaultExportStringLiteral = (original) => lua.createStringLiteral("default", original);
|
|
34
42
|
exports.createDefaultExportStringLiteral = createDefaultExportStringLiteral;
|
|
35
43
|
function getExportedSymbolDeclaration(symbol) {
|
|
@@ -153,7 +153,7 @@ function transformClassLikeDeclaration(classDeclaration, context, nameOverride)
|
|
|
153
153
|
const decoratingExpression = (0, decorators_1.createClassDecoratingExpression)(context, classDeclaration, localClassName);
|
|
154
154
|
const decoratingStatement = lua.createAssignmentStatement(localClassName, decoratingExpression);
|
|
155
155
|
result.push(decoratingStatement);
|
|
156
|
-
if ((0, export_1.
|
|
156
|
+
if ((0, export_1.shouldBeExported)(classDeclaration)) {
|
|
157
157
|
const exportExpression = (0, export_1.hasDefaultExportModifier)(classDeclaration)
|
|
158
158
|
? (0, export_1.createDefaultExportExpression)(classDeclaration)
|
|
159
159
|
: (0, export_1.createExportedIdentifier)(context, className);
|
|
@@ -7,6 +7,8 @@ const lua = require("../../LuaAST");
|
|
|
7
7
|
const utils_1 = require("../../utils");
|
|
8
8
|
const bit_1 = require("./binary-expression/bit");
|
|
9
9
|
const compound_1 = require("./binary-expression/compound");
|
|
10
|
+
const typescript_1 = require("../utils/typescript");
|
|
11
|
+
const lualib_1 = require("../utils/lualib");
|
|
10
12
|
function transformUnaryExpressionStatement(context, node) {
|
|
11
13
|
const expression = ts.isExpressionStatement(node) ? node.expression : node;
|
|
12
14
|
if (ts.isPrefixUnaryExpression(expression) &&
|
|
@@ -38,11 +40,26 @@ const transformPrefixUnaryExpression = (expression, context) => {
|
|
|
38
40
|
return (0, compound_1.transformCompoundAssignmentExpression)(context, expression, expression.operand, ts.factory.createNumericLiteral(1), ts.SyntaxKind.PlusToken, false);
|
|
39
41
|
case ts.SyntaxKind.MinusMinusToken:
|
|
40
42
|
return (0, compound_1.transformCompoundAssignmentExpression)(context, expression, expression.operand, ts.factory.createNumericLiteral(1), ts.SyntaxKind.MinusToken, false);
|
|
41
|
-
case ts.SyntaxKind.PlusToken:
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
43
|
+
case ts.SyntaxKind.PlusToken: {
|
|
44
|
+
const operand = context.transformExpression(expression.operand);
|
|
45
|
+
const type = context.checker.getTypeAtLocation(expression.operand);
|
|
46
|
+
if ((0, typescript_1.isNumberType)(context, type)) {
|
|
47
|
+
return operand;
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
return (0, lualib_1.transformLuaLibFunction)(context, lualib_1.LuaLibFeature.Number, expression, operand);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
case ts.SyntaxKind.MinusToken: {
|
|
54
|
+
const operand = context.transformExpression(expression.operand);
|
|
55
|
+
const type = context.checker.getTypeAtLocation(expression.operand);
|
|
56
|
+
if ((0, typescript_1.isNumberType)(context, type)) {
|
|
57
|
+
return lua.createUnaryExpression(operand, lua.SyntaxKind.NegationOperator);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
return (0, lualib_1.transformLuaLibFunction)(context, lualib_1.LuaLibFeature.Number, expression, lua.createUnaryExpression(operand, lua.SyntaxKind.NegationOperator));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
46
63
|
case ts.SyntaxKind.ExclamationToken:
|
|
47
64
|
return lua.createUnaryExpression(context.transformExpression(expression.operand), lua.SyntaxKind.NotOperator);
|
|
48
65
|
case ts.SyntaxKind.TildeToken:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "typescript-to-lua",
|
|
3
|
-
"version": "1.31.
|
|
3
|
+
"version": "1.31.1",
|
|
4
4
|
"description": "A generic TypeScript to Lua transpiler. Write your code in TypeScript and publish Lua!",
|
|
5
5
|
"repository": "https://github.com/TypeScriptToLua/TypeScriptToLua",
|
|
6
6
|
"homepage": "https://typescripttolua.github.io/",
|