@abaplint/transpiler-cli 2.14.16 → 2.14.17
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.
- package/build/bundle.js +164 -39
- package/package.json +2 -2
package/build/bundle.js
CHANGED
|
@@ -118628,6 +118628,118 @@ exports.FilterBodyTranspiler = FilterBodyTranspiler;
|
|
|
118628
118628
|
|
|
118629
118629
|
/***/ },
|
|
118630
118630
|
|
|
118631
|
+
/***/ "./node_modules/@abaplint/transpiler/build/src/expressions/for_groups.js"
|
|
118632
|
+
/*!*******************************************************************************!*\
|
|
118633
|
+
!*** ./node_modules/@abaplint/transpiler/build/src/expressions/for_groups.js ***!
|
|
118634
|
+
\*******************************************************************************/
|
|
118635
|
+
(__unused_webpack_module, exports, __webpack_require__) {
|
|
118636
|
+
|
|
118637
|
+
"use strict";
|
|
118638
|
+
|
|
118639
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
118640
|
+
exports.ForGroupsTranspiler = void 0;
|
|
118641
|
+
const core_1 = __webpack_require__(/*! @abaplint/core */ "./node_modules/@abaplint/core/build/src/index.js");
|
|
118642
|
+
const statements_1 = __webpack_require__(/*! ../statements */ "./node_modules/@abaplint/transpiler/build/src/statements/index.js");
|
|
118643
|
+
const source_field_symbol_1 = __webpack_require__(/*! ./source_field_symbol */ "./node_modules/@abaplint/transpiler/build/src/expressions/source_field_symbol.js");
|
|
118644
|
+
const unique_identifier_1 = __webpack_require__(/*! ../unique_identifier */ "./node_modules/@abaplint/transpiler/build/src/unique_identifier.js");
|
|
118645
|
+
/** FOR GROUPS group OF member IN itab GROUP BY key [ASCENDING|DESCENDING] [WITHOUT MEMBERS] */
|
|
118646
|
+
class ForGroupsTranspiler {
|
|
118647
|
+
transpile(forExpression, traversal) {
|
|
118648
|
+
const targets = forExpression.getChildren().filter(c => c instanceof core_1.Nodes.ExpressionNode
|
|
118649
|
+
&& (c.get() instanceof core_1.Expressions.TargetField || c.get() instanceof core_1.Expressions.TargetFieldSymbol));
|
|
118650
|
+
const source = forExpression.findDirectExpression(core_1.Expressions.Source);
|
|
118651
|
+
if (targets.length !== 2 || source === undefined) {
|
|
118652
|
+
throw new Error("FOR GROUPS, unexpected structure, " + forExpression.concatTokens());
|
|
118653
|
+
}
|
|
118654
|
+
if (forExpression.findDirectExpression(core_1.Expressions.LoopGroupByComponent)) {
|
|
118655
|
+
throw new Error("FOR GROUPS, GROUP BY with components, todo, " + forExpression.concatTokens());
|
|
118656
|
+
}
|
|
118657
|
+
const groupBy = forExpression.findDirectExpression(core_1.Expressions.FieldChain);
|
|
118658
|
+
if (groupBy === undefined) {
|
|
118659
|
+
throw new Error("FOR GROUPS, GROUP BY expected, " + forExpression.concatTokens());
|
|
118660
|
+
}
|
|
118661
|
+
if (forExpression.findDirectTokenByText("TEXT")) {
|
|
118662
|
+
throw new Error("FOR GROUPS, AS TEXT, todo, " + forExpression.concatTokens());
|
|
118663
|
+
}
|
|
118664
|
+
const declarations = [];
|
|
118665
|
+
const [groupNode, memberNode] = targets;
|
|
118666
|
+
const row = unique_identifier_1.UniqueIdentifier.get();
|
|
118667
|
+
const loopEntry = unique_identifier_1.UniqueIdentifier.get();
|
|
118668
|
+
let memberInGenerator;
|
|
118669
|
+
let memberInBody;
|
|
118670
|
+
if (memberNode.get() instanceof core_1.Expressions.TargetFieldSymbol) {
|
|
118671
|
+
declarations.push(this.declareFieldSymbol(memberNode, traversal));
|
|
118672
|
+
const name = new source_field_symbol_1.SourceFieldSymbolTranspiler().transpile(memberNode, traversal).getCode();
|
|
118673
|
+
memberInGenerator = `${name}.assign(${row});`;
|
|
118674
|
+
memberInBody = `${name}.assign(${loopEntry}.members[0]);`;
|
|
118675
|
+
}
|
|
118676
|
+
else {
|
|
118677
|
+
const name = traversal.traverse(memberNode).getCode();
|
|
118678
|
+
memberInGenerator = `const ${name} = ${row}.clone();`;
|
|
118679
|
+
memberInBody = `const ${name} = ${loopEntry}.members[0].clone();`;
|
|
118680
|
+
}
|
|
118681
|
+
let groupInBody;
|
|
118682
|
+
if (groupNode.get() instanceof core_1.Expressions.TargetFieldSymbol) {
|
|
118683
|
+
declarations.push(this.declareFieldSymbol(groupNode, traversal));
|
|
118684
|
+
const name = new source_field_symbol_1.SourceFieldSymbolTranspiler().transpile(groupNode, traversal).getCode();
|
|
118685
|
+
groupInBody = `${name}.assign(${loopEntry}.key);`;
|
|
118686
|
+
}
|
|
118687
|
+
else {
|
|
118688
|
+
groupInBody = `const ${traversal.traverse(groupNode).getCode()} = ${loopEntry}.key.clone();`;
|
|
118689
|
+
}
|
|
118690
|
+
const groups = unique_identifier_1.UniqueIdentifier.get();
|
|
118691
|
+
const key = unique_identifier_1.UniqueIdentifier.get();
|
|
118692
|
+
const rawKey = unique_identifier_1.UniqueIdentifier.get();
|
|
118693
|
+
const entry = unique_identifier_1.UniqueIdentifier.get();
|
|
118694
|
+
let ordered = `${groups}.values()`;
|
|
118695
|
+
if (forExpression.findDirectTokenByText("ASCENDING")) {
|
|
118696
|
+
ordered = `[...${groups}.values()].sort((a, b) => abap.compare.lt(a.key, b.key) ? -1 : abap.compare.gt(a.key, b.key) ? 1 : 0)`;
|
|
118697
|
+
}
|
|
118698
|
+
else if (forExpression.findDirectTokenByText("DESCENDING")) {
|
|
118699
|
+
ordered = `[...${groups}.values()].sort((a, b) => abap.compare.gt(a.key, b.key) ? -1 : abap.compare.lt(a.key, b.key) ? 1 : 0)`;
|
|
118700
|
+
}
|
|
118701
|
+
// groups are kept in order of first occurrence
|
|
118702
|
+
const generator = `(async function*() {\n`
|
|
118703
|
+
+ `const ${groups} = new Map();\n`
|
|
118704
|
+
+ `for await (const ${row} of abap.statements.loop(${traversal.traverse(source).getCode()})) {\n`
|
|
118705
|
+
+ `${memberInGenerator}\n`
|
|
118706
|
+
+ `const ${key} = ${traversal.traverse(groupBy).getCode()};\n`
|
|
118707
|
+
+ `const ${rawKey} = ${key}.get();\n`
|
|
118708
|
+
+ `let ${entry} = ${groups}.get(${rawKey});\n`
|
|
118709
|
+
+ `if (${entry} === undefined) {\n`
|
|
118710
|
+
+ `${entry} = {key: ${key}.clone(), members: []};\n`
|
|
118711
|
+
+ `${groups}.set(${rawKey}, ${entry});\n`
|
|
118712
|
+
+ `}\n`
|
|
118713
|
+
+ `${entry}.members.push(${row});\n`
|
|
118714
|
+
+ `}\n`
|
|
118715
|
+
+ `for (const value of ${ordered}) {\n`
|
|
118716
|
+
+ `yield value;\n`
|
|
118717
|
+
+ `}\n`
|
|
118718
|
+
+ `})()`;
|
|
118719
|
+
return {
|
|
118720
|
+
declarations,
|
|
118721
|
+
open: `for await (const ${loopEntry} of ${generator}) {`,
|
|
118722
|
+
preBody: [groupInBody, memberInBody],
|
|
118723
|
+
close: "}",
|
|
118724
|
+
};
|
|
118725
|
+
}
|
|
118726
|
+
/** abaplint does not always add the FOR GROUPS targets to the scope, or types them void,
|
|
118727
|
+
* then the field symbol is declared untyped, it is only ever assigned to rows of the source */
|
|
118728
|
+
declareFieldSymbol(node, traversal) {
|
|
118729
|
+
const token = node.getFirstToken();
|
|
118730
|
+
const found = traversal.findCurrentScopeByToken(token)?.findVariable(token.getStr());
|
|
118731
|
+
if (found !== undefined && !(found.getType() instanceof core_1.BasicTypes.VoidType)) {
|
|
118732
|
+
return new statements_1.FieldSymbolTranspiler().transpile(node, traversal).getCode();
|
|
118733
|
+
}
|
|
118734
|
+
const name = new source_field_symbol_1.SourceFieldSymbolTranspiler().transpile(node, traversal).getCode();
|
|
118735
|
+
return `let ${name} = new abap.types.FieldSymbol();`;
|
|
118736
|
+
}
|
|
118737
|
+
}
|
|
118738
|
+
exports.ForGroupsTranspiler = ForGroupsTranspiler;
|
|
118739
|
+
//# sourceMappingURL=for_groups.js.map
|
|
118740
|
+
|
|
118741
|
+
/***/ },
|
|
118742
|
+
|
|
118631
118743
|
/***/ "./node_modules/@abaplint/transpiler/build/src/expressions/function_exporting.js"
|
|
118632
118744
|
/*!***************************************************************************************!*\
|
|
118633
118745
|
!*** ./node_modules/@abaplint/transpiler/build/src/expressions/function_exporting.js ***!
|
|
@@ -119835,6 +119947,7 @@ const let_1 = __webpack_require__(/*! ./let */ "./node_modules/@abaplint/transpi
|
|
|
119835
119947
|
const statements_1 = __webpack_require__(/*! ../statements */ "./node_modules/@abaplint/transpiler/build/src/statements/index.js");
|
|
119836
119948
|
const source_field_symbol_1 = __webpack_require__(/*! ./source_field_symbol */ "./node_modules/@abaplint/transpiler/build/src/expressions/source_field_symbol.js");
|
|
119837
119949
|
const unique_identifier_1 = __webpack_require__(/*! ../unique_identifier */ "./node_modules/@abaplint/transpiler/build/src/unique_identifier.js");
|
|
119950
|
+
const for_groups_1 = __webpack_require__(/*! ./for_groups */ "./node_modules/@abaplint/transpiler/build/src/expressions/for_groups.js");
|
|
119838
119951
|
class ReduceBodyTranspiler {
|
|
119839
119952
|
transpile(typ, body, traversal) {
|
|
119840
119953
|
if (!(typ.get() instanceof core_1.Expressions.TypeNameOrInfer)) {
|
|
@@ -119875,7 +119988,7 @@ class ReduceBodyTranspiler {
|
|
|
119875
119988
|
}
|
|
119876
119989
|
describeFor(forExpression, body, traversal, declarations) {
|
|
119877
119990
|
if (forExpression.findDirectTokenByText("GROUPS")) {
|
|
119878
|
-
return this.describeGroupsFor(forExpression,
|
|
119991
|
+
return this.describeGroupsFor(forExpression, traversal, declarations);
|
|
119879
119992
|
}
|
|
119880
119993
|
const loopExpression = forExpression.findDirectExpression(core_1.Expressions.InlineLoopDefinition);
|
|
119881
119994
|
if (loopExpression === undefined) {
|
|
@@ -119942,47 +120055,20 @@ class ReduceBodyTranspiler {
|
|
|
119942
120055
|
close: "}",
|
|
119943
120056
|
};
|
|
119944
120057
|
}
|
|
119945
|
-
describeGroupsFor(forExpression,
|
|
119946
|
-
const
|
|
119947
|
-
|
|
119948
|
-
const
|
|
119949
|
-
|
|
119950
|
-
|
|
120058
|
+
describeGroupsFor(forExpression, traversal, declarations) {
|
|
120059
|
+
const groups = new for_groups_1.ForGroupsTranspiler().transpile(forExpression, traversal);
|
|
120060
|
+
declarations.push(...groups.declarations);
|
|
120061
|
+
const preBody = [...groups.preBody];
|
|
120062
|
+
const letNode = forExpression.findDirectExpression(core_1.Expressions.Let);
|
|
120063
|
+
if (letNode) {
|
|
120064
|
+
preBody.push(new let_1.LetTranspiler().transpile(letNode, traversal).getCode());
|
|
119951
120065
|
}
|
|
119952
|
-
const groupTarget = traversal.traverse(targets[0]).getCode();
|
|
119953
|
-
const memberTarget = traversal.traverse(targets[1]).getCode();
|
|
119954
|
-
const sourceCode = traversal.traverse(source).getCode();
|
|
119955
|
-
const groupByCode = traversal.traverse(groupBy).getCode();
|
|
119956
|
-
const groups = unique_identifier_1.UniqueIdentifier.get();
|
|
119957
|
-
const row = unique_identifier_1.UniqueIdentifier.get();
|
|
119958
|
-
const key = unique_identifier_1.UniqueIdentifier.get();
|
|
119959
|
-
const rawKey = unique_identifier_1.UniqueIdentifier.get();
|
|
119960
|
-
const entry = unique_identifier_1.UniqueIdentifier.get();
|
|
119961
|
-
const generator = `(async function*() {\n`
|
|
119962
|
-
+ `const ${groups} = new Map();\n`
|
|
119963
|
-
+ `for await (const ${row} of abap.statements.loop(${sourceCode})) {\n`
|
|
119964
|
-
+ `const ${memberTarget} = ${row}.clone();\n`
|
|
119965
|
-
+ `const ${key} = ${groupByCode};\n`
|
|
119966
|
-
+ `const ${rawKey} = ${key}.get();\n`
|
|
119967
|
-
+ `let ${entry} = ${groups}.get(${rawKey});\n`
|
|
119968
|
-
+ `if (${entry} === undefined) {\n`
|
|
119969
|
-
+ `${entry} = {key: ${key}.clone(), members: []};\n`
|
|
119970
|
-
+ `${groups}.set(${rawKey}, ${entry});\n`
|
|
119971
|
-
+ `}\n`
|
|
119972
|
-
+ `${entry}.members.push(${row});\n`
|
|
119973
|
-
+ `}\n`
|
|
119974
|
-
+ `for (const value of ${groups}.values()) { yield value; }\n`
|
|
119975
|
-
+ `})()`;
|
|
119976
|
-
const loopEntry = unique_identifier_1.UniqueIdentifier.get();
|
|
119977
120066
|
return {
|
|
119978
120067
|
beforeLoop: [],
|
|
119979
|
-
open:
|
|
119980
|
-
preBody
|
|
119981
|
-
`const ${groupTarget} = ${loopEntry}.key.clone();`,
|
|
119982
|
-
`const ${memberTarget} = ${loopEntry}.members[0].clone();`,
|
|
119983
|
-
],
|
|
120068
|
+
open: groups.open,
|
|
120069
|
+
preBody,
|
|
119984
120070
|
postBody: [],
|
|
119985
|
-
close:
|
|
120071
|
+
close: groups.close,
|
|
119986
120072
|
};
|
|
119987
120073
|
}
|
|
119988
120074
|
describeIndexFor(forExpression, body, traversal) {
|
|
@@ -122485,6 +122571,7 @@ const field_assignment_1 = __webpack_require__(/*! ./field_assignment */ "./node
|
|
|
122485
122571
|
const statements_1 = __webpack_require__(/*! ../statements */ "./node_modules/@abaplint/transpiler/build/src/statements/index.js");
|
|
122486
122572
|
const source_field_symbol_1 = __webpack_require__(/*! ./source_field_symbol */ "./node_modules/@abaplint/transpiler/build/src/expressions/source_field_symbol.js");
|
|
122487
122573
|
const let_1 = __webpack_require__(/*! ./let */ "./node_modules/@abaplint/transpiler/build/src/expressions/let.js");
|
|
122574
|
+
const for_groups_1 = __webpack_require__(/*! ./for_groups */ "./node_modules/@abaplint/transpiler/build/src/expressions/for_groups.js");
|
|
122488
122575
|
class ValueBodyTranspiler {
|
|
122489
122576
|
transpile(typ, body, traversal) {
|
|
122490
122577
|
if (!(typ.get() instanceof core_1.Expressions.TypeNameOrInfer)) {
|
|
@@ -122590,7 +122677,23 @@ class ValueBodyTranspiler {
|
|
|
122590
122677
|
let uniqueCounter = 1;
|
|
122591
122678
|
for (const child of forNodes) {
|
|
122592
122679
|
const loop = child.findDirectExpression(core_1.Expressions.InlineLoopDefinition);
|
|
122593
|
-
if (
|
|
122680
|
+
if (child.findDirectTokenByText("GROUPS")) {
|
|
122681
|
+
const groups = new for_groups_1.ForGroupsTranspiler().transpile(child, traversal);
|
|
122682
|
+
preLoopDecls.push(...groups.declarations);
|
|
122683
|
+
const preBody = [...groups.preBody];
|
|
122684
|
+
const llet = child.findDirectExpression(core_1.Expressions.Let);
|
|
122685
|
+
if (llet) {
|
|
122686
|
+
preBody.push(new let_1.LetTranspiler().transpile(llet, traversal).getCode());
|
|
122687
|
+
}
|
|
122688
|
+
descriptors.push({
|
|
122689
|
+
beforeLoop: [],
|
|
122690
|
+
open: groups.open,
|
|
122691
|
+
preBody,
|
|
122692
|
+
postBody: [],
|
|
122693
|
+
close: groups.close,
|
|
122694
|
+
});
|
|
122695
|
+
}
|
|
122696
|
+
else if (loop) {
|
|
122594
122697
|
if (["THEN", "UNTIL", "WHILE", "FROM", "TO", "GROUPS"].some(token => child.findDirectTokenByText(token))) {
|
|
122595
122698
|
throw new Error("ValueBody FOR todo, " + body.concatTokens());
|
|
122596
122699
|
}
|
|
@@ -127446,6 +127549,27 @@ exports.DataTranspiler = DataTranspiler;
|
|
|
127446
127549
|
|
|
127447
127550
|
/***/ },
|
|
127448
127551
|
|
|
127552
|
+
/***/ "./node_modules/@abaplint/transpiler/build/src/statements/delete_cluster.js"
|
|
127553
|
+
/*!**********************************************************************************!*\
|
|
127554
|
+
!*** ./node_modules/@abaplint/transpiler/build/src/statements/delete_cluster.js ***!
|
|
127555
|
+
\**********************************************************************************/
|
|
127556
|
+
(__unused_webpack_module, exports, __webpack_require__) {
|
|
127557
|
+
|
|
127558
|
+
"use strict";
|
|
127559
|
+
|
|
127560
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
127561
|
+
exports.DeleteClusterTranspiler = void 0;
|
|
127562
|
+
const chunk_1 = __webpack_require__(/*! ../chunk */ "./node_modules/@abaplint/transpiler/build/src/chunk.js");
|
|
127563
|
+
class DeleteClusterTranspiler {
|
|
127564
|
+
transpile(_node, _traversal) {
|
|
127565
|
+
return new chunk_1.Chunk(`throw new Error("DELETE CLUSTER, not supported, transpiler");`);
|
|
127566
|
+
}
|
|
127567
|
+
}
|
|
127568
|
+
exports.DeleteClusterTranspiler = DeleteClusterTranspiler;
|
|
127569
|
+
//# sourceMappingURL=delete_cluster.js.map
|
|
127570
|
+
|
|
127571
|
+
/***/ },
|
|
127572
|
+
|
|
127449
127573
|
/***/ "./node_modules/@abaplint/transpiler/build/src/statements/delete_database.js"
|
|
127450
127574
|
/*!***********************************************************************************!*\
|
|
127451
127575
|
!*** ./node_modules/@abaplint/transpiler/build/src/statements/delete_database.js ***!
|
|
@@ -129730,6 +129854,7 @@ __exportStar(__webpack_require__(/*! ./convert */ "./node_modules/@abaplint/tran
|
|
|
129730
129854
|
__exportStar(__webpack_require__(/*! ./create_data */ "./node_modules/@abaplint/transpiler/build/src/statements/create_data.js"), exports);
|
|
129731
129855
|
__exportStar(__webpack_require__(/*! ./create_object */ "./node_modules/@abaplint/transpiler/build/src/statements/create_object.js"), exports);
|
|
129732
129856
|
__exportStar(__webpack_require__(/*! ./data */ "./node_modules/@abaplint/transpiler/build/src/statements/data.js"), exports);
|
|
129857
|
+
__exportStar(__webpack_require__(/*! ./delete_cluster */ "./node_modules/@abaplint/transpiler/build/src/statements/delete_cluster.js"), exports);
|
|
129733
129858
|
__exportStar(__webpack_require__(/*! ./delete_database */ "./node_modules/@abaplint/transpiler/build/src/statements/delete_database.js"), exports);
|
|
129734
129859
|
__exportStar(__webpack_require__(/*! ./delete_dataset */ "./node_modules/@abaplint/transpiler/build/src/statements/delete_dataset.js"), exports);
|
|
129735
129860
|
__exportStar(__webpack_require__(/*! ./delete_internal */ "./node_modules/@abaplint/transpiler/build/src/statements/delete_internal.js"), exports);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@abaplint/transpiler-cli",
|
|
3
|
-
"version": "2.14.
|
|
3
|
+
"version": "2.14.17",
|
|
4
4
|
"description": "Transpiler - Command Line Interface",
|
|
5
5
|
"funding": "https://github.com/sponsors/larshp",
|
|
6
6
|
"bin": {
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"license": "MIT",
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@abaplint/core": "^2.120.92",
|
|
31
|
-
"@abaplint/transpiler": "^2.14.
|
|
31
|
+
"@abaplint/transpiler": "^2.14.17",
|
|
32
32
|
"@types/glob": "^9.0.0",
|
|
33
33
|
"@types/node": "^26.6.6",
|
|
34
34
|
"@types/progress": "^2.0.7",
|