@abaplint/transpiler-cli 1.7.12 → 1.7.16

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.
Files changed (2) hide show
  1. package/build/bundle.js +8 -8
  2. package/package.json +3 -3
package/build/bundle.js CHANGED
@@ -16,7 +16,7 @@
16
16
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
17
17
 
18
18
  "use strict";
19
- eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.TranspilerConfig = void 0;\r\nconst path = __webpack_require__(/*! path */ \"path\");\r\nconst fs = __webpack_require__(/*! fs */ \"fs\");\r\nclass TranspilerConfig {\r\n static find(filename) {\r\n if (filename !== undefined) {\r\n const f = filename;\r\n if (fs.existsSync(f)) {\r\n console.log(\"Using config: \" + filename);\r\n const json = fs.readFileSync(f, \"utf8\");\r\n return JSON.parse(json);\r\n }\r\n }\r\n const f = process.cwd() + path.sep + \"abap_transpile.json\";\r\n if (fs.existsSync(f)) {\r\n console.log(\"Using config: abap_transpile.json\");\r\n const json = fs.readFileSync(f, \"utf8\");\r\n return JSON.parse(json);\r\n }\r\n console.log(\"Using default config\");\r\n return this.getDefaultConfig();\r\n }\r\n static getDefaultConfig() {\r\n return {\r\n input_folder: \"src\",\r\n input_filter: [],\r\n output_folder: \"output\",\r\n lib: \"https://github.com/open-abap/open-abap\",\r\n write_unit_tests: true,\r\n write_source_map: true,\r\n options: {\r\n ignoreSyntaxCheck: false,\r\n addFilenames: true,\r\n addCommonJS: true,\r\n skipConstants: false,\r\n unknownTypes: \"compileError\",\r\n },\r\n };\r\n }\r\n}\r\nexports.TranspilerConfig = TranspilerConfig;\r\n//# sourceMappingURL=config.js.map\n\n//# sourceURL=webpack://@abaplint/transpiler-cli/./build/config.js?");
19
+ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.TranspilerConfig = void 0;\r\nconst path = __webpack_require__(/*! path */ \"path\");\r\nconst fs = __webpack_require__(/*! fs */ \"fs\");\r\nclass TranspilerConfig {\r\n static find(filename) {\r\n if (filename !== undefined) {\r\n const f = filename;\r\n if (fs.existsSync(f)) {\r\n console.log(\"Using config: \" + filename);\r\n const json = fs.readFileSync(f, \"utf8\");\r\n return JSON.parse(json);\r\n }\r\n }\r\n const f = process.cwd() + path.sep + \"abap_transpile.json\";\r\n if (fs.existsSync(f)) {\r\n console.log(\"Using config: abap_transpile.json\");\r\n const json = fs.readFileSync(f, \"utf8\");\r\n return JSON.parse(json);\r\n }\r\n console.log(\"Using default config\");\r\n return this.getDefaultConfig();\r\n }\r\n static getDefaultConfig() {\r\n return {\r\n input_folder: \"src\",\r\n input_filter: [],\r\n output_folder: \"output\",\r\n libs: [\r\n { \"url\": \"https://github.com/open-abap/open-abap\" },\r\n ],\r\n write_unit_tests: true,\r\n write_source_map: true,\r\n options: {\r\n ignoreSyntaxCheck: false,\r\n addFilenames: true,\r\n addCommonJS: true,\r\n skipConstants: false,\r\n unknownTypes: \"compileError\",\r\n },\r\n };\r\n }\r\n}\r\nexports.TranspilerConfig = TranspilerConfig;\r\n//# sourceMappingURL=config.js.map\n\n//# sourceURL=webpack://@abaplint/transpiler-cli/./build/config.js?");
20
20
 
21
21
  /***/ }),
22
22
 
@@ -38,7 +38,7 @@ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\n
38
38
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
39
39
 
40
40
  "use strict";
41
- eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nconst fs = __webpack_require__(/*! fs */ \"fs\");\r\nconst path = __webpack_require__(/*! path */ \"path\");\r\nconst glob = __webpack_require__(/*! glob */ \"./node_modules/glob/glob.js\");\r\nconst childProcess = __webpack_require__(/*! child_process */ \"child_process\");\r\nconst os = __webpack_require__(/*! os */ \"os\");\r\nconst ProgressBar = __webpack_require__(/*! progress */ \"./node_modules/progress/index.js\");\r\nconst Transpiler = __webpack_require__(/*! @abaplint/transpiler */ \"./node_modules/@abaplint/transpiler/build/src/index.js\");\r\nconst abaplint = __webpack_require__(/*! @abaplint/core */ \"./node_modules/@abaplint/core/build/src/index.js\");\r\nconst config_1 = __webpack_require__(/*! ./config */ \"./build/config.js\");\r\nconst file_operations_1 = __webpack_require__(/*! ./file_operations */ \"./build/file_operations.js\");\r\nclass Progress {\r\n set(total, _text) {\r\n this.bar = new ProgressBar(\":percent - :elapseds - :text\", { total, renderThrottle: 100 });\r\n }\r\n async tick(text) {\r\n this.bar.tick({ text });\r\n this.bar.render();\r\n }\r\n}\r\nfunction loadLib(config) {\r\n const files = [];\r\n if (config.lib && config.lib !== \"\") {\r\n console.log(\"Clone: \" + config.lib);\r\n const dir = fs.mkdtempSync(path.join(os.tmpdir(), \"abap_transpile-\"));\r\n childProcess.execSync(\"git clone --quiet --depth 1 \" + config.lib + \" .\", { cwd: dir, stdio: \"inherit\" });\r\n let count = 0;\r\n for (let filename of glob.sync(dir + \"/src/**\", { nosort: true, nodir: true })) {\r\n const contents = fs.readFileSync(filename, \"utf8\");\r\n filename = path.basename(filename);\r\n files.push({ filename, contents });\r\n count++;\r\n }\r\n console.log(count + \" files added from lib\");\r\n file_operations_1.FileOperations.deleteFolderRecursive(dir);\r\n }\r\n return files;\r\n}\r\nfunction writeObjects(objects, writeSourceMaps, outputFolder, files) {\r\n for (const o of objects) {\r\n let contents = o.chunk.getCode();\r\n if (writeSourceMaps === true) {\r\n const name = o.filename + \".map\";\r\n contents = contents + `\\n//# sourceMappingURL=` + name;\r\n let map = o.chunk.getMap(o.filename);\r\n for (const f of files) { // hack the paths to the original files\r\n if (f.relative === undefined) {\r\n continue;\r\n }\r\n if (map.includes(`\"${f.filename}\"`)) {\r\n let withPath = `\"${f.relative}${path.sep}${f.filename}\"`;\r\n withPath = withPath.replace(/\\\\/g, \"\\\\\\\\\");\r\n map = map.replace(`\"${f.filename}\"`, withPath);\r\n }\r\n }\r\n fs.writeFileSync(outputFolder + path.sep + name, map);\r\n }\r\n fs.writeFileSync(outputFolder + path.sep + o.filename, contents);\r\n }\r\n}\r\nasync function run() {\r\n console.log(\"Transpiler CLI\");\r\n const config = config_1.TranspilerConfig.find(process.argv[2]);\r\n const libFiles = loadLib(config);\r\n const files = file_operations_1.FileOperations.loadFiles(config);\r\n console.log(\"\\nBuilding\");\r\n const t = new Transpiler.Transpiler(config.options);\r\n const reg = new abaplint.Registry();\r\n for (const f of files) {\r\n reg.addFile(new abaplint.MemoryFile(f.filename, f.contents));\r\n }\r\n for (const l of libFiles) {\r\n reg.addDependency(new abaplint.MemoryFile(l.filename, l.contents));\r\n }\r\n reg.parse();\r\n const output = await t.run(reg, new Progress());\r\n console.log(\"\\nOutput\");\r\n const outputFolder = config.output_folder;\r\n if (!fs.existsSync(outputFolder)) {\r\n fs.mkdirSync(outputFolder);\r\n }\r\n writeObjects(output.objects, config.write_source_map, outputFolder, files);\r\n console.log(output.objects.length + \" objects written to disk\");\r\n if (config.write_unit_tests === true) {\r\n fs.writeFileSync(outputFolder + path.sep + \"index.mjs\", output.unitTestScript);\r\n }\r\n fs.writeFileSync(outputFolder + path.sep + \"init.mjs\", output.initializationScript);\r\n}\r\nrun().then(() => {\r\n process.exit();\r\n}).catch((err) => {\r\n console.log(err);\r\n process.exit(1);\r\n});\r\n//# sourceMappingURL=index.js.map\n\n//# sourceURL=webpack://@abaplint/transpiler-cli/./build/index.js?");
41
+ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nconst fs = __webpack_require__(/*! fs */ \"fs\");\r\nconst path = __webpack_require__(/*! path */ \"path\");\r\nconst glob = __webpack_require__(/*! glob */ \"./node_modules/glob/glob.js\");\r\nconst childProcess = __webpack_require__(/*! child_process */ \"child_process\");\r\nconst os = __webpack_require__(/*! os */ \"os\");\r\nconst ProgressBar = __webpack_require__(/*! progress */ \"./node_modules/progress/index.js\");\r\nconst Transpiler = __webpack_require__(/*! @abaplint/transpiler */ \"./node_modules/@abaplint/transpiler/build/src/index.js\");\r\nconst abaplint = __webpack_require__(/*! @abaplint/core */ \"./node_modules/@abaplint/core/build/src/index.js\");\r\nconst config_1 = __webpack_require__(/*! ./config */ \"./build/config.js\");\r\nconst file_operations_1 = __webpack_require__(/*! ./file_operations */ \"./build/file_operations.js\");\r\nclass Progress {\r\n set(total, _text) {\r\n this.bar = new ProgressBar(\":percent - :elapseds - :text\", { total, renderThrottle: 100 });\r\n }\r\n async tick(text) {\r\n this.bar.tick({ text });\r\n this.bar.render();\r\n }\r\n}\r\nfunction loadLib(config) {\r\n const files = [];\r\n if (config.lib && config.lib !== \"\" && config.libs === undefined) {\r\n config.libs = [{ url: config.lib }];\r\n }\r\n for (const l of config.libs || []) {\r\n console.log(\"Clone: \" + l.url);\r\n const dir = fs.mkdtempSync(path.join(os.tmpdir(), \"abap_transpile-\"));\r\n childProcess.execSync(\"git clone --quiet --depth 1 \" + l.url + \" .\", { cwd: dir, stdio: \"inherit\" });\r\n let count = 0;\r\n for (let filename of glob.sync(dir + \"/src/**\", { nosort: true, nodir: true })) {\r\n const contents = fs.readFileSync(filename, \"utf8\");\r\n filename = path.basename(filename);\r\n files.push({ filename, contents });\r\n count++;\r\n }\r\n console.log(count + \" files added from lib\");\r\n file_operations_1.FileOperations.deleteFolderRecursive(dir);\r\n }\r\n return files;\r\n}\r\nfunction writeObjects(objects, writeSourceMaps, outputFolder, files) {\r\n for (const o of objects) {\r\n let contents = o.chunk.getCode();\r\n if (writeSourceMaps === true) {\r\n const name = o.filename + \".map\";\r\n contents = contents + `\\n//# sourceMappingURL=` + name;\r\n let map = o.chunk.getMap(o.filename);\r\n for (const f of files) { // hack the paths to the original files\r\n if (f.relative === undefined) {\r\n continue;\r\n }\r\n if (map.includes(`\"${f.filename}\"`)) {\r\n let withPath = `\"${f.relative}${path.sep}${f.filename}\"`;\r\n withPath = withPath.replace(/\\\\/g, \"\\\\\\\\\");\r\n map = map.replace(`\"${f.filename}\"`, withPath);\r\n }\r\n }\r\n fs.writeFileSync(outputFolder + path.sep + name, map);\r\n }\r\n fs.writeFileSync(outputFolder + path.sep + o.filename, contents);\r\n }\r\n}\r\nasync function run() {\r\n console.log(\"Transpiler CLI\");\r\n const config = config_1.TranspilerConfig.find(process.argv[2]);\r\n const libFiles = loadLib(config);\r\n const files = file_operations_1.FileOperations.loadFiles(config);\r\n console.log(\"\\nBuilding\");\r\n const t = new Transpiler.Transpiler(config.options);\r\n const reg = new abaplint.Registry();\r\n for (const f of files) {\r\n reg.addFile(new abaplint.MemoryFile(f.filename, f.contents));\r\n }\r\n for (const l of libFiles) {\r\n reg.addDependency(new abaplint.MemoryFile(l.filename, l.contents));\r\n }\r\n reg.parse();\r\n const output = await t.run(reg, new Progress());\r\n console.log(\"\\nOutput\");\r\n const outputFolder = config.output_folder;\r\n if (!fs.existsSync(outputFolder)) {\r\n fs.mkdirSync(outputFolder);\r\n }\r\n writeObjects(output.objects, config.write_source_map, outputFolder, files);\r\n console.log(output.objects.length + \" objects written to disk\");\r\n if (config.write_unit_tests === true) {\r\n fs.writeFileSync(outputFolder + path.sep + \"index.mjs\", output.unitTestScript);\r\n }\r\n fs.writeFileSync(outputFolder + path.sep + \"init.mjs\", output.initializationScript);\r\n}\r\nrun().then(() => {\r\n process.exit();\r\n}).catch((err) => {\r\n console.log(err);\r\n process.exit(1);\r\n});\r\n//# sourceMappingURL=index.js.map\n\n//# sourceURL=webpack://@abaplint/transpiler-cli/./build/index.js?");
42
42
 
