UNPKG

@abaplint/transpiler

Version:
40 lines 2.06 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.FilterBodyTranspiler = void 0; const core_1 = require("@abaplint/core"); const chunk_1 = require("../chunk"); const type_name_or_infer_1 = require("./type_name_or_infer"); const transpile_types_1 = require("../transpile_types"); const unique_identifier_1 = require("../unique_identifier"); class FilterBodyTranspiler { transpile(typ, body, traversal) { if (!(typ.get() instanceof core_1.Expressions.TypeNameOrInfer)) { throw new Error("FilterBodyTranspiler, Expected TypeNameOrInfer"); } else if (body.findDirectTokenByText("EXCEPT")) { return new chunk_1.Chunk(`(() => { throw new Error("FilterBodyTranspiler EXCEPT in, not supported, transpiler"); })()`); } const source = traversal.traverse(body.findDirectExpression(core_1.Expressions.Source)).getCode(); const type = new type_name_or_infer_1.TypeNameOrInfer().findType(typ, traversal); const target = transpile_types_1.TranspileTypes.toType(type); const ret = new chunk_1.Chunk(); ret.appendString("(await (async () => {\n"); let loopWhere = ""; const whereNode = body.findDirectExpression(core_1.Expressions.ComponentCond); if (whereNode) { const where = traversal.traverse(whereNode).getCode(); loopWhere = `, {"where": async ` + where + `}`; } const id = unique_identifier_1.UniqueIdentifier.get(); const loop = unique_identifier_1.UniqueIdentifier.get(); ret.appendString(`const ${id} = ${target};\n`); ret.appendString(`for await (const ${loop} of abap.statements.loop(${source}${loopWhere})) {\n`); ret.appendString(`abap.statements.insertInternal({"table": ${id}, "data": ${loop}});\n`); ret.appendString(`}\n`); ret.appendString(`return ${id};\n`); ret.appendString("})())"); return ret; } } exports.FilterBodyTranspiler = FilterBodyTranspiler; //# sourceMappingURL=filter_body.js.map