UNPKG

typescript-to-lua

Version:

A generic TypeScript to Lua transpiler. Write your code in TypeScript and publish Lua!

31 lines 1.69 kB
"use strict"; 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