43
43
  /***/ }),
44
44
 
@@ -12919,7 +12919,7 @@ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\n
12919
12919
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
12920
12920
 
12921
12921
  "use strict";
12922
- eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.ConstantTranspiler = void 0;\r\nconst core_1 = __webpack_require__(/*! @abaplint/core */ \"./node_modules/@abaplint/core/build/src/index.js\");\r\nconst chunk_1 = __webpack_require__(/*! ../chunk */ \"./node_modules/@abaplint/transpiler/build/src/chunk.js\");\r\nclass ConstantTranspiler {\r\n constructor(addGet = false) {\r\n this.addGet = addGet;\r\n }\r\n transpile(node, traversal) {\r\n const int = node.findFirstExpression(core_1.Expressions.Integer);\r\n if (int) {\r\n const val = parseInt(int.concatTokens(), 10);\r\n let ret = \"constant_\" + (val < 0 ? \"minus_\" : \"\") + Math.abs(val);\r\n if (this.addGet === true) {\r\n ret += \".get()\";\r\n }\r\n return new chunk_1.Chunk().append(ret, node, traversal);\r\n }\r\n let str = node.findFirstExpression(core_1.Expressions.ConstantString);\r\n if (str === undefined) {\r\n str = node.findFirstExpression(core_1.Expressions.TextElementString);\r\n }\r\n if (str) {\r\n let res = str.getFirstToken().getStr();\r\n if (res.startsWith(\"'\") && this.addGet === false) {\r\n const code = \"new abap.types.Character({length: \" + (res.length - 2) + \"}).set(\" + this.escape(res) + \")\";\r\n return new chunk_1.Chunk().append(code, node, traversal);\r\n }\r\n else {\r\n if (res.startsWith(\"'\")) {\r\n res = \"'\" + res.substring(1, res.length - 1).trimEnd() + \"'\";\r\n }\r\n const code = this.escape(res);\r\n return new chunk_1.Chunk().append(code, node, traversal);\r\n }\r\n }\r\n return new chunk_1.Chunk(`todo, Constant`);\r\n }\r\n escape(str) {\r\n str = str.replace(/\\\\/g, \"\\\\\\\\\");\r\n const reg = new RegExp(/(.+)''(.+)/g);\r\n while (reg.test(str)) {\r\n str = str.replace(reg, \"$1\\\\'$2\");\r\n }\r\n return str;\r\n }\r\n}\r\nexports.ConstantTranspiler = ConstantTranspiler;\r\n//# sourceMappingURL=constant.js.map\n\n//# sourceURL=webpack://@abaplint/transpiler-cli/./node_modules/@abaplint/transpiler/build/src/expressions/constant.js?");
12922
+ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.ConstantTranspiler = void 0;\r\nconst core_1 = __webpack_require__(/*! @abaplint/core */ \"./node_modules/@abaplint/core/build/src/index.js\");\r\nconst chunk_1 = __webpack_require__(/*! ../chunk */ \"./node_modules/@abaplint/transpiler/build/src/chunk.js\");\r\nclass ConstantTranspiler {\r\n constructor(addGet = false) {\r\n this.addGet = addGet;\r\n }\r\n transpile(node, traversal) {\r\n const int = node.findFirstExpression(core_1.Expressions.Integer);\r\n if (int) {\r\n const concat = int.concatTokens().trim();\r\n const post = concat.startsWith(\"-\") ? \"minus_\" : \"\";\r\n let ret = \"constant_\" + post + int.getLastToken().getStr();\r\n if (this.addGet === true) {\r\n ret += \".get()\";\r\n }\r\n return new chunk_1.Chunk().append(ret, node, traversal);\r\n }\r\n let str = node.findFirstExpression(core_1.Expressions.ConstantString);\r\n if (str === undefined) {\r\n str = node.findFirstExpression(core_1.Expressions.TextElementString);\r\n }\r\n if (str) {\r\n let res = str.getFirstToken().getStr();\r\n if (res.startsWith(\"'\") && this.addGet === false) {\r\n const code = \"new abap.types.Character({length: \" + (res.length - 2) + \"}).set(\" + this.escape(res) + \")\";\r\n return new chunk_1.Chunk().append(code, node, traversal);\r\n }\r\n else {\r\n if (res.startsWith(\"'\")) {\r\n res = \"'\" + res.substring(1, res.length - 1).trimEnd() + \"'\";\r\n }\r\n const code = this.escape(res);\r\n return new chunk_1.Chunk().append(code, node, traversal);\r\n }\r\n }\r\n return new chunk_1.Chunk(`todo, Constant`);\r\n }\r\n escape(str) {\r\n str = str.replace(/\\\\/g, \"\\\\\\\\\");\r\n const reg = new RegExp(/(.+)''(.+)/g);\r\n while (reg.test(str)) {\r\n str = str.replace(reg, \"$1\\\\'$2\");\r\n }\r\n return str;\r\n }\r\n}\r\nexports.ConstantTranspiler = ConstantTranspiler;\r\n//# sourceMappingURL=constant.js.map\n\n//# sourceURL=webpack://@abaplint/transpiler-cli/./node_modules/@abaplint/transpiler/build/src/expressions/constant.js?");
12923
12923
 
12924
12924
  /***/ }),
12925
12925
 
@@ -13194,7 +13194,7 @@ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\n
13194
13194
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
13195
13195
 
13196
13196
  "use strict";
