Skip to content

Commit 570c510

Browse files
authored
Support for import expressions (#1254)
* Support for import expressions * update package-lock and jest timeout
1 parent 87cb4dc commit 570c510

File tree

6 files changed

+33
-8
lines changed

6 files changed

+33
-8
lines changed

package-lock.json

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/transformation/builtins/promise.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ export function transformPromiseConstructorCall(
4444
}
4545
}
4646

47-
function createStaticPromiseFunctionAccessor(functionName: string, node: ts.Node) {
47+
export function createStaticPromiseFunctionAccessor(functionName: string, node: ts.Node) {
4848
return lua.createTableIndexExpression(
4949
lua.createIdentifier("__TS__Promise"),
5050
lua.createStringLiteral(functionName),

src/transformation/visitors/call.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import { moveToPrecedingTemp, transformExpressionList } from "./expression-list"
1515
import { transformInPrecedingStatementScope } from "../utils/preceding-statements";
1616
import { getOptionalContinuationData, transformOptionalChain } from "./optional-chaining";
1717
import { transformLanguageExtensionCallExpression } from "./language-extensions";
18+
import { transformImportExpression } from "./modules/import";
1819

1920
export type PropertyCallExpression = ts.CallExpression & { expression: ts.PropertyAccessExpression };
2021

@@ -210,6 +211,10 @@ function transformElementCall(context: TransformationContext, node: ts.CallExpre
210211
}
211212

212213
export const transformCallExpression: FunctionVisitor<ts.CallExpression> = (node, context) => {
214+
if (node.expression.kind === ts.SyntaxKind.ImportKeyword) {
215+
return transformImportExpression(node, context);
216+
}
217+
213218
if (ts.isOptionalChain(node)) {
214219
return transformOptionalChain(context, node);
215220
}

src/transformation/visitors/modules/import.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import * as path from "path";
22
import * as ts from "typescript";
33
import * as lua from "../../../LuaAST";
4+
import { createStaticPromiseFunctionAccessor } from "../../builtins/promise";
45
import { FunctionVisitor, TransformationContext } from "../../context";
56
import { AnnotationKind, getSymbolAnnotations } from "../../utils/annotations";
67
import { createDefaultExportStringLiteral } from "../../utils/export";
78
import { createHoistableVariableDeclarationStatement } from "../../utils/lua-ast";
9+
import { importLuaLibFeature, LuaLibFeature } from "../../utils/lualib";
810
import { createSafeName } from "../../utils/safe-names";
911
import { peekScope } from "../../utils/scope";
1012
import { transformIdentifier } from "../identifier";
@@ -161,3 +163,10 @@ export const transformImportEqualsDeclaration: FunctionVisitor<ts.ImportEqualsDe
161163
const expression = context.transformExpression(node.moduleReference);
162164
return createHoistableVariableDeclarationStatement(context, name, expression, node);
163165
};
166+
167+
export const transformImportExpression: FunctionVisitor<ts.CallExpression> = (node, context) => {
168+
importLuaLibFeature(context, LuaLibFeature.Promise);
169+
170+
const importPath = node.arguments.map(a => context.transformExpression(a));
171+
return lua.createCallExpression(createStaticPromiseFunctionAccessor("resolve", node), importPath, node);
172+
};

test/cli/run.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { ChildProcess, fork } from "child_process";
22
import * as path from "path";
33

4-
jest.setTimeout(20000);
4+
jest.setTimeout(30000);
55

66
const cliPath = path.join(__dirname, "../../src/tstl.ts");
77

test/unit/modules/modules.spec.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,3 +280,14 @@ test("namespace export with unsafe Lua name", () => {
280280
.addExtraFile("module.ts", moduleFile)
281281
.expectToMatchJsResult();
282282
});
283+
284+
test("import expression", () => {
285+
util.testModule`
286+
let result;
287+
import("./module").then(m => { result = m.foo(); });
288+
export { result };
289+
`
290+
.addExtraFile("module.ts", 'export function foo() { return "foo"; }')
291+
.setOptions({ module: ts.ModuleKind.ESNext })
292+
.expectToMatchJsResult();
293+
});

0 commit comments

Comments
 (0)