typescript-to-lua
Version:
A generic TypeScript to Lua transpiler. Write your code in TypeScript and publish Lua!
31 lines • 1.69 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.transformAwaitExpression = void 0;
exports.isAsyncFunction = isAsyncFunction;
exports.wrapInAsyncAwaiter = wrapInAsyncAwaiter;
const ts = require("typescript");
const lua = require("../../LuaAST");
const diagnostics_1 = require("../utils/diagnostics");
const lualib_1 = require("../utils/lualib");
const typescript_1 = require("../utils/typescript");
const transformAwaitExpression = (node, context) => {
// Check if await is inside an async function, it is not allowed at top level or in non-async functions
if (!(0, typescript_1.isInAsyncFunction)(node)) {
context.diagnostics.push((0, diagnostics_1.awaitMustBeInAsyncFunction)(node));
}
const expression = context.transformExpression(node.expression);
return (0, lualib_1.transformLuaLibFunction)(context, lualib_1.LuaLibFeature.Await, node, expression);
};
exports.transformAwaitExpression = transformAwaitExpression;
function isAsyncFunction(declaration) {
var _a, _b;
return (_b = (_a = declaration.modifiers) === null || _a === void 0 ? void 0 : _a.some(m => m.kind === ts.SyntaxKind.AsyncKeyword)) !== null && _b !== void 0 ? _b : false;
}
function wrapInAsyncAwaiter(context, statements, includeResolveParameter = true) {
(0, lualib_1.importLuaLibFeature)(context, lualib_1.LuaLibFeature.Await);
const parameters = includeResolveParameter ? [lua.createIdentifier("____awaiter_resolve")] : [];
return lua.createCallExpression(lua.createIdentifier("__TS__AsyncAwaiter"), [
lua.createFunctionExpression(lua.createBlock(statements), parameters),
]);
}
//# sourceMappingURL=async-await.js.map