13197
- eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.Transpiler = exports.config = void 0;\r\nconst abaplint = __webpack_require__(/*! @abaplint/core */ \"./node_modules/@abaplint/core/build/src/index.js\");\r\nconst validation_1 = __webpack_require__(/*! ./validation */ \"./node_modules/@abaplint/transpiler/build/src/validation.js\");\r\nObject.defineProperty(exports, \"config\", ({ enumerable: true, get: function () { return validation_1.config; } }));\r\nconst traversal_1 = __webpack_require__(/*! ./traversal */ \"./node_modules/@abaplint/transpiler/build/src/traversal.js\");\r\nconst requires_1 = __webpack_require__(/*! ./requires */ \"./node_modules/@abaplint/transpiler/build/src/requires.js\");\r\nconst unit_test_1 = __webpack_require__(/*! ./unit_test */ \"./node_modules/@abaplint/transpiler/build/src/unit_test.js\");\r\nconst keywords_1 = __webpack_require__(/*! ./keywords */ \"./node_modules/@abaplint/transpiler/build/src/keywords.js\");\r\nconst database_setup_1 = __webpack_require__(/*! ./database_setup */ \"./node_modules/@abaplint/transpiler/build/src/database_setup.js\");\r\nconst rearranger_1 = __webpack_require__(/*! ./rearranger */ \"./node_modules/@abaplint/transpiler/build/src/rearranger.js\");\r\nconst chunk_1 = __webpack_require__(/*! ./chunk */ \"./node_modules/@abaplint/transpiler/build/src/chunk.js\");\r\nclass Transpiler {\r\n constructor(options) {\r\n this.options = options;\r\n if (this.options === undefined) {\r\n this.options = {};\r\n }\r\n if (this.options.unknownTypes === undefined) {\r\n this.options.unknownTypes = \"compileError\";\r\n }\r\n }\r\n // workaround for web/webpack\r\n async runRaw(files) {\r\n const memory = files.map(f => new abaplint.MemoryFile(f.filename, f.contents));\r\n const reg = new abaplint.Registry().addFiles(memory).parse();\r\n return new Transpiler().run(reg);\r\n }\r\n async run(reg, progress) {\r\n var _a, _b;\r\n reg.parse();\r\n new keywords_1.Keywords().handle(reg);\r\n this.validate(reg);\r\n const dbSetup = new database_setup_1.DatabaseSetup(reg).run();\r\n const output = {\r\n objects: [],\r\n unitTestScript: new unit_test_1.UnitTest().unitTestScript(reg, (_a = this.options) === null || _a === void 0 ? void 0 : _a.skip, (_b = this.options) === null || _b === void 0 ? void 0 : _b.only),\r\n initializationScript: new unit_test_1.UnitTest().initializationScript(reg, dbSetup),\r\n databaseSetup: dbSetup,\r\n reg: reg,\r\n };\r\n progress === null || progress === void 0 ? void 0 : progress.set(reg.getObjectCount(false), \"Building, Syntax Logic\");\r\n for (const obj of reg.getObjects()) {\r\n await (progress === null || progress === void 0 ? void 0 : progress.tick(\"Building, Syntax Logic, \" + obj.getName()));\r\n if (obj instanceof abaplint.ABAPObject) {\r\n new abaplint.SyntaxLogic(reg, obj).run();\r\n }\r\n }\r\n progress === null || progress === void 0 ? void 0 : progress.set(reg.getObjectCount(false), \"Building\");\r\n for (const obj of reg.getObjects()) {\r\n await (progress === null || progress === void 0 ? void 0 : progress.tick(\"Building, \" + obj.getName()));\r\n if (obj instanceof abaplint.ABAPObject && !(obj instanceof abaplint.Objects.TypePool)) {\r\n output.objects = output.objects.concat(this.runObject(obj, reg));\r\n }\r\n }\r\n return output;\r\n }\r\n // ///////////////////////////////\r\n handleConstants(obj, file, reg) {\r\n var _a, _b;\r\n let result = \"\";\r\n const constants = this.findConstants(obj, file, reg);\r\n if (((_a = this.options) === null || _a === void 0 ? void 0 : _a.skipConstants) === false || ((_b = this.options) === null || _b === void 0 ? void 0 : _b.skipConstants) === undefined) {\r\n for (const c of Array.from(constants).sort()) {\r\n const post = c < 0 ? \"minus_\" : \"\";\r\n result += `const constant_${post}${Math.abs(c)} = new abap.types.Integer().set(${c});\\n`;\r\n }\r\n }\r\n return result;\r\n }\r\n findConstants(obj, file, reg) {\r\n var _a, _b;\r\n let constants = new Set();\r\n for (const i of ((_a = file.getStructure()) === null || _a === void 0 ? void 0 : _a.findAllExpressions(abaplint.Expressions.Integer)) || []) {\r\n const j = parseInt(i.concatTokens(), 10);\r\n constants.add(j);\r\n }\r\n // extra constants from interfaces, used for default values\r\n if (obj.getType() === \"CLAS\") {\r\n const clas = obj;\r\n for (const i of ((_b = clas.getClassDefinition()) === null || _b === void 0 ? void 0 : _b.interfaces) || []) {\r\n const intf = reg.getObject(\"INTF\", i.name);\r\n const main = intf === null || intf === void 0 ? void 0 : intf.getMainABAPFile();\r\n if (intf && main) {\r\n constants = new Set([...constants, ...this.findConstants(intf, main, reg).values()]);\r\n }\r\n }\r\n }\r\n return constants;\r\n }\r\n runObject(obj, reg) {\r\n var _a, _b, _c;\r\n const spaghetti = new abaplint.SyntaxLogic(reg, obj).run().spaghetti;\r\n let ret = [];\r\n for (const file of obj.getSequencedFiles()) {\r\n const chunk = new chunk_1.Chunk();\r\n if (((_a = this.options) === null || _a === void 0 ? void 0 : _a.addFilenames) === true) {\r\n chunk.appendString(\"// \" + file.getFilename() + \"\\n\");\r\n }\r\n chunk.appendString(this.handleConstants(obj, file, reg));\r\n const rearranged = new rearranger_1.Rearranger().run(obj.getType(), file.getStructure());\r\n const contents = new traversal_1.Traversal(spaghetti, file, obj, reg, ((_b = this.options) === null || _b === void 0 ? void 0 : _b.unknownTypes) === \"runtimeError\").traverse(rearranged);\r\n chunk.appendChunk(contents);\r\n chunk.stripLastNewline();\r\n chunk.runIndentationLogic();\r\n const exports = this.findExports(file.getStructure());\r\n const filename = file.getFilename().replace(\".abap\", \".mjs\").toLowerCase();\r\n const output = {\r\n object: {\r\n name: obj.getName(),\r\n type: obj.getType(),\r\n },\r\n filename: filename,\r\n chunk: chunk,\r\n requires: new requires_1.Requires(reg).find(obj, spaghetti.getTop(), file.getFilename()),\r\n exports: exports,\r\n };\r\n ret.push(output);\r\n }\r\n ret = this.rearrangeClassLocals(obj, ret);\r\n if (((_c = this.options) === null || _c === void 0 ? void 0 : _c.addCommonJS) === true) {\r\n ret.map(output => output.chunk = this.addImportsAndExports(output));\r\n }\r\n return ret;\r\n }\r\n /** merges the locals def and imp into one mjs file */\r\n rearrangeClassLocals(obj, output) {\r\n const ret = [];\r\n if (obj.getType() !== \"CLAS\") {\r\n return output;\r\n }\r\n let imp = undefined;\r\n let def = undefined;\r\n for (const o of output) {\r\n if (o.filename.endsWith(\".clas.locals_imp.mjs\")) {\r\n imp = o;\r\n }\r\n else if (o.filename.endsWith(\".clas.locals_def.mjs\")) {\r\n def = o;\r\n }\r\n else {\r\n ret.push(o);\r\n }\r\n }\r\n if (def) {\r\n def.filename = def.filename.replace(\".locals_def.mjs\", \".locals.mjs\");\r\n }\r\n if (imp) {\r\n imp.filename = imp.filename.replace(\".locals_imp.mjs\", \".locals.mjs\");\r\n }\r\n if (imp && def) {\r\n // remove duplicates\r\n const requires = [...def.requires];\r\n for (const r of imp.requires) {\r\n if (requires.find(a => a.filename === r.filename && a.name === r.name) === undefined) {\r\n requires.push(r);\r\n }\r\n }\r\n const chunk = new chunk_1.Chunk().appendChunk(def.chunk).appendChunk(imp.chunk);\r\n ret.push({\r\n object: imp.object,\r\n filename: imp.filename,\r\n chunk: chunk,\r\n requires: requires,\r\n exports: def.exports.concat(imp.exports),\r\n });\r\n }\r\n else if (imp) {\r\n ret.push(imp);\r\n }\r\n else if (def) {\r\n ret.push(def);\r\n }\r\n return ret;\r\n }\r\n addImportsAndExports(output) {\r\n var _a;\r\n const contents = new chunk_1.Chunk();\r\n for (const r of output.requires) {\r\n const name = (_a = r.name) === null || _a === void 0 ? void 0 : _a.toLowerCase();\r\n const filename = r.filename.replace(\".abap\", \".mjs\");\r\n if (filename === output.filename) {\r\n continue;\r\n }\r\n if (name) {\r\n contents.appendString(\"const {\" + name + \"} = await import(\\\"./\" + filename + \"\\\");\\n\");\r\n }\r\n else {\r\n contents.appendString(\"await import(\\\"./\" + filename + \"\\\");\\n\");\r\n }\r\n }\r\n contents.appendChunk(output.chunk);\r\n if (output.exports.length > 0) {\r\n contents.appendString(\"\\nexport {\" + output.exports.join(\", \") + \"};\");\r\n }\r\n return contents;\r\n }\r\n findExports(node) {\r\n var _a, _b;\r\n if (node === undefined) {\r\n return [];\r\n }\r\n const res = [];\r\n for (const c of node.findAllStatements(abaplint.Statements.ClassDefinition)) {\r\n const e = (_a = c.findFirstExpression(abaplint.Expressions.ClassName)) === null || _a === void 0 ? void 0 : _a.getFirstToken().getStr();\r\n if (e) {\r\n res.push(e.toLowerCase());\r\n }\r\n }\r\n for (const c of node.findAllStatements(abaplint.Statements.Interface)) {\r\n const e = (_b = c.findFirstExpression(abaplint.Expressions.InterfaceName)) === null || _b === void 0 ? void 0 : _b.getFirstToken().getStr();\r\n if (e) {\r\n res.push(e.toLowerCase());\r\n }\r\n }\r\n return res;\r\n }\r\n validate(reg) {\r\n const issues = new validation_1.Validation(this.options).run(reg);\r\n if (issues.length > 0) {\r\n const messages = issues.map(i => i.getKey() + \", \" +\r\n i.getMessage() + \", \" +\r\n i.getFilename() + \":\" +\r\n i.getStart().getRow());\r\n throw new Error(messages.join(\"\\n\"));\r\n }\r\n }\r\n}\r\nexports.Transpiler = Transpiler;\r\n//# sourceMappingURL=index.js.map\n\n//# sourceURL=webpack://@abaplint/transpiler-cli/./node_modules/@abaplint/transpiler/build/src/index.js?");
13197
+ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.Transpiler = exports.config = void 0;\r\nconst abaplint = __webpack_require__(/*! @abaplint/core */ \"./node_modules/@abaplint/core/build/src/index.js\");\r\nconst validation_1 = __webpack_require__(/*! ./validation */ \"./node_modules/@abaplint/transpiler/build/src/validation.js\");\r\nObject.defineProperty(exports, \"config\", ({ enumerable: true, get: function () { return validation_1.config; } }));\r\nconst traversal_1 = __webpack_require__(/*! ./traversal */ \"./node_modules/@abaplint/transpiler/build/src/traversal.js\");\r\nconst requires_1 = __webpack_require__(/*! ./requires */ \"./node_modules/@abaplint/transpiler/build/src/requires.js\");\r\nconst unit_test_1 = __webpack_require__(/*! ./unit_test */ \"./node_modules/@abaplint/transpiler/build/src/unit_test.js\");\r\nconst keywords_1 = __webpack_require__(/*! ./keywords */ \"./node_modules/@abaplint/transpiler/build/src/keywords.js\");\r\nconst database_setup_1 = __webpack_require__(/*! ./database_setup */ \"./node_modules/@abaplint/transpiler/build/src/database_setup.js\");\r\nconst rearranger_1 = __webpack_require__(/*! ./rearranger */ \"./node_modules/@abaplint/transpiler/build/src/rearranger.js\");\r\nconst chunk_1 = __webpack_require__(/*! ./chunk */ \"./node_modules/@abaplint/transpiler/build/src/chunk.js\");\r\nclass Transpiler {\r\n constructor(options) {\r\n this.options = options;\r\n if (this.options === undefined) {\r\n this.options = {};\r\n }\r\n if (this.options.unknownTypes === undefined) {\r\n this.options.unknownTypes = \"compileError\";\r\n }\r\n }\r\n // workaround for web/webpack\r\n async runRaw(files) {\r\n const memory = files.map(f => new abaplint.MemoryFile(f.filename, f.contents));\r\n const reg = new abaplint.Registry().addFiles(memory).parse();\r\n return new Transpiler().run(reg);\r\n }\r\n async run(reg, progress) {\r\n var _a, _b;\r\n reg.parse();\r\n new keywords_1.Keywords().handle(reg);\r\n this.validate(reg);\r\n const dbSetup = new database_setup_1.DatabaseSetup(reg).run();\r\n const output = {\r\n objects: [],\r\n unitTestScript: new unit_test_1.UnitTest().unitTestScript(reg, (_a = this.options) === null || _a === void 0 ? void 0 : _a.skip, (_b = this.options) === null || _b === void 0 ? void 0 : _b.only),\r\n initializationScript: new unit_test_1.UnitTest().initializationScript(reg, dbSetup),\r\n databaseSetup: dbSetup,\r\n reg: reg,\r\n };\r\n progress === null || progress === void 0 ? void 0 : progress.set(reg.getObjectCount(false), \"Building, Syntax Logic\");\r\n for (const obj of reg.getObjects()) {\r\n await (progress === null || progress === void 0 ? void 0 : progress.tick(\"Building, Syntax Logic, \" + obj.getName()));\r\n if (obj instanceof abaplint.ABAPObject) {\r\n new abaplint.SyntaxLogic(reg, obj).run();\r\n }\r\n }\r\n progress === null || progress === void 0 ? void 0 : progress.set(reg.getObjectCount(false), \"Building\");\r\n for (const obj of reg.getObjects()) {\r\n await (progress === null || progress === void 0 ? void 0 : progress.tick(\"Building, \" + obj.getName()));\r\n if (obj instanceof abaplint.ABAPObject && !(obj instanceof abaplint.Objects.TypePool)) {\r\n output.objects = output.objects.concat(this.runObject(obj, reg));\r\n }\r\n }\r\n return output;\r\n }\r\n // ///////////////////////////////\r\n handleConstants(obj, file, reg) {\r\n var _a, _b;\r\n let result = \"\";\r\n const constants = this.findConstants(obj, file, reg);\r\n if (((_a = this.options) === null || _a === void 0 ? void 0 : _a.skipConstants) === false || ((_b = this.options) === null || _b === void 0 ? void 0 : _b.skipConstants) === undefined) {\r\n for (const concat of Array.from(constants).sort()) {\r\n const post = concat.startsWith(\"-\") ? \"minus_\" : \"\";\r\n result += `const constant_${post}${concat.replace(\"-\", \"\")} = new abap.types.Integer().set(${concat});\\n`;\r\n }\r\n }\r\n return result;\r\n }\r\n findConstants(obj, file, reg) {\r\n var _a, _b;\r\n let constants = new Set();\r\n for (const i of ((_a = file.getStructure()) === null || _a === void 0 ? void 0 : _a.findAllExpressions(abaplint.Expressions.Integer)) || []) {\r\n constants.add(i.concatTokens().replace(\" \", \"\"));\r\n }\r\n // extra constants from interfaces, used for default values\r\n if (obj.getType() === \"CLAS\") {\r\n const clas = obj;\r\n for (const i of ((_b = clas.getClassDefinition()) === null || _b === void 0 ? void 0 : _b.interfaces) || []) {\r\n const intf = reg.getObject(\"INTF\", i.name);\r\n const main = intf === null || intf === void 0 ? void 0 : intf.getMainABAPFile();\r\n if (intf && main) {\r\n constants = new Set([...constants, ...this.findConstants(intf, main, reg).values()]);\r\n }\r\n }\r\n }\r\n return constants;\r\n }\r\n runObject(obj, reg) {\r\n var _a, _b, _c;\r\n const spaghetti = new abaplint.SyntaxLogic(reg, obj).run().spaghetti;\r\n let ret = [];\r\n for (const file of obj.getSequencedFiles()) {\r\n const chunk = new chunk_1.Chunk();\r\n if (((_a = this.options) === null || _a === void 0 ? void 0 : _a.addFilenames) === true) {\r\n chunk.appendString(\"// \" + file.getFilename() + \"\\n\");\r\n }\r\n chunk.appendString(this.handleConstants(obj, file, reg));\r\n const rearranged = new rearranger_1.Rearranger().run(obj.getType(), file.getStructure());\r\n const contents = new traversal_1.Traversal(spaghetti, file, obj, reg, ((_b = this.options) === null || _b === void 0 ? void 0 : _b.unknownTypes) === \"runtimeError\").traverse(rearranged);\r\n chunk.appendChunk(contents);\r\n chunk.stripLastNewline();\r\n chunk.runIndentationLogic();\r\n const exports = this.findExports(file.getStructure());\r\n const filename = file.getFilename().replace(\".abap\", \".mjs\").toLowerCase();\r\n const output = {\r\n object: {\r\n name: obj.getName(),\r\n type: obj.getType(),\r\n },\r\n filename: filename,\r\n chunk: chunk,\r\n requires: new requires_1.Requires(reg).find(obj, spaghetti.getTop(), file.getFilename()),\r\n exports: exports,\r\n };\r\n ret.push(output);\r\n }\r\n ret = this.rearrangeClassLocals(obj, ret);\r\n if (((_c = this.options) === null || _c === void 0 ? void 0 : _c.addCommonJS) === true) {\r\n ret.map(output => output.chunk = this.addImportsAndExports(output));\r\n }\r\n return ret;\r\n }\r\n /** merges the locals def and imp into one mjs file */\r\n rearrangeClassLocals(obj, output) {\r\n const ret = [];\r\n if (obj.getType() !== \"CLAS\") {\r\n return output;\r\n }\r\n let imp = undefined;\r\n let def = undefined;\r\n for (const o of output) {\r\n if (o.filename.endsWith(\".clas.locals_imp.mjs\")) {\r\n imp = o;\r\n }\r\n else if (o.filename.endsWith(\".clas.locals_def.mjs\")) {\r\n def = o;\r\n }\r\n else {\r\n ret.push(o);\r\n }\r\n }\r\n if (def) {\r\n def.filename = def.filename.replace(\".locals_def.mjs\", \".locals.mjs\");\r\n }\r\n if (imp) {\r\n imp.filename = imp.filename.replace(\".locals_imp.mjs\", \".locals.mjs\");\r\n }\r\n if (imp && def) {\r\n // remove duplicates\r\n const requires = [...def.requires];\r\n for (const r of imp.requires) {\r\n if (requires.find(a => a.filename === r.filename && a.name === r.name) === undefined) {\r\n requires.push(r);\r\n }\r\n }\r\n const chunk = new chunk_1.Chunk().appendChunk(def.chunk).appendChunk(imp.chunk);\r\n ret.push({\r\n object: imp.object,\r\n filename: imp.filename,\r\n chunk: chunk,\r\n requires: requires,\r\n exports: def.exports.concat(imp.exports),\r\n });\r\n }\r\n else if (imp) {\r\n ret.push(imp);\r\n }\r\n else if (def) {\r\n ret.push(def);\r\n }\r\n return ret;\r\n }\r\n addImportsAndExports(output) {\r\n var _a;\r\n const contents = new chunk_1.Chunk();\r\n for (const r of output.requires) {\r\n const name = (_a = r.name) === null || _a === void 0 ? void 0 : _a.toLowerCase();\r\n const filename = r.filename.replace(\".abap\", \".mjs\");\r\n if (filename === output.filename) {\r\n continue;\r\n }\r\n if (name) {\r\n contents.appendString(\"const {\" + name + \"} = await import(\\\"./\" + filename + \"\\\");\\n\");\r\n }\r\n else {\r\n contents.appendString(\"await import(\\\"./\" + filename + \"\\\");\\n\");\r\n }\r\n }\r\n contents.appendChunk(output.chunk);\r\n if (output.exports.length > 0) {\r\n contents.appendString(\"\\nexport {\" + output.exports.join(\", \") + \"};\");\r\n }\r\n return contents;\r\n }\r\n findExports(node) {\r\n var _a, _b;\r\n if (node === undefined) {\r\n return [];\r\n }\r\n const res = [];\r\n for (const c of node.findAllStatements(abaplint.Statements.ClassDefinition)) {\r\n const e = (_a = c.findFirstExpression(abaplint.Expressions.ClassName)) === null || _a === void 0 ? void 0 : _a.getFirstToken().getStr();\r\n if (e) {\r\n res.push(e.toLowerCase());\r\n }\r\n }\r\n for (const c of node.findAllStatements(abaplint.Statements.Interface)) {\r\n const e = (_b = c.findFirstExpression(abaplint.Expressions.InterfaceName)) === null || _b === void 0 ? void 0 : _b.getFirstToken().getStr();\r\n if (e) {\r\n res.push(e.toLowerCase());\r\n }\r\n }\r\n return res;\r\n }\r\n validate(reg) {\r\n const issues = new validation_1.Validation(this.options).run(reg);\r\n if (issues.length > 0) {\r\n const messages = issues.map(i => i.getKey() + \", \" +\r\n i.getMessage() + \", \" +\r\n i.getFilename() + \":\" +\r\n i.getStart().getRow());\r\n throw new Error(messages.join(\"\\n\"));\r\n }\r\n }\r\n}\r\nexports.Transpiler = Transpiler;\r\n//# sourceMappingURL=index.js.map\n\n//# sourceURL=webpack://@abaplint/transpiler-cli/./node_modules/@abaplint/transpiler/build/src/index.js?");
13198
13198
 
13199
13199
  /***/ }),
13200
13200
 
@@ -13480,7 +13480,7 @@ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\n
13480
13480
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
13481
13481
 
13482
13482
  "use strict";
13483
- eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.CreateObjectTranspiler = void 0;\r\nconst abaplint = __webpack_require__(/*! @abaplint/core */ \"./node_modules/@abaplint/core/build/src/index.js\");\r\nconst chunk_1 = __webpack_require__(/*! ../chunk */ \"./node_modules/@abaplint/transpiler/build/src/chunk.js\");\r\nclass CreateObjectTranspiler {\r\n transpile(node, traversal) {\r\n var _a;\r\n const target = traversal.traverse(node.findDirectExpression(abaplint.Expressions.Target)).getCode();\r\n let para = \"\";\r\n const parameters = node.findFirstExpression(abaplint.Expressions.ParameterListS);\r\n if (parameters) {\r\n para = traversal.traverse(parameters).getCode();\r\n }\r\n let name = \"\";\r\n const dynamic = (_a = node.findDirectExpression(abaplint.Expressions.Dynamic)) === null || _a === void 0 ? void 0 : _a.findFirstExpression(abaplint.Expressions.ConstantString);\r\n if (dynamic) {\r\n name = dynamic.getFirstToken().getStr();\r\n name = name.substring(1, name.length - 1);\r\n }\r\n else {\r\n name = this.findClassName(node, traversal);\r\n }\r\n let ret = \"\";\r\n const clas = traversal.lookupClassOrInterface(name, node.getFirstToken());\r\n const cx = traversal.lookupClassOrInterface(\"CX_SY_CREATE_OBJECT_ERROR\", node.getFirstToken());\r\n if (dynamic) {\r\n ret += `if (${clas} === undefined) { throw new ${cx}; }\\n`;\r\n }\r\n ret += target + \".set(await (new \" + clas + \"()).constructor_(\" + para + \"));\";\r\n return new chunk_1.Chunk(ret);\r\n }\r\n findClassName(node, traversal) {\r\n const c = node.findDirectExpression(abaplint.Expressions.ClassName);\r\n if (c) {\r\n return c.concatTokens();\r\n }\r\n const scope = traversal.findCurrentScopeByToken(node.getFirstToken());\r\n if (scope === undefined) {\r\n throw new Error(\"CreateObjectTranspiler, unable to lookup position\");\r\n }\r\n const target = node.findDirectExpression(abaplint.Expressions.Target);\r\n const type = traversal.determineType(node, scope);\r\n if (type === undefined) {\r\n throw new Error(`CreateObjectTranspiler, target variable \"${target === null || target === void 0 ? void 0 : target.concatTokens()}\" not found in scope`);\r\n }\r\n else if (type instanceof abaplint.BasicTypes.GenericObjectReferenceType) {\r\n return \"object\";\r\n }\r\n else if (!(type instanceof abaplint.BasicTypes.ObjectReferenceType)) {\r\n if (traversal.runtimeTypeError === false) {\r\n throw new Error(`CreateObjectTranspiler, target variable \"${target === null || target === void 0 ? void 0 : target.concatTokens()}\" not a object reference`);\r\n }\r\n else {\r\n return \"RUNTIME_ERROR\";\r\n }\r\n }\r\n return type.getIdentifierName();\r\n }\r\n}\r\nexports.CreateObjectTranspiler = CreateObjectTranspiler;\r\n//# sourceMappingURL=create_object.js.map\n\n//# sourceURL=webpack://@abaplint/transpiler-cli/./node_modules/@abaplint/transpiler/build/src/statements/create_object.js?");
13483
+ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.CreateObjectTranspiler = void 0;\r\nconst abaplint = __webpack_require__(/*! @abaplint/core */ \"./node_modules/@abaplint/core/build/src/index.js\");\r\nconst chunk_1 = __webpack_require__(/*! ../chunk */ \"./node_modules/@abaplint/transpiler/build/src/chunk.js\");\r\nconst expressions_1 = __webpack_require__(/*! ../expressions */ \"./node_modules/@abaplint/transpiler/build/src/expressions/index.js\");\r\nclass CreateObjectTranspiler {\r\n transpile(node, traversal) {\r\n var _a, _b;\r\n const target = traversal.traverse(node.findDirectExpression(abaplint.Expressions.Target)).getCode();\r\n let para = \"\";\r\n const parameters = node.findFirstExpression(abaplint.Expressions.ParameterListS);\r\n if (parameters) {\r\n para = traversal.traverse(parameters).getCode();\r\n }\r\n let name = \"\";\r\n let directGlobal = false;\r\n let dynamic = (_a = node.findDirectExpression(abaplint.Expressions.Dynamic)) === null || _a === void 0 ? void 0 : _a.findFirstExpression(abaplint.Expressions.ConstantString);\r\n if (dynamic) {\r\n name = dynamic.getFirstToken().getStr();\r\n name = name.substring(1, name.length - 1);\r\n }\r\n else {\r\n dynamic = (_b = node.findDirectExpression(abaplint.Expressions.Dynamic)) === null || _b === void 0 ? void 0 : _b.findFirstExpression(abaplint.Expressions.FieldChain);\r\n if (dynamic) {\r\n name = new expressions_1.FieldChainTranspiler(true).transpile(dynamic, traversal).getCode();\r\n directGlobal = true;\r\n }\r\n }\r\n if (name === \"\") {\r\n name = this.findClassName(node, traversal);\r\n }\r\n let ret = \"\";\r\n const clas = traversal.lookupClassOrInterface(name, node.getFirstToken(), directGlobal);\r\n const cx = traversal.lookupClassOrInterface(\"CX_SY_CREATE_OBJECT_ERROR\", node.getFirstToken());\r\n if (dynamic) {\r\n ret += `if (${clas} === undefined) { throw new ${cx}; }\\n`;\r\n }\r\n ret += target + \".set(await (new \" + clas + \"()).constructor_(\" + para + \"));\";\r\n return new chunk_1.Chunk(ret);\r\n }\r\n findClassName(node, traversal) {\r\n const c = node.findDirectExpression(abaplint.Expressions.ClassName);\r\n if (c) {\r\n return c.concatTokens();\r\n }\r\n const scope = traversal.findCurrentScopeByToken(node.getFirstToken());\r\n if (scope === undefined) {\r\n throw new Error(\"CreateObjectTranspiler, unable to lookup position\");\r\n }\r\n const target = node.findDirectExpression(abaplint.Expressions.Target);\r\n const type = traversal.determineType(node, scope);\r\n if (type === undefined) {\r\n throw new Error(`CreateObjectTranspiler, target variable \"${target === null || target === void 0 ? void 0 : target.concatTokens()}\" not found in scope`);\r\n }\r\n else if (type instanceof abaplint.BasicTypes.GenericObjectReferenceType) {\r\n return \"object\";\r\n }\r\n else if (!(type instanceof abaplint.BasicTypes.ObjectReferenceType)) {\r\n if (traversal.runtimeTypeError === false) {\r\n throw new Error(`CreateObjectTranspiler, target variable \"${target === null || target === void 0 ? void 0 : target.concatTokens()}\" not a object reference`);\r\n }\r\n else {\r\n return \"RUNTIME_ERROR\";\r\n }\r\n }\r\n return type.getIdentifierName();\r\n }\r\n}\r\nexports.CreateObjectTranspiler = CreateObjectTranspiler;\r\n//# sourceMappingURL=create_object.js.map\n\n//# sourceURL=webpack://@abaplint/transpiler-cli/./node_modules/@abaplint/transpiler/build/src/statements/create_object.js?");
13484
13484
 
13485
13485
  /***/ }),
13486
13486
 
@@ -14074,7 +14074,7 @@ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\n
14074
14074
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
14075
14075
 
14076
14076
  "use strict";
14077
- eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.SelectTranspiler = void 0;\r\nconst abaplint = __webpack_require__(/*! @abaplint/core */ \"./node_modules/@abaplint/core/build/src/index.js\");\r\nconst chunk_1 = __webpack_require__(/*! ../chunk */ \"./node_modules/@abaplint/transpiler/build/src/chunk.js\");\r\nclass SelectTranspiler {\r\n transpile(node, traversal) {\r\n var _a, _b;\r\n const target = traversal.traverse(node.findFirstExpression(abaplint.Expressions.Target)).getCode();\r\n let select = \"SELECT \";\r\n select += ((_a = node.findFirstExpression(abaplint.Expressions.SQLFieldList)) === null || _a === void 0 ? void 0 : _a.concatTokens()) + \" \";\r\n select += ((_b = node.findFirstExpression(abaplint.Expressions.SQLFrom)) === null || _b === void 0 ? void 0 : _b.concatTokens()) + \" \";\r\n if (node.concatTokens().toUpperCase().startsWith(\"SELECT SINGLE \")) {\r\n select += \"LIMIT 1\";\r\n }\r\n return new chunk_1.Chunk().append(`abap.statements.select(${target}, \"${select.trim()}\");`, node, traversal);\r\n }\r\n}\r\nexports.SelectTranspiler = SelectTranspiler;\r\n//# sourceMappingURL=select.js.map\n\n//# sourceURL=webpack://@abaplint/transpiler-cli/./node_modules/@abaplint/transpiler/build/src/statements/select.js?");
14077
+ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.SelectTranspiler = void 0;\r\nconst abaplint = __webpack_require__(/*! @abaplint/core */ \"./node_modules/@abaplint/core/build/src/index.js\");\r\nconst chunk_1 = __webpack_require__(/*! ../chunk */ \"./node_modules/@abaplint/transpiler/build/src/chunk.js\");\r\nconst expressions_1 = __webpack_require__(/*! ../expressions */ \"./node_modules/@abaplint/transpiler/build/src/expressions/index.js\");\r\nclass SelectTranspiler {\r\n transpile(node, traversal) {\r\n var _a, _b;\r\n const target = traversal.traverse(node.findFirstExpression(abaplint.Expressions.Target)).getCode();\r\n let select = \"SELECT \";\r\n select += ((_a = node.findFirstExpression(abaplint.Expressions.SQLFieldList)) === null || _a === void 0 ? void 0 : _a.concatTokens()) + \" \";\r\n select += ((_b = node.findFirstExpression(abaplint.Expressions.SQLFrom)) === null || _b === void 0 ? void 0 : _b.concatTokens()) + \" \";\r\n for (const d of node.findAllExpressionsRecursive(abaplint.Expressions.Dynamic)) {\r\n const chain = d.findFirstExpression(abaplint.Expressions.FieldChain);\r\n if (chain) {\r\n const code = new expressions_1.FieldChainTranspiler(true).transpile(chain, traversal).getCode();\r\n const search = d.concatTokens();\r\n select = select.replace(search, `\" + ${code} + \"`);\r\n }\r\n }\r\n if (node.concatTokens().toUpperCase().startsWith(\"SELECT SINGLE \")) {\r\n select += \"LIMIT 1\";\r\n }\r\n return new chunk_1.Chunk().append(`abap.statements.select(${target}, \"${select.trim()}\");`, node, traversal);\r\n }\r\n}\r\nexports.SelectTranspiler = SelectTranspiler;\r\n//# sourceMappingURL=select.js.map\n\n//# sourceURL=webpack://@abaplint/transpiler-cli/./node_modules/@abaplint/transpiler/build/src/statements/select.js?");
14078
14078
 
14079
14079
  /***/ }),
14080
14080
 
@@ -14415,7 +14415,7 @@ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\n
14415
14415
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
14416
14416
 
14417
14417
  "use strict";
14418
- eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.Traversal = void 0;\r\nconst abaplint = __webpack_require__(/*! @abaplint/core */ \"./node_modules/@abaplint/core/build/src/index.js\");\r\nconst StatementTranspilers = __webpack_require__(/*! ./statements */ \"./node_modules/@abaplint/transpiler/build/src/statements/index.js\");\r\nconst ExpressionTranspilers = __webpack_require__(/*! ./expressions */ \"./node_modules/@abaplint/transpiler/build/src/expressions/index.js\");\r\nconst StructureTranspilers = __webpack_require__(/*! ./structures */ \"./node_modules/@abaplint/transpiler/build/src/structures/index.js\");\r\nconst types_1 = __webpack_require__(/*! ./types */ \"./node_modules/@abaplint/transpiler/build/src/types.js\");\r\nconst chunk_1 = __webpack_require__(/*! ./chunk */ \"./node_modules/@abaplint/transpiler/build/src/chunk.js\");\r\nclass Traversal {\r\n constructor(spaghetti, file, obj, reg, runtimeTypeError = false) {\r\n this.scopeCache = undefined;\r\n this.spaghetti = spaghetti;\r\n this.file = file;\r\n this.obj = obj;\r\n this.reg = reg;\r\n this.runtimeTypeError = runtimeTypeError;\r\n }\r\n getCurrentObject() {\r\n return this.obj;\r\n }\r\n traverse(node) {\r\n if (node instanceof abaplint.Nodes.StructureNode) {\r\n return this.traverseStructure(node);\r\n }\r\n else if (node instanceof abaplint.Nodes.StatementNode) {\r\n return this.traverseStatement(node);\r\n }\r\n else if (node instanceof abaplint.Nodes.ExpressionNode) {\r\n return this.traverseExpression(node);\r\n }\r\n else if (node === undefined) {\r\n throw new Error(\"Traverse, node undefined\");\r\n }\r\n else {\r\n throw new Error(\"Traverse, unexpected node type\");\r\n }\r\n }\r\n getFilename() {\r\n return this.file.getFilename();\r\n }\r\n getFile() {\r\n return this.file;\r\n }\r\n getSpaghetti() {\r\n return this.spaghetti;\r\n }\r\n /** finds a statement in the _current_ file given a position */\r\n findStatementInFile(pos) {\r\n for (const s of this.file.getStatements()) {\r\n if (pos.isBetween(s.getStart(), s.getEnd())) {\r\n return s;\r\n }\r\n }\r\n return undefined;\r\n }\r\n findCurrentScopeByToken(token) {\r\n const filename = this.file.getFilename();\r\n if (this.scopeCache\r\n && this.scopeCache.filename === filename\r\n && token.getEnd().isBetween(this.scopeCache.cov.start, this.scopeCache.cov.end)) {\r\n return this.scopeCache.node;\r\n }\r\n const node = this.spaghetti.lookupPosition(token.getStart(), filename);\r\n // note: cache only works for leafs, as parent nodes cover multiple leaves\r\n if (node && node.getChildren().length === 0) {\r\n this.scopeCache = {\r\n cov: node.calcCoverage(),\r\n filename: filename,\r\n node: node,\r\n };\r\n }\r\n else {\r\n this.scopeCache = undefined;\r\n }\r\n return node;\r\n }\r\n getInterfaceDefinition(token) {\r\n let scope = this.findCurrentScopeByToken(token);\r\n while (scope !== undefined) {\r\n if (scope.getIdentifier().stype === abaplint.ScopeType.Interface) {\r\n return scope.findInterfaceDefinition(scope === null || scope === void 0 ? void 0 : scope.getIdentifier().sname);\r\n }\r\n scope = scope.getParent();\r\n }\r\n return undefined;\r\n }\r\n getClassDefinition(token) {\r\n let scope = this.findCurrentScopeByToken(token);\r\n while (scope !== undefined) {\r\n if (scope.getIdentifier().stype === abaplint.ScopeType.ClassImplementation\r\n || scope.getIdentifier().stype === abaplint.ScopeType.ClassDefinition) {\r\n return scope.findClassDefinition(scope === null || scope === void 0 ? void 0 : scope.getIdentifier().sname);\r\n }\r\n scope = scope.getParent();\r\n }\r\n return undefined;\r\n }\r\n isClassAttribute(token) {\r\n const scope = this.findCurrentScopeByToken(token);\r\n if (scope === undefined) {\r\n throw new Error(\"isClassAttribute, unable to lookup position\");\r\n }\r\n const name = token.getStr();\r\n if (name.toLowerCase() === \"me\") {\r\n return true;\r\n }\r\n const found = scope.findScopeForVariable(name);\r\n if (found && (found.stype === abaplint.ScopeType.MethodInstance\r\n || found.stype === abaplint.ScopeType.ClassImplementation)) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n prefixAndName(t, filename) {\r\n let name = t.getStr().toLowerCase();\r\n if (filename && this.getCurrentObject().getABAPFileByName(filename) === undefined) {\r\n // the prefix is from a different object\r\n const file = this.reg.getFileByName(filename);\r\n if (file) {\r\n const found = this.reg.findObjectForFile(file);\r\n if (found) {\r\n if (found instanceof abaplint.Objects.Interface) {\r\n return this.lookupClassOrInterface(found.getName(), t) + \".\" + found.getName().toLowerCase() + \"$\" + name;\r\n }\r\n else {\r\n return this.lookupClassOrInterface(found.getName(), t) + \".\" + name;\r\n }\r\n }\r\n }\r\n }\r\n const className = this.isStaticClassAttribute(t);\r\n if (className) {\r\n name = className + \".\" + name;\r\n }\r\n else if (name === \"super\") {\r\n return name;\r\n }\r\n else if (this.isClassAttribute(t)) {\r\n name = \"this.\" + name;\r\n }\r\n else if (this.isBuiltinVariable(t)) {\r\n name = \"abap.builtin.\" + name;\r\n }\r\n return name;\r\n }\r\n isStaticClassAttribute(token) {\r\n const scope = this.findCurrentScopeByToken(token);\r\n if (scope === undefined) {\r\n throw new Error(`isStaticClassAttribute, unable to lookup position, ${token.getStr()},${token.getRow()},${token.getCol()},` +\r\n this.file.getFilename());\r\n }\r\n const name = token.getStr();\r\n const found = scope.findScopeForVariable(name);\r\n const id = scope.findVariable(name);\r\n if (found && id\r\n && id.getMeta().includes(\"static\" /* Static */)\r\n && found.stype === abaplint.ScopeType.ClassImplementation) {\r\n // console.dir(found.sname);\r\n return found.sname.toLowerCase();\r\n }\r\n return undefined;\r\n }\r\n isBuiltinMethod(token) {\r\n const scope = this.findCurrentScopeByToken(token);\r\n if (scope === undefined) {\r\n return false;\r\n }\r\n for (const r of scope.getData().references) {\r\n if (r.referenceType === abaplint.ReferenceType.BuiltinMethodReference\r\n && r.position.getStart().equals(token.getStart())) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n findMethodReference(token, scope) {\r\n var _a, _b;\r\n if (scope === undefined) {\r\n return undefined;\r\n }\r\n for (const r of scope.getData().references) {\r\n if (r.referenceType === abaplint.ReferenceType.MethodReference\r\n && r.position.getStart().equals(token.getStart())\r\n && r.resolved instanceof abaplint.Types.MethodDefinition) {\r\n let name = r.resolved.getName();\r\n if (((_a = r.extra) === null || _a === void 0 ? void 0 : _a.ooName) && ((_b = r.extra) === null || _b === void 0 ? void 0 : _b.ooType) === \"INTF\") {\r\n name = r.extra.ooName + \"$\" + name;\r\n }\r\n return { def: r.resolved, name };\r\n }\r\n else if (r.referenceType === abaplint.ReferenceType.BuiltinMethodReference\r\n && r.position.getStart().equals(token.getStart())) {\r\n const def = r.resolved;\r\n const name = def.getName();\r\n return { def, name };\r\n }\r\n }\r\n return undefined;\r\n }\r\n isBuiltinVariable(token) {\r\n const scope = this.findCurrentScopeByToken(token);\r\n if (scope === undefined) {\r\n throw new Error(\"isBuiltin, unable to lookup position\");\r\n }\r\n const name = token.getStr();\r\n const found = scope.findScopeForVariable(name);\r\n if (found && found.stype === abaplint.ScopeType.BuiltIn) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n // returns the interface name if interfaced\r\n isInterfaceAttribute(token) {\r\n const ref = this.findReadOrWriteReference(token);\r\n if (ref === undefined) {\r\n return undefined;\r\n }\r\n // local classes\r\n const scope = this.findCurrentScopeByToken(ref.getToken());\r\n if ((scope === null || scope === void 0 ? void 0 : scope.getIdentifier().stype) === abaplint.ScopeType.Interface) {\r\n return scope === null || scope === void 0 ? void 0 : scope.getIdentifier().sname;\r\n }\r\n // global classes\r\n const file = this.reg.getFileByName(ref.getFilename());\r\n if (file) {\r\n const obj = this.reg.findObjectForFile(file);\r\n if ((obj === null || obj === void 0 ? void 0 : obj.getType()) === \"INTF\") {\r\n return obj.getName().toLowerCase();\r\n }\r\n }\r\n return undefined;\r\n }\r\n findReadOrWriteReference(token) {\r\n const scope = this.findCurrentScopeByToken(token);\r\n if (scope === undefined) {\r\n return undefined;\r\n }\r\n for (const r of scope.getData().references) {\r\n if ((r.referenceType === abaplint.ReferenceType.DataReadReference\r\n || r.referenceType === abaplint.ReferenceType.DataWriteReference)\r\n && r.position.getStart().equals(token.getStart())) {\r\n return r.resolved;\r\n }\r\n }\r\n return undefined;\r\n }\r\n buildConstructorContents(scope, def, inputName) {\r\n /*\r\n const vars = scope?.getData().vars;\r\n if (vars === undefined || Object.keys(vars).length === 0) {\r\n return \"\";\r\n }\r\n */\r\n let ret = \"\";\r\n if (def.getSuperClass() !== undefined) {\r\n // todo, more here, there might be parameters to pass\r\n // for now just pass the same input\r\n ret += `await super.constructor_(${inputName});\\n`;\r\n }\r\n ret += \"this.me = new abap.types.ABAPObject();\\n\";\r\n ret += \"this.me.set(this);\\n\";\r\n for (const a of def.getAttributes().getAll()) {\r\n if (a.getMeta().includes(\"static\" /* Static */) === true) {\r\n continue;\r\n }\r\n const name = a.getName().toLowerCase();\r\n ret += \"this.\" + name + \" = \" + new types_1.TranspileTypes().toType(a.getType()) + \";\\n\";\r\n }\r\n // attributes from directly implemented interfaces(not interfaces implemented in super classes)\r\n for (const i of def.getImplementing()) {\r\n ret += this.dataFromInterfaces(i.name, scope);\r\n }\r\n // handle aliases after initialization of carrier variables\r\n for (const a of def.getAliases().getAll()) {\r\n ret += \"this.\" + a.getName() + \" = this.\" + a.getComponent().replace(\"~\", \"$\") + \";\\n\";\r\n }\r\n // constants can be accessed both statically and via reference\r\n for (const c of def.getAttributes().getConstants()) {\r\n ret += \"this.\" + c.getName() + \" = \" + def.getName() + \".\" + c.getName() + \";\\n\";\r\n }\r\n return ret;\r\n }\r\n findInterfaceDefinition(name, scope) {\r\n let intf = scope === null || scope === void 0 ? void 0 : scope.findInterfaceDefinition(name);\r\n if (intf === undefined) {\r\n const iglobal = this.reg.getObject(\"INTF\", name);\r\n intf = iglobal === null || iglobal === void 0 ? void 0 : iglobal.getDefinition();\r\n }\r\n return intf;\r\n }\r\n findClassDefinition(name, scope) {\r\n let clas = scope === null || scope === void 0 ? void 0 : scope.findClassDefinition(name);\r\n if (clas === undefined) {\r\n const iglobal = this.reg.getObject(\"CLAS\", name);\r\n clas = iglobal === null || iglobal === void 0 ? void 0 : iglobal.getDefinition();\r\n }\r\n return clas;\r\n }\r\n dataFromInterfaces(name, scope) {\r\n let ret = \"\";\r\n const intf = this.findInterfaceDefinition(name, scope);\r\n for (const a of (intf === null || intf === void 0 ? void 0 : intf.getAttributes().getAll()) || []) {\r\n if (a.getMeta().includes(\"static\" /* Static */) === true) {\r\n continue;\r\n }\r\n const n = name.toLowerCase() + \"$\" + a.getName().toLowerCase();\r\n ret += \"this.\" + n + \" = \" + new types_1.TranspileTypes().toType(a.getType()) + \";\\n\";\r\n }\r\n for (const i of (intf === null || intf === void 0 ? void 0 : intf.getImplementing()) || []) {\r\n ret += this.dataFromInterfaces(i.name, scope);\r\n }\r\n return ret;\r\n }\r\n determineType(node, scope) {\r\n var _a;\r\n if (scope === undefined) {\r\n return undefined;\r\n }\r\n const found = node.findDirectExpression(abaplint.Expressions.Target);\r\n if (found === undefined) {\r\n return undefined;\r\n }\r\n let context = undefined;\r\n for (const c of found.getChildren()) {\r\n if (context === undefined) {\r\n context = (_a = scope.findVariable(c.getFirstToken().getStr())) === null || _a === void 0 ? void 0 : _a.getType();\r\n }\r\n else if (c.get() instanceof abaplint.Expressions.ComponentName\r\n && context instanceof abaplint.BasicTypes.StructureType) {\r\n context = context.getComponentByName(c.getFirstToken().getStr());\r\n }\r\n }\r\n return context;\r\n }\r\n ////////////////////////////\r\n registerClassOrInterface(def) {\r\n if (def === undefined) {\r\n return \"\";\r\n }\r\n const name = def.getName();\r\n if (def.isGlobal() === false) {\r\n const prefix = this.buildPrefix(def);\r\n return `abap.Classes['${prefix}-${name.toUpperCase()}'] = ${name.toLowerCase()};`;\r\n }\r\n else {\r\n return `abap.Classes['${name.toUpperCase()}'] = ${name.toLowerCase()};`;\r\n }\r\n }\r\n lookupClassOrInterface(name, token) {\r\n var _a, _b;\r\n if (name === undefined || token === undefined) {\r\n return \"abap.Classes['undefined']\";\r\n }\r\n const scope = this.findCurrentScopeByToken(token);\r\n // todo, add explicit type,\r\n let def = scope === null || scope === void 0 ? void 0 : scope.findClassDefinition(name);\r\n if (def === undefined) {\r\n def = scope === null || scope === void 0 ? void 0 : scope.findInterfaceDefinition(name);\r\n }\r\n if (def) {\r\n if (def.isGlobal() === false) {\r\n const prefix = this.buildPrefix(def);\r\n return `abap.Classes['${prefix}-${(_a = def === null || def === void 0 ? void 0 : def.getName()) === null || _a === void 0 ? void 0 : _a.toUpperCase()}']`;\r\n }\r\n else {\r\n return `abap.Classes['${(_b = def === null || def === void 0 ? void 0 : def.getName()) === null || _b === void 0 ? void 0 : _b.toUpperCase()}']`;\r\n }\r\n }\r\n else {\r\n // assume global\r\n return \"abap.Classes['\" + name.toUpperCase() + \"']\";\r\n }\r\n }\r\n buildPrefix(def) {\r\n const file = this.reg.getFileByName(def.getFilename());\r\n if (file === undefined) {\r\n return \"NOT_FOUND\";\r\n }\r\n const obj = this.reg.findObjectForFile(file);\r\n return (obj === null || obj === void 0 ? void 0 : obj.getType()) + \"-\" + (obj === null || obj === void 0 ? void 0 : obj.getName());\r\n }\r\n ////////////////////////////\r\n traverseStructure(node) {\r\n const list = StructureTranspilers;\r\n const ret = new chunk_1.Chunk();\r\n for (const c of node.getChildren()) {\r\n if (c instanceof abaplint.Nodes.StructureNode) {\r\n const search = c.get().constructor.name + \"Transpiler\";\r\n if (list[search]) {\r\n const transpiler = new list[search]();\r\n ret.appendChunk(transpiler.transpile(c, this));\r\n continue;\r\n }\r\n ret.appendChunk(this.traverseStructure(c));\r\n }\r\n else if (c instanceof abaplint.Nodes.StatementNode) {\r\n ret.appendChunk(this.traverseStatement(c));\r\n }\r\n else {\r\n throw new Error(\"traverseStructure, unexpected child node type\");\r\n }\r\n }\r\n return ret;\r\n }\r\n traverseStatement(node) {\r\n const list = StatementTranspilers;\r\n const search = node.get().constructor.name + \"Transpiler\";\r\n if (list[search]) {\r\n const transpiler = new list[search]();\r\n const chunk = transpiler.transpile(node, this);\r\n chunk.appendString(\"\\n\");\r\n return chunk;\r\n }\r\n throw new Error(`Statement ${node.get().constructor.name} not supported, ${node.concatTokens()}`);\r\n }\r\n traverseExpression(node) {\r\n const list = ExpressionTranspilers;\r\n const search = node.get().constructor.name + \"Transpiler\";\r\n if (list[search]) {\r\n const transpiler = new list[search]();\r\n return transpiler.transpile(node, this);\r\n }\r\n throw new Error(`Expression ${node.get().constructor.name} not supported, ${node.concatTokens()}`);\r\n }\r\n}\r\nexports.Traversal = Traversal;\r\n//# sourceMappingURL=traversal.js.map\n\n//# sourceURL=webpack://@abaplint/transpiler-cli/./node_modules/@abaplint/transpiler/build/src/traversal.js?");
14418
+ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.Traversal = void 0;\r\nconst abaplint = __webpack_require__(/*! @abaplint/core */ \"./node_modules/@abaplint/core/build/src/index.js\");\r\nconst StatementTranspilers = __webpack_require__(/*! ./statements */ \"./node_modules/@abaplint/transpiler/build/src/statements/index.js\");\r\nconst ExpressionTranspilers = __webpack_require__(/*! ./expressions */ \"./node_modules/@abaplint/transpiler/build/src/expressions/index.js\");\r\nconst StructureTranspilers = __webpack_require__(/*! ./structures */ \"./node_modules/@abaplint/transpiler/build/src/structures/index.js\");\r\nconst types_1 = __webpack_require__(/*! ./types */ \"./node_modules/@abaplint/transpiler/build/src/types.js\");\r\nconst chunk_1 = __webpack_require__(/*! ./chunk */ \"./node_modules/@abaplint/transpiler/build/src/chunk.js\");\r\nclass Traversal {\r\n constructor(spaghetti, file, obj, reg, runtimeTypeError = false) {\r\n this.scopeCache = undefined;\r\n this.spaghetti = spaghetti;\r\n this.file = file;\r\n this.obj = obj;\r\n this.reg = reg;\r\n this.runtimeTypeError = runtimeTypeError;\r\n }\r\n getCurrentObject() {\r\n return this.obj;\r\n }\r\n traverse(node) {\r\n if (node instanceof abaplint.Nodes.StructureNode) {\r\n return this.traverseStructure(node);\r\n }\r\n else if (node instanceof abaplint.Nodes.StatementNode) {\r\n return this.traverseStatement(node);\r\n }\r\n else if (node instanceof abaplint.Nodes.ExpressionNode) {\r\n return this.traverseExpression(node);\r\n }\r\n else if (node === undefined) {\r\n throw new Error(\"Traverse, node undefined\");\r\n }\r\n else {\r\n throw new Error(\"Traverse, unexpected node type\");\r\n }\r\n }\r\n getFilename() {\r\n return this.file.getFilename();\r\n }\r\n getFile() {\r\n return this.file;\r\n }\r\n getSpaghetti() {\r\n return this.spaghetti;\r\n }\r\n /** finds a statement in the _current_ file given a position */\r\n findStatementInFile(pos) {\r\n for (const s of this.file.getStatements()) {\r\n if (pos.isBetween(s.getStart(), s.getEnd())) {\r\n return s;\r\n }\r\n }\r\n return undefined;\r\n }\r\n findCurrentScopeByToken(token) {\r\n const filename = this.file.getFilename();\r\n if (this.scopeCache\r\n && this.scopeCache.filename === filename\r\n && token.getEnd().isBetween(this.scopeCache.cov.start, this.scopeCache.cov.end)) {\r\n return this.scopeCache.node;\r\n }\r\n const node = this.spaghetti.lookupPosition(token.getStart(), filename);\r\n // note: cache only works for leafs, as parent nodes cover multiple leaves\r\n if (node && node.getChildren().length === 0) {\r\n this.scopeCache = {\r\n cov: node.calcCoverage(),\r\n filename: filename,\r\n node: node,\r\n };\r\n }\r\n else {\r\n this.scopeCache = undefined;\r\n }\r\n return node;\r\n }\r\n getInterfaceDefinition(token) {\r\n let scope = this.findCurrentScopeByToken(token);\r\n while (scope !== undefined) {\r\n if (scope.getIdentifier().stype === abaplint.ScopeType.Interface) {\r\n return scope.findInterfaceDefinition(scope === null || scope === void 0 ? void 0 : scope.getIdentifier().sname);\r\n }\r\n scope = scope.getParent();\r\n }\r\n return undefined;\r\n }\r\n getClassDefinition(token) {\r\n let scope = this.findCurrentScopeByToken(token);\r\n while (scope !== undefined) {\r\n if (scope.getIdentifier().stype === abaplint.ScopeType.ClassImplementation\r\n || scope.getIdentifier().stype === abaplint.ScopeType.ClassDefinition) {\r\n return scope.findClassDefinition(scope === null || scope === void 0 ? void 0 : scope.getIdentifier().sname);\r\n }\r\n scope = scope.getParent();\r\n }\r\n return undefined;\r\n }\r\n isClassAttribute(token) {\r\n const scope = this.findCurrentScopeByToken(token);\r\n if (scope === undefined) {\r\n throw new Error(\"isClassAttribute, unable to lookup position\");\r\n }\r\n const name = token.getStr();\r\n if (name.toLowerCase() === \"me\") {\r\n return true;\r\n }\r\n const found = scope.findScopeForVariable(name);\r\n if (found && (found.stype === abaplint.ScopeType.MethodInstance\r\n || found.stype === abaplint.ScopeType.ClassImplementation)) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n prefixAndName(t, filename) {\r\n let name = t.getStr().toLowerCase();\r\n if (filename && this.getCurrentObject().getABAPFileByName(filename) === undefined) {\r\n // the prefix is from a different object\r\n const file = this.reg.getFileByName(filename);\r\n if (file) {\r\n const found = this.reg.findObjectForFile(file);\r\n if (found) {\r\n if (found instanceof abaplint.Objects.Interface) {\r\n return this.lookupClassOrInterface(found.getName(), t) + \".\" + found.getName().toLowerCase() + \"$\" + name;\r\n }\r\n else {\r\n return this.lookupClassOrInterface(found.getName(), t) + \".\" + name;\r\n }\r\n }\r\n }\r\n }\r\n const className = this.isStaticClassAttribute(t);\r\n if (className) {\r\n name = className + \".\" + name;\r\n }\r\n else if (name === \"super\") {\r\n return name;\r\n }\r\n else if (this.isClassAttribute(t)) {\r\n name = \"this.\" + name;\r\n }\r\n else if (this.isBuiltinVariable(t)) {\r\n name = \"abap.builtin.\" + name;\r\n }\r\n return name;\r\n }\r\n isStaticClassAttribute(token) {\r\n const scope = this.findCurrentScopeByToken(token);\r\n if (scope === undefined) {\r\n throw new Error(`isStaticClassAttribute, unable to lookup position, ${token.getStr()},${token.getRow()},${token.getCol()},` +\r\n this.file.getFilename());\r\n }\r\n const name = token.getStr();\r\n const found = scope.findScopeForVariable(name);\r\n const id = scope.findVariable(name);\r\n if (found && id\r\n && id.getMeta().includes(\"static\" /* Static */)\r\n && found.stype === abaplint.ScopeType.ClassImplementation) {\r\n // console.dir(found.sname);\r\n return found.sname.toLowerCase();\r\n }\r\n return undefined;\r\n }\r\n isBuiltinMethod(token) {\r\n const scope = this.findCurrentScopeByToken(token);\r\n if (scope === undefined) {\r\n return false;\r\n }\r\n for (const r of scope.getData().references) {\r\n if (r.referenceType === abaplint.ReferenceType.BuiltinMethodReference\r\n && r.position.getStart().equals(token.getStart())) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n findMethodReference(token, scope) {\r\n var _a, _b;\r\n if (scope === undefined) {\r\n return undefined;\r\n }\r\n for (const r of scope.getData().references) {\r\n if (r.referenceType === abaplint.ReferenceType.MethodReference\r\n && r.position.getStart().equals(token.getStart())\r\n && r.resolved instanceof abaplint.Types.MethodDefinition) {\r\n let name = r.resolved.getName();\r\n if (((_a = r.extra) === null || _a === void 0 ? void 0 : _a.ooName) && ((_b = r.extra) === null || _b === void 0 ? void 0 : _b.ooType) === \"INTF\") {\r\n name = r.extra.ooName + \"$\" + name;\r\n }\r\n return { def: r.resolved, name };\r\n }\r\n else if (r.referenceType === abaplint.ReferenceType.BuiltinMethodReference\r\n && r.position.getStart().equals(token.getStart())) {\r\n const def = r.resolved;\r\n const name = def.getName();\r\n return { def, name };\r\n }\r\n }\r\n return undefined;\r\n }\r\n isBuiltinVariable(token) {\r\n const scope = this.findCurrentScopeByToken(token);\r\n if (scope === undefined) {\r\n throw new Error(\"isBuiltin, unable to lookup position\");\r\n }\r\n const name = token.getStr();\r\n const found = scope.findScopeForVariable(name);\r\n if (found && found.stype === abaplint.ScopeType.BuiltIn) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n // returns the interface name if interfaced\r\n isInterfaceAttribute(token) {\r\n const ref = this.findReadOrWriteReference(token);\r\n if (ref === undefined) {\r\n return undefined;\r\n }\r\n // local classes\r\n const scope = this.findCurrentScopeByToken(ref.getToken());\r\n if ((scope === null || scope === void 0 ? void 0 : scope.getIdentifier().stype) === abaplint.ScopeType.Interface) {\r\n return scope === null || scope === void 0 ? void 0 : scope.getIdentifier().sname;\r\n }\r\n // global classes\r\n const file = this.reg.getFileByName(ref.getFilename());\r\n if (file) {\r\n const obj = this.reg.findObjectForFile(file);\r\n if ((obj === null || obj === void 0 ? void 0 : obj.getType()) === \"INTF\") {\r\n return obj.getName().toLowerCase();\r\n }\r\n }\r\n return undefined;\r\n }\r\n findReadOrWriteReference(token) {\r\n const scope = this.findCurrentScopeByToken(token);\r\n if (scope === undefined) {\r\n return undefined;\r\n }\r\n for (const r of scope.getData().references) {\r\n if ((r.referenceType === abaplint.ReferenceType.DataReadReference\r\n || r.referenceType === abaplint.ReferenceType.DataWriteReference)\r\n && r.position.getStart().equals(token.getStart())) {\r\n return r.resolved;\r\n }\r\n }\r\n return undefined;\r\n }\r\n buildConstructorContents(scope, def, inputName) {\r\n /*\r\n const vars = scope?.getData().vars;\r\n if (vars === undefined || Object.keys(vars).length === 0) {\r\n return \"\";\r\n }\r\n */\r\n let ret = \"\";\r\n if (def.getSuperClass() !== undefined) {\r\n // todo, more here, there might be parameters to pass\r\n // for now just pass the same input\r\n ret += `await super.constructor_(${inputName});\\n`;\r\n }\r\n ret += \"this.me = new abap.types.ABAPObject();\\n\";\r\n ret += \"this.me.set(this);\\n\";\r\n for (const a of def.getAttributes().getAll()) {\r\n if (a.getMeta().includes(\"static\" /* Static */) === true) {\r\n continue;\r\n }\r\n const name = a.getName().toLowerCase();\r\n ret += \"this.\" + name + \" = \" + new types_1.TranspileTypes().toType(a.getType()) + \";\\n\";\r\n }\r\n // attributes from directly implemented interfaces(not interfaces implemented in super classes)\r\n for (const i of def.getImplementing()) {\r\n ret += this.dataFromInterfaces(i.name, scope);\r\n }\r\n // handle aliases after initialization of carrier variables\r\n for (const a of def.getAliases().getAll()) {\r\n ret += \"this.\" + a.getName() + \" = this.\" + a.getComponent().replace(\"~\", \"$\") + \";\\n\";\r\n }\r\n // constants can be accessed both statically and via reference\r\n for (const c of def.getAttributes().getConstants()) {\r\n ret += \"this.\" + c.getName() + \" = \" + def.getName() + \".\" + c.getName() + \";\\n\";\r\n }\r\n return ret;\r\n }\r\n findInterfaceDefinition(name, scope) {\r\n let intf = scope === null || scope === void 0 ? void 0 : scope.findInterfaceDefinition(name);\r\n if (intf === undefined) {\r\n const iglobal = this.reg.getObject(\"INTF\", name);\r\n intf = iglobal === null || iglobal === void 0 ? void 0 : iglobal.getDefinition();\r\n }\r\n return intf;\r\n }\r\n findClassDefinition(name, scope) {\r\n let clas = scope === null || scope === void 0 ? void 0 : scope.findClassDefinition(name);\r\n if (clas === undefined) {\r\n const iglobal = this.reg.getObject(\"CLAS\", name);\r\n clas = iglobal === null || iglobal === void 0 ? void 0 : iglobal.getDefinition();\r\n }\r\n return clas;\r\n }\r\n dataFromInterfaces(name, scope) {\r\n let ret = \"\";\r\n const intf = this.findInterfaceDefinition(name, scope);\r\n for (const a of (intf === null || intf === void 0 ? void 0 : intf.getAttributes().getAll()) || []) {\r\n if (a.getMeta().includes(\"static\" /* Static */) === true) {\r\n continue;\r\n }\r\n const n = name.toLowerCase() + \"$\" + a.getName().toLowerCase();\r\n ret += \"this.\" + n + \" = \" + new types_1.TranspileTypes().toType(a.getType()) + \";\\n\";\r\n }\r\n for (const i of (intf === null || intf === void 0 ? void 0 : intf.getImplementing()) || []) {\r\n ret += this.dataFromInterfaces(i.name, scope);\r\n }\r\n return ret;\r\n }\r\n determineType(node, scope) {\r\n var _a;\r\n if (scope === undefined) {\r\n return undefined;\r\n }\r\n const found = node.findDirectExpression(abaplint.Expressions.Target);\r\n if (found === undefined) {\r\n return undefined;\r\n }\r\n let context = undefined;\r\n for (const c of found.getChildren()) {\r\n if (context === undefined) {\r\n context = (_a = scope.findVariable(c.getFirstToken().getStr())) === null || _a === void 0 ? void 0 : _a.getType();\r\n }\r\n else if (c.get() instanceof abaplint.Expressions.ComponentName\r\n && context instanceof abaplint.BasicTypes.StructureType) {\r\n context = context.getComponentByName(c.getFirstToken().getStr());\r\n }\r\n }\r\n return context;\r\n }\r\n ////////////////////////////\r\n registerClassOrInterface(def) {\r\n if (def === undefined) {\r\n return \"\";\r\n }\r\n const name = def.getName();\r\n if (def.isGlobal() === false) {\r\n const prefix = this.buildPrefix(def);\r\n return `abap.Classes['${prefix}-${name.toUpperCase()}'] = ${name.toLowerCase()};`;\r\n }\r\n else {\r\n return `abap.Classes['${name.toUpperCase()}'] = ${name.toLowerCase()};`;\r\n }\r\n }\r\n lookupClassOrInterface(name, token, directGlobal = false) {\r\n var _a, _b;\r\n if (name === undefined || token === undefined) {\r\n return \"abap.Classes['undefined']\";\r\n }\r\n if (directGlobal === true) {\r\n return \"abap.Classes[\" + name + \"]\";\r\n }\r\n const scope = this.findCurrentScopeByToken(token);\r\n // todo, add explicit type,\r\n let def = scope === null || scope === void 0 ? void 0 : scope.findClassDefinition(name);\r\n if (def === undefined) {\r\n def = scope === null || scope === void 0 ? void 0 : scope.findInterfaceDefinition(name);\r\n }\r\n if (def) {\r\n if (def.isGlobal() === false) {\r\n const prefix = this.buildPrefix(def);\r\n return `abap.Classes['${prefix}-${(_a = def === null || def === void 0 ? void 0 : def.getName()) === null || _a === void 0 ? void 0 : _a.toUpperCase()}']`;\r\n }\r\n else {\r\n return `abap.Classes['${(_b = def === null || def === void 0 ? void 0 : def.getName()) === null || _b === void 0 ? void 0 : _b.toUpperCase()}']`;\r\n }\r\n }\r\n else {\r\n // assume global\r\n return \"abap.Classes['\" + name.toUpperCase() + \"']\";\r\n }\r\n }\r\n buildPrefix(def) {\r\n const file = this.reg.getFileByName(def.getFilename());\r\n if (file === undefined) {\r\n return \"NOT_FOUND\";\r\n }\r\n const obj = this.reg.findObjectForFile(file);\r\n return (obj === null || obj === void 0 ? void 0 : obj.getType()) + \"-\" + (obj === null || obj === void 0 ? void 0 : obj.getName());\r\n }\r\n ////////////////////////////\r\n traverseStructure(node) {\r\n const list = StructureTranspilers;\r\n const ret = new chunk_1.Chunk();\r\n for (const c of node.getChildren()) {\r\n if (c instanceof abaplint.Nodes.StructureNode) {\r\n const search = c.get().constructor.name + \"Transpiler\";\r\n if (list[search]) {\r\n const transpiler = new list[search]();\r\n ret.appendChunk(transpiler.transpile(c, this));\r\n continue;\r\n }\r\n ret.appendChunk(this.traverseStructure(c));\r\n }\r\n else if (c instanceof abaplint.Nodes.StatementNode) {\r\n ret.appendChunk(this.traverseStatement(c));\r\n }\r\n else {\r\n throw new Error(\"traverseStructure, unexpected child node type\");\r\n }\r\n }\r\n return ret;\r\n }\r\n traverseStatement(node) {\r\n const list = StatementTranspilers;\r\n const search = node.get().constructor.name + \"Transpiler\";\r\n if (list[search]) {\r\n const transpiler = new list[search]();\r\n const chunk = transpiler.transpile(node, this);\r\n chunk.appendString(\"\\n\");\r\n return chunk;\r\n }\r\n throw new Error(`Statement ${node.get().constructor.name} not supported, ${node.concatTokens()}`);\r\n }\r\n traverseExpression(node) {\r\n const list = ExpressionTranspilers;\r\n const search = node.get().constructor.name + \"Transpiler\";\r\n if (list[search]) {\r\n const transpiler = new list[search]();\r\n return transpiler.transpile(node, this);\r\n }\r\n throw new Error(`Expression ${node.get().constructor.name} not supported, ${node.concatTokens()}`);\r\n }\r\n}\r\nexports.Traversal = Traversal;\r\n//# sourceMappingURL=traversal.js.map\n\n//# sourceURL=webpack://@abaplint/transpiler-cli/./node_modules/@abaplint/transpiler/build/src/traversal.js?");
14419
14419
 
14420
14420
  /***/ }),
14421
14421
 
@@ -14426,7 +14426,7 @@ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\n
14426
14426
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
14427
14427
 
14428
14428
  "use strict";
14429
- eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.TranspileTypes = void 0;\r\nconst abaplint = __webpack_require__(/*! @abaplint/core */ \"./node_modules/@abaplint/core/build/src/index.js\");\r\nclass TranspileTypes {\r\n declare(t) {\r\n const type = t.getType();\r\n return \"let \" + t.getName().toLowerCase() + \" = \" + this.toType(type) + \";\";\r\n }\r\n toType(type) {\r\n let resolved = \"\";\r\n let extra = \"\";\r\n if (type instanceof abaplint.BasicTypes.ObjectReferenceType\r\n || type instanceof abaplint.BasicTypes.GenericObjectReferenceType) {\r\n resolved = \"ABAPObject\";\r\n }\r\n else if (type instanceof abaplint.BasicTypes.TableType) {\r\n resolved = \"Table\";\r\n extra = this.toType(type.getRowType());\r\n extra += \", \" + JSON.stringify(type.getOptions());\r\n }\r\n else if (type instanceof abaplint.BasicTypes.IntegerType) {\r\n resolved = \"Integer\";\r\n }\r\n else if (type instanceof abaplint.BasicTypes.StringType) {\r\n resolved = \"String\";\r\n }\r\n else if (type instanceof abaplint.BasicTypes.DateType) {\r\n resolved = \"Date\";\r\n }\r\n else if (type instanceof abaplint.BasicTypes.TimeType) {\r\n resolved = \"Time\";\r\n }\r\n else if (type instanceof abaplint.BasicTypes.DataReference) {\r\n resolved = \"DataReference\";\r\n extra = this.toType(type.getType());\r\n }\r\n else if (type instanceof abaplint.BasicTypes.StructureType) {\r\n resolved = \"Structure\";\r\n const list = [];\r\n for (const c of type.getComponents()) {\r\n list.push(c.name.toLowerCase() + \": \" + this.toType(c.type));\r\n }\r\n extra = \"{\" + list.join(\", \") + \"}\";\r\n }\r\n else if (type instanceof abaplint.BasicTypes.CLikeType\r\n || type instanceof abaplint.BasicTypes.CSequenceType) {\r\n // if not supplied its a Character(1)\r\n resolved = \"Character\";\r\n }\r\n else if (type instanceof abaplint.BasicTypes.AnyType) {\r\n // if not supplied its a Character(4)\r\n resolved = \"Character\";\r\n extra = \"{length: 4}\";\r\n }\r\n else if (type instanceof abaplint.BasicTypes.SimpleType) {\r\n // if not supplied its a Character(1)\r\n resolved = \"Character\";\r\n }\r\n else if (type instanceof abaplint.BasicTypes.CharacterType) {\r\n resolved = \"Character\";\r\n if (type.getLength() !== 1) {\r\n extra = \"{length: \" + type.getLength() + \", qualifiedName: \\\"\" + type.getQualifiedName() + \"\\\"}\";\r\n }\r\n else if (type.getQualifiedName() !== undefined) {\r\n extra = \"{qualifiedName: \\\"\" + type.getQualifiedName() + \"\\\"}\";\r\n }\r\n }\r\n else if (type instanceof abaplint.BasicTypes.NumericType) {\r\n resolved = \"Numc\";\r\n if (type.getLength() !== 1) {\r\n extra = \"{length: \" + type.getLength() + \"}\";\r\n }\r\n }\r\n else if (type instanceof abaplint.BasicTypes.PackedType) {\r\n resolved = \"Packed\";\r\n extra = \"{length: \" + type.getLength() + \", decimals: \" + type.getDecimals() + \"}\";\r\n }\r\n else if (type instanceof abaplint.BasicTypes.NumericGenericType) {\r\n resolved = \"Packed\";\r\n extra = \"{length: 8, decimals: 0}\";\r\n }\r\n else if (type instanceof abaplint.BasicTypes.XStringType) {\r\n resolved = \"XString\";\r\n }\r\n else if (type instanceof abaplint.BasicTypes.XSequenceType) {\r\n // if not supplied itsa a Hex(1)\r\n resolved = \"Hex\";\r\n }\r\n else if (type instanceof abaplint.BasicTypes.HexType) {\r\n resolved = \"Hex\";\r\n if (type.getLength() !== 1) {\r\n extra = \"{length: \" + type.getLength() + \"}\";\r\n }\r\n }\r\n else if (type instanceof abaplint.BasicTypes.FloatType) {\r\n resolved = \"Float\";\r\n }\r\n else if (type instanceof abaplint.BasicTypes.UnknownType) {\r\n return `(() => { throw \"Unknown type: ${type.getError()}\" })()`;\r\n }\r\n else if (type instanceof abaplint.BasicTypes.VoidType) {\r\n return `(() => { throw \"Void type: ${type.getVoided()}\" })()`;\r\n }\r\n else {\r\n resolved = \"typeTodo\" + type.constructor.name;\r\n }\r\n return \"new abap.types.\" + resolved + \"(\" + extra + \")\";\r\n }\r\n}\r\nexports.TranspileTypes = TranspileTypes;\r\n//# sourceMappingURL=types.js.map\n\n//# sourceURL=webpack://@abaplint/transpiler-cli/./node_modules/@abaplint/transpiler/build/src/types.js?");
14429
+ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.TranspileTypes = void 0;\r\nconst abaplint = __webpack_require__(/*! @abaplint/core */ \"./node_modules/@abaplint/core/build/src/index.js\");\r\nclass TranspileTypes {\r\n declare(t) {\r\n const type = t.getType();\r\n return \"let \" + t.getName().toLowerCase() + \" = \" + this.toType(type) + \";\";\r\n }\r\n toType(type) {\r\n let resolved = \"\";\r\n let extra = \"\";\r\n if (type instanceof abaplint.BasicTypes.ObjectReferenceType\r\n || type instanceof abaplint.BasicTypes.GenericObjectReferenceType) {\r\n resolved = \"ABAPObject\";\r\n }\r\n else if (type instanceof abaplint.BasicTypes.TableType) {\r\n resolved = \"Table\";\r\n extra = this.toType(type.getRowType());\r\n extra += \", \" + JSON.stringify(type.getOptions());\r\n }\r\n else if (type instanceof abaplint.BasicTypes.IntegerType) {\r\n resolved = \"Integer\";\r\n }\r\n else if (type instanceof abaplint.BasicTypes.StringType) {\r\n resolved = \"String\";\r\n }\r\n else if (type instanceof abaplint.BasicTypes.DateType) {\r\n resolved = \"Date\";\r\n }\r\n else if (type instanceof abaplint.BasicTypes.TimeType) {\r\n resolved = \"Time\";\r\n }\r\n else if (type instanceof abaplint.BasicTypes.DataReference) {\r\n resolved = \"DataReference\";\r\n extra = this.toType(type.getType());\r\n }\r\n else if (type instanceof abaplint.BasicTypes.StructureType) {\r\n resolved = \"Structure\";\r\n const list = [];\r\n for (const c of type.getComponents()) {\r\n list.push(c.name.toLowerCase() + \": \" + this.toType(c.type));\r\n }\r\n extra = \"{\" + list.join(\", \") + \"}\";\r\n }\r\n else if (type instanceof abaplint.BasicTypes.CLikeType\r\n || type instanceof abaplint.BasicTypes.CSequenceType) {\r\n // if not supplied its a Character(1)\r\n resolved = \"Character\";\r\n }\r\n else if (type instanceof abaplint.BasicTypes.AnyType) {\r\n // if not supplied its a Character(4)\r\n resolved = \"Character\";\r\n extra = \"{length: 4}\";\r\n }\r\n else if (type instanceof abaplint.BasicTypes.SimpleType) {\r\n // if not supplied its a Character(1)\r\n resolved = \"Character\";\r\n }\r\n else if (type instanceof abaplint.BasicTypes.CharacterType) {\r\n resolved = \"Character\";\r\n if (type.getLength() !== 1) {\r\n extra = \"{length: \" + type.getLength() + \", qualifiedName: \\\"\" + type.getQualifiedName() + \"\\\"}\";\r\n }\r\n else if (type.getQualifiedName() !== undefined) {\r\n extra = \"{qualifiedName: \\\"\" + type.getQualifiedName() + \"\\\"}\";\r\n }\r\n }\r\n else if (type instanceof abaplint.BasicTypes.NumericType) {\r\n resolved = \"Numc\";\r\n if (type.getLength() !== 1) {\r\n extra = \"{length: \" + type.getLength() + \"}\";\r\n }\r\n }\r\n else if (type instanceof abaplint.BasicTypes.PackedType) {\r\n resolved = \"Packed\";\r\n extra = \"{length: \" + type.getLength() + \", decimals: \" + type.getDecimals() + \"}\";\r\n }\r\n else if (type instanceof abaplint.BasicTypes.NumericGenericType) {\r\n resolved = \"Packed\";\r\n extra = \"{length: 8, decimals: 0}\";\r\n }\r\n else if (type instanceof abaplint.BasicTypes.XStringType) {\r\n resolved = \"XString\";\r\n }\r\n else if (type instanceof abaplint.BasicTypes.XSequenceType) {\r\n // if not supplied itsa a Hex(1)\r\n resolved = \"Hex\";\r\n }\r\n else if (type instanceof abaplint.BasicTypes.HexType) {\r\n resolved = \"Hex\";\r\n if (type.getLength() !== 1) {\r\n extra = \"{length: \" + type.getLength() + \"}\";\r\n }\r\n }\r\n else if (type instanceof abaplint.BasicTypes.FloatType) {\r\n resolved = \"Float\";\r\n }\r\n else if (type instanceof abaplint.BasicTypes.DecFloat34Type) {\r\n resolved = \"DecFloat34\";\r\n }\r\n else if (type instanceof abaplint.BasicTypes.UnknownType) {\r\n return `(() => { throw \"Unknown type: ${type.getError()}\" })()`;\r\n }\r\n else if (type instanceof abaplint.BasicTypes.VoidType) {\r\n return `(() => { throw \"Void type: ${type.getVoided()}\" })()`;\r\n }\r\n else {\r\n resolved = \"typeTodo\" + type.constructor.name;\r\n }\r\n return \"new abap.types.\" + resolved + \"(\" + extra + \")\";\r\n }\r\n}\r\nexports.TranspileTypes = TranspileTypes;\r\n//# sourceMappingURL=types.js.map\n\n//# sourceURL=webpack://@abaplint/transpiler-cli/./node_modules/@abaplint/transpiler/build/src/types.js?");
14430
14430
 
14431
14431
  /***/ }),
14432
14432
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abaplint/transpiler-cli",
3
- "version": "1.7.12",
3
+ "version": "1.7.16",
4
4
  "description": "Transpiler - Command Line Interface",
5
5
  "bin": {
6
6
  "abap_transpile": "./abap_transpile"
@@ -23,13 +23,13 @@
23
23
  "author": "abaplint",
24
24
  "license": "MIT",
25
25
  "devDependencies": {
26
- "@abaplint/transpiler": "^1.7.12",
26
+ "@abaplint/transpiler": "^1.7.16",
27
27
  "@types/glob": "^7.2.0",
28
28
  "glob": "^7.2.0",
29
29
  "@types/progress": "^2.0.5",
30
30
  "@abaplint/core": "^2.83.23",
31
31
  "progress": "^2.0.3",
32
- "webpack": "^5.65.0",
32
+ "webpack": "^5.66.0",
33
33
  "webpack-cli": "^4.9.1",
34
34
  "typescript": "^4.5.4"
35
35
  }