@abaplint/transpiler-cli 2.13.50 → 2.13.52

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 CHANGED
@@ -6587,7 +6587,7 @@ class MessageSource extends combi_1.Expression {
6587
6587
  getRunnable() {
6588
6588
  const msgid = (0, combi_1.seq)((0, combi_1.tok)(tokens_1.ParenLeft), _1.MessageClass, (0, combi_1.tok)(tokens_1.ParenRightW));
6589
6589
  const simple = (0, combi_1.seq)(_1.MessageTypeAndNumber, (0, combi_1.opt)(msgid));
6590
- const mess1 = (0, combi_1.seq)("ID", _1.Source, "TYPE", _1.Source, "NUMBER", (0, combi_1.altPrio)(_1.MessageNumber, _1.Source));
6590
+ const mess1 = (0, combi_1.seq)("ID", _1.SimpleSource3, "TYPE", _1.SimpleSource3, "NUMBER", (0, combi_1.altPrio)(_1.MessageNumber, _1.SimpleSource3));
6591
6591
  return (0, combi_1.altPrio)(simple, mess1);
6592
6592
  }
6593
6593
  }
@@ -8011,7 +8011,7 @@ class Source extends combi_1.Expression {
8011
8011
  const value = (0, combi_1.ver)(version_1.Release.v740sp02, (0, combi_1.seq)("VALUE", _1.TypeNameOrInfer, (0, combi_1.tok)(tokens_1.ParenLeftW), _1.ValueBody, rparenNoSpace, (0, combi_1.optPrio)(after)), { also: combi_1.AlsoIn.OpenABAP });
8012
8012
  const cond = (0, combi_1.ver)(version_1.Release.v740sp02, (0, combi_1.seq)("COND", _1.TypeNameOrInfer, (0, combi_1.tok)(tokens_1.ParenLeftW), _1.CondBody, rparenNoSpace, (0, combi_1.optPrio)(after)), { also: combi_1.AlsoIn.OpenABAP });
8013
8013
  const reff = (0, combi_1.ver)(version_1.Release.v740sp02, (0, combi_1.seq)("REF", _1.TypeNameOrInfer, (0, combi_1.tok)(tokens_1.ParenLeftW), Source, (0, combi_1.optPrio)("OPTIONAL"), rparen), { also: combi_1.AlsoIn.OpenABAP });
8014
- const exact = (0, combi_1.ver)(version_1.Release.v740sp02, (0, combi_1.seq)("EXACT", _1.TypeNameOrInfer, (0, combi_1.tok)(tokens_1.ParenLeftW), Source, rparen, (0, combi_1.optPrio)(after)));
8014
+ const exact = (0, combi_1.ver)(version_1.Release.v740sp02, (0, combi_1.seq)("EXACT", _1.TypeNameOrInfer, (0, combi_1.tok)(tokens_1.ParenLeftW), Source, rparen, (0, combi_1.optPrio)(after)), { also: combi_1.AlsoIn.OpenABAP });
8015
8015
  const filter = (0, combi_1.ver)(version_1.Release.v740sp08, (0, combi_1.seq)("FILTER", _1.TypeNameOrInfer, (0, combi_1.tok)(tokens_1.ParenLeftW), _1.FilterBody, rparen), { also: combi_1.AlsoIn.OpenABAP });
8016
8016
  const reduce = (0, combi_1.ver)(version_1.Release.v740sp08, (0, combi_1.seq)("REDUCE", _1.TypeNameOrInfer, (0, combi_1.tok)(tokens_1.ParenLeftW), _1.ReduceBody, rparen, (0, combi_1.optPrio)(after)), { also: combi_1.AlsoIn.OpenABAP });
8017
8017
  const prefix1 = (0, combi_1.altPrio)((0, combi_1.tok)(tokens_1.WDashW), (0, combi_1.tok)(tokens_1.WPlusW));
@@ -26870,6 +26870,20 @@ class CurrentScope {
26870
26870
  }
26871
26871
  return false;
26872
26872
  }
26873
+ isInStaticMethod() {
26874
+ let curr = this.current;
26875
+ while (curr !== undefined) {
26876
+ const stype = curr.getIdentifier().stype;
26877
+ if (stype === _scope_type_1.ScopeType.MethodInstance) {
26878
+ return false;
26879
+ }
26880
+ else if (stype === _scope_type_1.ScopeType.ClassImplementation) {
26881
+ return true;
26882
+ }
26883
+ curr = curr.getParent();
26884
+ }
26885
+ return false;
26886
+ }
26873
26887
  addLocalFriend(className, friendName) {
26874
26888
  var _a;
26875
26889
  const key = className.toUpperCase();
@@ -28235,7 +28249,8 @@ class TypeUtils {
28235
28249
  }
28236
28250
  }
28237
28251
  else if (source instanceof basic_1.XStringType) {
28238
- if (target instanceof basic_1.CLikeType
28252
+ if (target instanceof basic_1.CharacterType
28253
+ || target instanceof basic_1.CLikeType
28239
28254
  || target instanceof basic_1.IntegerType
28240
28255
  || target instanceof basic_1.StringType
28241
28256
  || target instanceof basic_1.ObjectReferenceType
@@ -29597,19 +29612,59 @@ function checkOffsetLength(source, sourceType, method, input) {
29597
29612
 
29598
29613
  "use strict";
29599
29614
 
29615
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
29616
+ if (k2 === undefined) k2 = k;
29617
+ var desc = Object.getOwnPropertyDescriptor(m, k);
29618
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
29619
+ desc = { enumerable: true, get: function() { return m[k]; } };
29620
+ }
29621
+ Object.defineProperty(o, k2, desc);
29622
+ }) : (function(o, m, k, k2) {
29623
+ if (k2 === undefined) k2 = k;
29624
+ o[k2] = m[k];
29625
+ }));
29626
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
29627
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
29628
+ }) : function(o, v) {
29629
+ o["default"] = v;
29630
+ });
29631
+ var __importStar = (this && this.__importStar) || (function () {
29632
+ var ownKeys = function(o) {
29633
+ ownKeys = Object.getOwnPropertyNames || function (o) {
29634
+ var ar = [];
29635
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29636
+ return ar;
29637
+ };
29638
+ return ownKeys(o);
29639
+ };
29640
+ return function (mod) {
29641
+ if (mod && mod.__esModule) return mod;
29642
+ var result = {};
29643
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
29644
+ __setModuleDefault(result, mod);
29645
+ return result;
29646
+ };
29647
+ })();
29600
29648
  Object.defineProperty(exports, "__esModule", ({ value: true }));
29601
29649
  exports.AttributeChain = void 0;
29650
+ const nodes_1 = __webpack_require__(/*! ../../nodes */ "./node_modules/@abaplint/core/build/src/abap/nodes/index.js");
29651
+ const Expressions = __importStar(__webpack_require__(/*! ../../2_statements/expressions */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js"));
29602
29652
  const void_type_1 = __webpack_require__(/*! ../../types/basic/void_type */ "./node_modules/@abaplint/core/build/src/abap/types/basic/void_type.js");
29603
- const object_reference_type_1 = __webpack_require__(/*! ../../types/basic/object_reference_type */ "./node_modules/@abaplint/core/build/src/abap/types/basic/object_reference_type.js");
29653
+ const basic_1 = __webpack_require__(/*! ../../types/basic */ "./node_modules/@abaplint/core/build/src/abap/types/basic/index.js");
29604
29654
  const _object_oriented_1 = __webpack_require__(/*! ../_object_oriented */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/_object_oriented.js");
29605
29655
  const expressions_1 = __webpack_require__(/*! ../../2_statements/expressions */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js");
29606
29656
  const _syntax_input_1 = __webpack_require__(/*! ../_syntax_input */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/_syntax_input.js");
29657
+ const component_name_1 = __webpack_require__(/*! ./component_name */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/component_name.js");
29658
+ const attribute_name_1 = __webpack_require__(/*! ./attribute_name */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/attribute_name.js");
29659
+ const table_expression_1 = __webpack_require__(/*! ./table_expression */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/table_expression.js");
29660
+ const field_offset_1 = __webpack_require__(/*! ./field_offset */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/field_offset.js");
29661
+ const field_length_1 = __webpack_require__(/*! ./field_length */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/field_length.js");
29607
29662
  class AttributeChain {
29608
29663
  static runSyntax(inputContext, node, input, type) {
29609
29664
  if (inputContext instanceof void_type_1.VoidType) {
29610
29665
  return inputContext;
29611
29666
  }
29612
- else if (!(inputContext instanceof object_reference_type_1.ObjectReferenceType)) {
29667
+ else if (!(inputContext instanceof basic_1.ObjectReferenceType)) {
29613
29668
  input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), "Not an object reference(AttributeChain)"));
29614
29669
  return void_type_1.VoidType.get(_syntax_input_1.CheckSyntaxKey);
29615
29670
  }
@@ -29639,8 +29694,69 @@ class AttributeChain {
29639
29694
  for (const t of type) {
29640
29695
  input.scope.addReference(nameToken, context, t, input.filename);
29641
29696
  }
29642
- // todo, loop, handle ArrowOrDash, ComponentName, TableExpression
29643
- return context.getType();
29697
+ let contextType = context.getType();
29698
+ const children = node.getChildren();
29699
+ for (let i = 1; i < children.length; i++) {
29700
+ const child = children[i];
29701
+ if (contextType instanceof void_type_1.VoidType || contextType instanceof basic_1.UnknownType) {
29702
+ return contextType;
29703
+ }
29704
+ else if (child.get() instanceof Expressions.ArrowOrDash) {
29705
+ const operator = child.getFirstToken().getStr();
29706
+ if (operator === "-" && !(contextType instanceof basic_1.StructureType)) {
29707
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, child.getFirstToken(), "AttributeChain, not a structure"));
29708
+ return void_type_1.VoidType.get(_syntax_input_1.CheckSyntaxKey);
29709
+ }
29710
+ else if ((operator === "->" || operator === "=>")
29711
+ && !(contextType instanceof basic_1.ObjectReferenceType)
29712
+ && !(contextType instanceof basic_1.DataReference)) {
29713
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, child.getFirstToken(), "AttributeChain, not a reference"));
29714
+ return void_type_1.VoidType.get(_syntax_input_1.CheckSyntaxKey);
29715
+ }
29716
+ }
29717
+ else if (child.get() instanceof Expressions.ComponentName) {
29718
+ if (contextType instanceof basic_1.ObjectReferenceType || contextType instanceof basic_1.DataReference) {
29719
+ contextType = attribute_name_1.AttributeName.runSyntax(contextType, child, input, type);
29720
+ }
29721
+ else {
29722
+ contextType = component_name_1.ComponentName.runSyntax(contextType, child, input);
29723
+ }
29724
+ }
29725
+ else if (child.getFirstToken().getStr() === "*" && contextType instanceof basic_1.DataReference) {
29726
+ contextType = contextType.getType();
29727
+ }
29728
+ else if (child instanceof nodes_1.ExpressionNode && child.get() instanceof Expressions.TableExpression) {
29729
+ if (!(contextType instanceof basic_1.TableType)) {
29730
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, child.getFirstToken(), "Table expression, expected table"));
29731
+ return void_type_1.VoidType.get(_syntax_input_1.CheckSyntaxKey);
29732
+ }
29733
+ table_expression_1.TableExpression.runSyntax(child, input, contextType);
29734
+ contextType = contextType.getRowType();
29735
+ }
29736
+ else if (child instanceof nodes_1.ExpressionNode && child.get() instanceof Expressions.FieldOffset) {
29737
+ const offset = field_offset_1.FieldOffset.runSyntax(child, input);
29738
+ if (offset !== undefined) {
29739
+ if (contextType instanceof basic_1.CharacterType) {
29740
+ contextType = new basic_1.CharacterType(contextType.getLength() - offset);
29741
+ }
29742
+ else if (contextType instanceof basic_1.HexType) {
29743
+ contextType = new basic_1.HexType(contextType.getLength() - offset);
29744
+ }
29745
+ }
29746
+ }
29747
+ else if (child instanceof nodes_1.ExpressionNode && child.get() instanceof Expressions.FieldLength) {
29748
+ const length = field_length_1.FieldLength.runSyntax(child, input);
29749
+ if (length !== undefined) {
29750
+ if (contextType instanceof basic_1.CharacterType) {
29751
+ contextType = new basic_1.CharacterType(length);
29752
+ }
29753
+ else if (contextType instanceof basic_1.HexType) {
29754
+ contextType = new basic_1.HexType(length);
29755
+ }
29756
+ }
29757
+ }
29758
+ }
29759
+ return contextType;
29644
29760
  }
29645
29761
  }
29646
29762
  exports.AttributeChain = AttributeChain;
@@ -32417,6 +32533,9 @@ class MessageSource {
32417
32533
  for (const f of node.findDirectExpressions(Expressions.Source)) {
32418
32534
  source_1.Source.runSyntax(f, input);
32419
32535
  }
32536
+ for (const f of node.findDirectExpressions(Expressions.SimpleSource3)) {
32537
+ source_1.Source.runSyntax(f, input);
32538
+ }
32420
32539
  if (node.getFirstToken().getStr().toUpperCase() === "ID") {
32421
32540
  const id = (_a = node.findExpressionAfterToken("ID")) === null || _a === void 0 ? void 0 : _a.concatTokens();
32422
32541
  let number = (_b = node.findDirectExpression(Expressions.MessageNumber)) === null || _b === void 0 ? void 0 : _b.concatTokens();
@@ -32613,6 +32732,11 @@ class MethodCallChain {
32613
32732
  input.issues.push((0, _syntax_input_1.syntaxIssue)(input, methodToken, message));
32614
32733
  return basic_1.VoidType.get(_syntax_input_1.CheckSyntaxKey);
32615
32734
  }
32735
+ if (current === first && (method === null || method === void 0 ? void 0 : method.isStatic()) === false && input.scope.isInStaticMethod() === true) {
32736
+ const message = "Method \"" + methodName + "\" not static";
32737
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, methodToken, message));
32738
+ return basic_1.VoidType.get(_syntax_input_1.CheckSyntaxKey);
32739
+ }
32616
32740
  const voidedName = context instanceof basic_1.VoidType ? context.getVoided() : undefined;
32617
32741
  const extra = helper.methodReferenceExtras(foundDef, className || voidedName);
32618
32742
  input.scope.addReference(methodToken, method, _reference_1.ReferenceType.MethodReference, input.filename, extra);
@@ -33403,9 +33527,11 @@ class MethodSource {
33403
33527
  throw new assert_error_1.AssertError("MethodSource, first child expected");
33404
33528
  }
33405
33529
  let context = this.findTop(first, input, children);
33530
+ let implicitMe = false;
33406
33531
  if (context === undefined) {
33407
33532
  context = (_a = input.scope.findVariable("me")) === null || _a === void 0 ? void 0 : _a.getType();
33408
33533
  children.unshift(first);
33534
+ implicitMe = true;
33409
33535
  }
33410
33536
  if (input.scope.getLanguageVersion() === version_1.LanguageVersion.Cloud
33411
33537
  && first.get() instanceof Expressions.Dynamic
@@ -33465,6 +33591,11 @@ class MethodSource {
33465
33591
  const def = input.scope.findObjectDefinition(className);
33466
33592
  // eslint-disable-next-line prefer-const
33467
33593
  let { method, def: foundDef } = helper.searchMethodName(def, methodName);
33594
+ if (implicitMe && current === first && (method === null || method === void 0 ? void 0 : method.isStatic()) === false && input.scope.isInStaticMethod() === true) {
33595
+ const message = "Method \"" + methodName + "\" not static";
33596
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, methodToken, message));
33597
+ return basic_1.VoidType.get(_syntax_input_1.CheckSyntaxKey);
33598
+ }
33468
33599
  if (method === undefined && (methodName === null || methodName === void 0 ? void 0 : methodName.toUpperCase()) === "CONSTRUCTOR") {
33469
33600
  context = basic_1.VoidType.get("CONSTRUCTOR"); // todo, this is a workaround, constructors always exists
33470
33601
  }
@@ -35917,7 +36048,7 @@ class Target {
35917
36048
  && !(context instanceof basic_1.VoidType)
35918
36049
  && !(context instanceof unknown_type_1.UnknownType)
35919
36050
  && !(context instanceof unknown_type_1.UnknownType)) {
35920
- const message = "Not a internal table, \"[]\"";
36051
+ const message = `Not an internal table, "${node.concatTokens()}"`;
35921
36052
  input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
35922
36053
  return basic_1.VoidType.get(_syntax_input_1.CheckSyntaxKey);
35923
36054
  }
@@ -52027,6 +52158,7 @@ class ClassDefinition extends _identifier_1.Identifier {
52027
52158
  // perform checks after everything has been initialized
52028
52159
  this.checkInterfaceVisibility(input, node);
52029
52160
  this.checkMethodsFromSuperClasses(input);
52161
+ this.checkMethodNameConflicts(input);
52030
52162
  this.checkClassNameLength(input);
52031
52163
  this.checkMethodNameLength(input);
52032
52164
  this.checkClassConstructorStatic(input);
@@ -52158,6 +52290,14 @@ class ClassDefinition extends _identifier_1.Identifier {
52158
52290
  }
52159
52291
  }
52160
52292
  }
52293
+ checkMethodNameConflicts(input) {
52294
+ for (const m of this.methodDefs.getAll()) {
52295
+ if (this.attributes.findByName(m.getName()) !== undefined
52296
+ || this.types.getByName(m.getName()) !== undefined) {
52297
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, m.getToken(), `"${m.getName()}" already defined`));
52298
+ }
52299
+ }
52300
+ }
52161
52301
  findFriends(def, input) {
52162
52302
  var _a;
52163
52303
  const result = [];
@@ -60500,21 +60640,22 @@ class ABAPObject extends _abstract_object_1.AbstractObject {
60500
60640
  return this.textsTranslations;
60501
60641
  }
60502
60642
  findTexts(parsed) {
60503
- var _a, _b, _c, _d, _e, _f;
60504
- var _g;
60643
+ var _a, _b, _c, _d, _e, _f, _g, _h;
60644
+ var _j;
60505
60645
  this.texts = {};
60506
60646
  if (((_d = (_c = (_b = (_a = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === null || _c === void 0 ? void 0 : _c.TPOOL) === null || _d === void 0 ? void 0 : _d.item) === undefined) {
60507
60647
  return;
60508
60648
  }
60509
- for (const t of (0, xml_utils_1.xmlToArray)(parsed.abapGit["asx:abap"]["asx:values"].TPOOL.item)) {
60510
- const id = (_e = t.ID) === null || _e === void 0 ? void 0 : _e.toUpperCase();
60649
+ for (const t of (0, xml_utils_1.xmlToArray)((_h = (_g = (_f = (_e = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _e === void 0 ? void 0 : _e["asx:abap"]) === null || _f === void 0 ? void 0 : _f["asx:values"]) === null || _g === void 0 ? void 0 : _g.TPOOL) === null || _h === void 0 ? void 0 : _h.item)) {
60650
+ const id = typeof (t === null || t === void 0 ? void 0 : t.ID) === "string" ? t.ID.toUpperCase() : undefined;
60511
60651
  if (id === undefined) {
60512
60652
  continue;
60513
60653
  }
60514
60654
  if (id !== "R" && t.KEY === undefined) {
60515
60655
  continue;
60516
60656
  }
60517
- const key = (_f = ((_g = t.KEY) !== null && _g !== void 0 ? _g : t.ID)) === null || _f === void 0 ? void 0 : _f.toUpperCase();
60657
+ const rawKey = (_j = t.KEY) !== null && _j !== void 0 ? _j : t.ID;
60658
+ const key = typeof rawKey === "string" ? rawKey.toUpperCase() : undefined;
60518
60659
  if (key === undefined) {
60519
60660
  continue;
60520
60661
  }
@@ -60525,8 +60666,8 @@ class ABAPObject extends _abstract_object_1.AbstractObject {
60525
60666
  }
60526
60667
  }
60527
60668
  findTextsTranslations(parsed) {
60528
- var _a, _b, _c, _d, _e, _f;
60529
- var _g;
60669
+ var _a, _b, _c, _d, _e;
60670
+ var _f;
60530
60671
  this.textsTranslations = [];
60531
60672
  const values = (_d = (_c = (_b = (_a = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === null || _c === void 0 ? void 0 : _c.I18N_TPOOL) === null || _d === void 0 ? void 0 : _d.item;
60532
60673
  if (values === undefined) {
@@ -60535,7 +60676,8 @@ class ABAPObject extends _abstract_object_1.AbstractObject {
60535
60676
  for (const langItem of (0, xml_utils_1.xmlToArray)(values)) {
60536
60677
  const textElements = {};
60537
60678
  for (const item of (0, xml_utils_1.xmlToArray)((_e = langItem.TEXTPOOL) === null || _e === void 0 ? void 0 : _e.item)) {
60538
- const key = (_f = ((_g = item.KEY) !== null && _g !== void 0 ? _g : item.ID)) === null || _f === void 0 ? void 0 : _f.toUpperCase();
60679
+ const rawKey = (_f = item.KEY) !== null && _f !== void 0 ? _f : item.ID;
60680
+ const key = typeof rawKey === "string" ? rawKey.toUpperCase() : undefined;
60539
60681
  if (key !== undefined) {
60540
60682
  textElements[key] = { entry: (0, xml_utils_1.unescape)(item.ENTRY), maxLength: parseInt(item.LENGTH, 10) };
60541
60683
  }
@@ -60696,11 +60838,14 @@ function parseNumber(value) {
60696
60838
  return parseInt(value, 10);
60697
60839
  }
60698
60840
  function parseDynpros(parsed) {
60699
- var _a, _b, _c, _d;
60841
+ var _a, _b, _c, _d, _e, _f, _g, _h;
60700
60842
  const dynpros = [];
60701
60843
  const xmlDynpros = (_c = (_b = (_a = parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === null || _c === void 0 ? void 0 : _c.DYNPROS;
60702
60844
  if (xmlDynpros !== undefined) {
60703
60845
  for (const d of (0, xml_utils_1.xmlToArray)(xmlDynpros.item)) {
60846
+ if ((d === null || d === void 0 ? void 0 : d.HEADER) === undefined) {
60847
+ continue;
60848
+ }
60704
60849
  const fields = [];
60705
60850
  for (const f of (0, xml_utils_1.xmlToArray)((_d = d.FIELDS) === null || _d === void 0 ? void 0 : _d.RPY_DYFATC)) {
60706
60851
  fields.push({
@@ -60715,10 +60860,10 @@ function parseDynpros(parsed) {
60715
60860
  });
60716
60861
  }
60717
60862
  dynpros.push({
60718
- number: d.HEADER.SCREEN,
60719
- description: d.HEADER.DESCRIPT,
60720
- nextScreen: d.HEADER.NEXTSCREEN,
60721
- type: d.HEADER.TYPE,
60863
+ number: (_e = d.HEADER) === null || _e === void 0 ? void 0 : _e.SCREEN,
60864
+ description: (_f = d.HEADER) === null || _f === void 0 ? void 0 : _f.DESCRIPT,
60865
+ nextScreen: (_g = d.HEADER) === null || _g === void 0 ? void 0 : _g.NEXTSCREEN,
60866
+ type: (_h = d.HEADER) === null || _h === void 0 ? void 0 : _h.TYPE,
60722
60867
  fields: fields,
60723
60868
  });
60724
60869
  }
@@ -61205,7 +61350,7 @@ class AuthorizationCheckField extends _abstract_object_1.AbstractObject {
61205
61350
  }
61206
61351
  }
61207
61352
  parse() {
61208
- var _a;
61353
+ var _a, _b, _c, _d, _e, _f;
61209
61354
  if (this.parsedXML) {
61210
61355
  return { updated: false, runtime: 0 };
61211
61356
  }
@@ -61214,10 +61359,10 @@ class AuthorizationCheckField extends _abstract_object_1.AbstractObject {
61214
61359
  const parsed = super.parseRaw2();
61215
61360
  if (parsed === undefined
61216
61361
  || parsed.abapGit === undefined
61217
- || parsed.abapGit["asx:abap"]["asx:values"] === undefined) {
61362
+ || ((_b = (_a = parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === undefined) {
61218
61363
  return { updated: false, runtime: 0 };
61219
61364
  }
61220
- this.parsedXML.rollname = (_a = parsed.abapGit["asx:abap"]["asx:values"].AUTHX) === null || _a === void 0 ? void 0 : _a.ROLLNAME;
61365
+ this.parsedXML.rollname = (_f = (_e = (_d = (_c = parsed.abapGit) === null || _c === void 0 ? void 0 : _c["asx:abap"]) === null || _d === void 0 ? void 0 : _d["asx:values"]) === null || _e === void 0 ? void 0 : _e.AUTHX) === null || _f === void 0 ? void 0 : _f.ROLLNAME;
61221
61366
  const end = Date.now();
61222
61367
  return { updated: true, runtime: end - start };
61223
61368
  }
@@ -62064,17 +62209,16 @@ class Class extends _abap_object_1.ABAPObject {
62064
62209
  }
62065
62210
  /////////////////////////
62066
62211
  parseXML() {
62212
+ var _a, _b, _c, _d, _e;
62067
62213
  if (this.parsedXML !== undefined) {
62068
62214
  return;
62069
62215
  }
62070
62216
  this.parsedXML = {};
62071
62217
  const parsed = super.parseRaw2();
62072
- if (parsed === undefined
62073
- || parsed.abapGit["asx:abap"] === undefined
62074
- || parsed.abapGit["asx:abap"]["asx:values"] === undefined) {
62218
+ if (((_b = (_a = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === undefined) {
62075
62219
  return;
62076
62220
  }
62077
- const vseo = parsed.abapGit["asx:abap"]["asx:values"].VSEOCLASS;
62221
+ const vseo = (_e = (_d = (_c = parsed.abapGit) === null || _c === void 0 ? void 0 : _c["asx:abap"]) === null || _d === void 0 ? void 0 : _d["asx:values"]) === null || _e === void 0 ? void 0 : _e.VSEOCLASS;
62078
62222
  if (vseo === undefined) {
62079
62223
  return;
62080
62224
  }
@@ -62755,6 +62899,11 @@ class DataElement extends _abstract_object_1.AbstractObject {
62755
62899
  this.parse();
62756
62900
  return (_a = this.parsedXML) === null || _a === void 0 ? void 0 : _a.textsTranslations;
62757
62901
  }
62902
+ getDtelMaster() {
62903
+ var _a;
62904
+ this.parse();
62905
+ return (_a = this.parsedXML) === null || _a === void 0 ? void 0 : _a.dtelmaster;
62906
+ }
62758
62907
  parseType(reg) {
62759
62908
  var _a;
62760
62909
  const references = [];
@@ -62832,6 +62981,7 @@ class DataElement extends _abstract_object_1.AbstractObject {
62832
62981
  datatype: dd04v === null || dd04v === void 0 ? void 0 : dd04v.DATATYPE,
62833
62982
  leng: dd04v === null || dd04v === void 0 ? void 0 : dd04v.LENG,
62834
62983
  decimals: dd04v === null || dd04v === void 0 ? void 0 : dd04v.DECIMALS,
62984
+ dtelmaster: dd04v === null || dd04v === void 0 ? void 0 : dd04v.DTELMASTER,
62835
62985
  texts: {
62836
62986
  short: dd04v === null || dd04v === void 0 ? void 0 : dd04v.SCRTEXT_S,
62837
62987
  medium: dd04v === null || dd04v === void 0 ? void 0 : dd04v.SCRTEXT_M,
@@ -63268,6 +63418,7 @@ class EnhancementImplementation extends _abstract_object_1.AbstractObject {
63268
63418
  return (_a = this.parsedXML) === null || _a === void 0 ? void 0 : _a.description;
63269
63419
  }
63270
63420
  parse() {
63421
+ var _a, _b, _c, _d, _e, _f, _g, _h;
63271
63422
  if (this.parsedXML) {
63272
63423
  return { updated: false, runtime: 0 };
63273
63424
  }
@@ -63276,11 +63427,11 @@ class EnhancementImplementation extends _abstract_object_1.AbstractObject {
63276
63427
  const parsed = super.parseRaw2();
63277
63428
  if (parsed === undefined
63278
63429
  || parsed.abapGit === undefined
63279
- || parsed.abapGit["asx:abap"]["asx:values"] === undefined) {
63430
+ || ((_b = (_a = parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === undefined) {
63280
63431
  return { updated: false, runtime: 0 };
63281
63432
  }
63282
- this.parsedXML.className = parsed.abapGit["asx:abap"]["asx:values"].CLASS;
63283
- this.parsedXML.description = parsed.abapGit["asx:abap"]["asx:values"].SHORTTEXT;
63433
+ this.parsedXML.className = (_e = (_d = (_c = parsed.abapGit) === null || _c === void 0 ? void 0 : _c["asx:abap"]) === null || _d === void 0 ? void 0 : _d["asx:values"]) === null || _e === void 0 ? void 0 : _e.CLASS;
63434
+ this.parsedXML.description = (_h = (_g = (_f = parsed.abapGit) === null || _f === void 0 ? void 0 : _f["asx:abap"]) === null || _g === void 0 ? void 0 : _g["asx:values"]) === null || _h === void 0 ? void 0 : _h.SHORTTEXT;
63284
63435
  const end = Date.now();
63285
63436
  return { updated: true, runtime: end - start };
63286
63437
  }
@@ -63328,13 +63479,13 @@ class EnhancementSpot extends _abstract_object_1.AbstractObject {
63328
63479
  }
63329
63480
  /////////////////
63330
63481
  parseXML() {
63331
- var _a, _b;
63482
+ var _a, _b, _c, _d;
63332
63483
  const parsed = super.parseRaw2();
63333
63484
  if (parsed === undefined) {
63334
63485
  return [];
63335
63486
  }
63336
63487
  const ret = [];
63337
- for (const b of (0, xml_utils_1.xmlToArray)((_b = (_a = parsed.abapGit["asx:abap"]["asx:values"]) === null || _a === void 0 ? void 0 : _a.BADI_DATA) === null || _b === void 0 ? void 0 : _b.ENH_BADI_DATA)) {
63488
+ for (const b of (0, xml_utils_1.xmlToArray)((_d = (_c = (_b = (_a = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === null || _c === void 0 ? void 0 : _c.BADI_DATA) === null || _d === void 0 ? void 0 : _d.ENH_BADI_DATA)) {
63338
63489
  ret.push({
63339
63490
  name: b.BADI_NAME,
63340
63491
  interface: b.INTERFACE_NAME,
@@ -63777,33 +63928,45 @@ class FunctionGroup extends _abap_object_1.ABAPObject {
63777
63928
  if (found === undefined) {
63778
63929
  return {};
63779
63930
  }
63780
- const parsed = new fast_xml_parser_1.XMLParser({ parseTagValue: false, ignoreAttributes: true, trimValues: false }).parse(found.getRaw());
63781
- this.findTexts(parsed);
63931
+ try {
63932
+ const parsed = new fast_xml_parser_1.XMLParser({ parseTagValue: false, ignoreAttributes: true, trimValues: false }).parse(found.getRaw());
63933
+ this.findTexts(parsed);
63934
+ }
63935
+ catch (_b) {
63936
+ this.texts = {};
63937
+ }
63782
63938
  }
63783
63939
  return (_a = this.texts["I"]) !== null && _a !== void 0 ? _a : {};
63784
63940
  }
63785
63941
  /////////////////////////////////
63786
63942
  parseXML() {
63787
- var _a, _b, _c;
63943
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
63788
63944
  this.includes = [];
63789
63945
  this.modules = [];
63790
63946
  const parsed = this.parseRaw2();
63791
63947
  if (parsed === undefined) {
63792
63948
  return;
63793
63949
  }
63794
- this.description = (_a = parsed.abapGit["asx:abap"]["asx:values"]) === null || _a === void 0 ? void 0 : _a.AREAT;
63950
+ this.description = (_c = (_b = (_a = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === null || _c === void 0 ? void 0 : _c.AREAT;
63795
63951
  this.dynpros = (0, _dynpros_1.parseDynpros)(parsed);
63796
63952
  // INCLUDES
63797
- const includes = (_b = parsed.abapGit["asx:abap"]["asx:values"]) === null || _b === void 0 ? void 0 : _b.INCLUDES;
63953
+ const includes = (_f = (_e = (_d = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _d === void 0 ? void 0 : _d["asx:abap"]) === null || _e === void 0 ? void 0 : _e["asx:values"]) === null || _f === void 0 ? void 0 : _f.INCLUDES;
63798
63954
  if (includes !== undefined) {
63799
63955
  for (const i of (0, xml_utils_1.xmlToArray)(includes.SOBJ_NAME)) {
63800
- this.includes.push(i);
63956
+ if (typeof i === "string") {
63957
+ this.includes.push(i);
63958
+ }
63801
63959
  }
63802
63960
  }
63803
63961
  // FUNCTION MODULES
63804
- const functions = (_c = parsed.abapGit["asx:abap"]["asx:values"]) === null || _c === void 0 ? void 0 : _c.FUNCTIONS;
63962
+ const functions = (_j = (_h = (_g = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _g === void 0 ? void 0 : _g["asx:abap"]) === null || _h === void 0 ? void 0 : _h["asx:values"]) === null || _j === void 0 ? void 0 : _j.FUNCTIONS;
63805
63963
  for (const module of (0, xml_utils_1.xmlToArray)(functions === null || functions === void 0 ? void 0 : functions.item)) {
63806
- this.modules.push(new types_1.FunctionModuleDefinition(module));
63964
+ try {
63965
+ this.modules.push(new types_1.FunctionModuleDefinition(module));
63966
+ }
63967
+ catch (_k) {
63968
+ // Ignore malformed function module metadata.
63969
+ }
63807
63970
  }
63808
63971
  }
63809
63972
  findTextFile() {
@@ -64359,6 +64522,7 @@ class ICFService extends _abstract_object_1.AbstractObject {
64359
64522
  return (_a = this.parsedXML) === null || _a === void 0 ? void 0 : _a.handlers;
64360
64523
  }
64361
64524
  parse() {
64525
+ var _a, _b, _c, _d, _e, _f, _g, _h;
64362
64526
  if (this.parsedXML) {
64363
64527
  return { updated: false, runtime: 0 };
64364
64528
  }
@@ -64367,17 +64531,17 @@ class ICFService extends _abstract_object_1.AbstractObject {
64367
64531
  const parsed = super.parseRaw2();
64368
64532
  if (parsed === undefined
64369
64533
  || parsed.abapGit === undefined
64370
- || parsed.abapGit["asx:abap"]["asx:values"] === undefined) {
64534
+ || ((_b = (_a = parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === undefined) {
64371
64535
  return { updated: false, runtime: 0 };
64372
64536
  }
64373
- const table = parsed.abapGit["asx:abap"]["asx:values"].ICFHANDLER_TABLE;
64537
+ const table = (_e = (_d = (_c = parsed.abapGit) === null || _c === void 0 ? void 0 : _c["asx:abap"]) === null || _d === void 0 ? void 0 : _d["asx:values"]) === null || _e === void 0 ? void 0 : _e.ICFHANDLER_TABLE;
64374
64538
  this.parsedXML.handlers = [];
64375
64539
  for (const h of (0, xml_utils_1.xmlToArray)(table)) {
64376
64540
  if (h.ICFHANDLER !== undefined) {
64377
64541
  this.parsedXML.handlers.push(h.ICFHANDLER.ICFHANDLER);
64378
64542
  }
64379
64543
  }
64380
- this.parsedXML.url = parsed.abapGit["asx:abap"]["asx:values"].URL;
64544
+ this.parsedXML.url = (_h = (_g = (_f = parsed.abapGit) === null || _f === void 0 ? void 0 : _f["asx:abap"]) === null || _g === void 0 ? void 0 : _g["asx:values"]) === null || _h === void 0 ? void 0 : _h.URL;
64381
64545
  const end = Date.now();
64382
64546
  return { updated: true, runtime: end - start };
64383
64547
  }
@@ -64800,16 +64964,17 @@ class Interface extends _abap_object_1.ABAPObject {
64800
64964
  }
64801
64965
  /////////////////////////
64802
64966
  parseXML() {
64967
+ var _a, _b, _c, _d, _e;
64803
64968
  if (this.parsedXML !== undefined) {
64804
64969
  return;
64805
64970
  }
64806
64971
  this.parsedXML = {};
64807
64972
  const parsed = super.parseRaw2();
64808
64973
  if (parsed === undefined
64809
- || parsed.abapGit["asx:abap"]["asx:values"] === undefined) {
64974
+ || ((_b = (_a = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === undefined) {
64810
64975
  return;
64811
64976
  }
64812
- const vseo = parsed.abapGit["asx:abap"]["asx:values"].VSEOINTERF;
64977
+ const vseo = (_e = (_d = (_c = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _c === void 0 ? void 0 : _c["asx:abap"]) === null || _d === void 0 ? void 0 : _d["asx:values"]) === null || _e === void 0 ? void 0 : _e.VSEOINTERF;
64813
64978
  if (vseo === undefined) {
64814
64979
  this.parsedXML.description = "";
64815
64980
  this.parsedXML.name = "";
@@ -64913,7 +65078,7 @@ class LockObject extends _abstract_object_1.AbstractObject {
64913
65078
  }
64914
65079
  }
64915
65080
  parse() {
64916
- var _a, _b;
65081
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
64917
65082
  if (this.parsedXML) {
64918
65083
  return { updated: false, runtime: 0 };
64919
65084
  }
@@ -64922,11 +65087,11 @@ class LockObject extends _abstract_object_1.AbstractObject {
64922
65087
  const parsed = super.parseRaw2();
64923
65088
  if (parsed === undefined
64924
65089
  || parsed.abapGit === undefined
64925
- || parsed.abapGit["asx:abap"]["asx:values"] === undefined) {
65090
+ || ((_b = (_a = parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === undefined) {
64926
65091
  return { updated: false, runtime: 0 };
64927
65092
  }
64928
- this.parsedXML.primaryTable = (_a = parsed.abapGit["asx:abap"]["asx:values"].DD25V) === null || _a === void 0 ? void 0 : _a.ROOTTAB;
64929
- this.parsedXML.description = (_b = parsed.abapGit["asx:abap"]["asx:values"].DD25V) === null || _b === void 0 ? void 0 : _b.DDTEXT;
65093
+ this.parsedXML.primaryTable = (_f = (_e = (_d = (_c = parsed.abapGit) === null || _c === void 0 ? void 0 : _c["asx:abap"]) === null || _d === void 0 ? void 0 : _d["asx:values"]) === null || _e === void 0 ? void 0 : _e.DD25V) === null || _f === void 0 ? void 0 : _f.ROOTTAB;
65094
+ this.parsedXML.description = (_k = (_j = (_h = (_g = parsed.abapGit) === null || _g === void 0 ? void 0 : _g["asx:abap"]) === null || _h === void 0 ? void 0 : _h["asx:values"]) === null || _j === void 0 ? void 0 : _j.DD25V) === null || _k === void 0 ? void 0 : _k.DDTEXT;
64930
65095
  const end = Date.now();
64931
65096
  return { updated: true, runtime: end - start };
64932
65097
  }
@@ -65014,7 +65179,7 @@ class MaintenanceAndTransportObject extends _abstract_object_1.AbstractObject {
65014
65179
  }
65015
65180
  }
65016
65181
  parse() {
65017
- var _a, _b, _c, _d;
65182
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
65018
65183
  if (this.parsedXML) {
65019
65184
  return { updated: false, runtime: 0 };
65020
65185
  }
@@ -65023,12 +65188,12 @@ class MaintenanceAndTransportObject extends _abstract_object_1.AbstractObject {
65023
65188
  const parsed = super.parseRaw2();
65024
65189
  if (parsed === undefined
65025
65190
  || parsed.abapGit === undefined
65026
- || parsed.abapGit["asx:abap"]["asx:values"] === undefined) {
65191
+ || ((_b = (_a = parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === undefined) {
65027
65192
  return { updated: false, runtime: 0 };
65028
65193
  }
65029
- this.parsedXML.area = (_b = (_a = parsed.abapGit["asx:abap"]["asx:values"].TOBJ) === null || _a === void 0 ? void 0 : _a.TVDIR) === null || _b === void 0 ? void 0 : _b.AREA;
65030
- this.parsedXML.objectName = (_c = parsed.abapGit["asx:abap"]["asx:values"].OBJH) === null || _c === void 0 ? void 0 : _c.OBJECTNAME;
65031
- this.parsedXML.objectType = (_d = parsed.abapGit["asx:abap"]["asx:values"].OBJH) === null || _d === void 0 ? void 0 : _d.OBJECTTYPE;
65194
+ this.parsedXML.area = (_g = (_f = (_e = (_d = (_c = parsed.abapGit) === null || _c === void 0 ? void 0 : _c["asx:abap"]) === null || _d === void 0 ? void 0 : _d["asx:values"]) === null || _e === void 0 ? void 0 : _e.TOBJ) === null || _f === void 0 ? void 0 : _f.TVDIR) === null || _g === void 0 ? void 0 : _g.AREA;
65195
+ this.parsedXML.objectName = (_l = (_k = (_j = (_h = parsed.abapGit) === null || _h === void 0 ? void 0 : _h["asx:abap"]) === null || _j === void 0 ? void 0 : _j["asx:values"]) === null || _k === void 0 ? void 0 : _k.OBJH) === null || _l === void 0 ? void 0 : _l.OBJECTNAME;
65196
+ this.parsedXML.objectType = (_q = (_p = (_o = (_m = parsed.abapGit) === null || _m === void 0 ? void 0 : _m["asx:abap"]) === null || _o === void 0 ? void 0 : _o["asx:values"]) === null || _p === void 0 ? void 0 : _p.OBJH) === null || _q === void 0 ? void 0 : _q.OBJECTTYPE;
65032
65197
  const end = Date.now();
65033
65198
  return { updated: true, runtime: end - start };
65034
65199
  }
@@ -65101,7 +65266,7 @@ class MessageClass extends _abstract_object_1.AbstractObject {
65101
65266
  }
65102
65267
  /////////////////////////////////
65103
65268
  parseXML() {
65104
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
65269
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
65105
65270
  if (this.xml !== undefined) {
65106
65271
  return;
65107
65272
  }
@@ -65115,16 +65280,16 @@ class MessageClass extends _abstract_object_1.AbstractObject {
65115
65280
  if (parsed === undefined) {
65116
65281
  return;
65117
65282
  }
65118
- this.xml.topName = (_c = (_b = (_a = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]["asx:values"]) === null || _b === void 0 ? void 0 : _b.T100A) === null || _c === void 0 ? void 0 : _c.ARBGB;
65119
- this.xml.description = (_f = (_e = (_d = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _d === void 0 ? void 0 : _d["asx:abap"]["asx:values"]) === null || _e === void 0 ? void 0 : _e.T100A) === null || _f === void 0 ? void 0 : _f.STEXT;
65120
- const t100 = (_h = (_g = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _g === void 0 ? void 0 : _g["asx:abap"]["asx:values"]) === null || _h === void 0 ? void 0 : _h.T100;
65283
+ this.xml.topName = (_d = (_c = (_b = (_a = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === null || _c === void 0 ? void 0 : _c.T100A) === null || _d === void 0 ? void 0 : _d.ARBGB;
65284
+ this.xml.description = (_h = (_g = (_f = (_e = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _e === void 0 ? void 0 : _e["asx:abap"]) === null || _f === void 0 ? void 0 : _f["asx:values"]) === null || _g === void 0 ? void 0 : _g.T100A) === null || _h === void 0 ? void 0 : _h.STEXT;
65285
+ const t100 = (_l = (_k = (_j = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _j === void 0 ? void 0 : _j["asx:abap"]) === null || _k === void 0 ? void 0 : _k["asx:values"]) === null || _l === void 0 ? void 0 : _l.T100;
65121
65286
  if (t100 === undefined) {
65122
65287
  return;
65123
65288
  }
65124
65289
  for (const msg of (0, xml_utils_1.xmlToArray)(t100.T100)) {
65125
65290
  this.xml.parsedMessages.push(new message_1.Message(msg.MSGNR, (0, xml_utils_1.unescape)(msg.TEXT), msg.ARBGB));
65126
65291
  }
65127
- const t100_texts = (_k = (_j = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _j === void 0 ? void 0 : _j["asx:abap"]["asx:values"]) === null || _k === void 0 ? void 0 : _k.T100_TEXTS;
65292
+ const t100_texts = (_p = (_o = (_m = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _m === void 0 ? void 0 : _m["asx:abap"]) === null || _o === void 0 ? void 0 : _o["asx:values"]) === null || _p === void 0 ? void 0 : _p.T100_TEXTS;
65128
65293
  if (t100_texts === undefined) {
65129
65294
  return;
65130
65295
  }
@@ -65222,6 +65387,7 @@ class MIMEObject extends _abstract_object_1.AbstractObject {
65222
65387
  return undefined;
65223
65388
  }
65224
65389
  parse() {
65390
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
65225
65391
  if (this.parsedXML) {
65226
65392
  return { updated: false, runtime: 0 };
65227
65393
  }
@@ -65230,12 +65396,12 @@ class MIMEObject extends _abstract_object_1.AbstractObject {
65230
65396
  const parsed = super.parseRaw2();
65231
65397
  if (parsed === undefined
65232
65398
  || parsed.abapGit === undefined
65233
- || parsed.abapGit["asx:abap"]["asx:values"] === undefined) {
65399
+ || ((_b = (_a = parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === undefined) {
65234
65400
  return { updated: false, runtime: 0 };
65235
65401
  }
65236
- this.parsedXML.URL = parsed.abapGit["asx:abap"]["asx:values"].URL;
65237
- this.parsedXML.CLASS = parsed.abapGit["asx:abap"]["asx:values"].CLASS;
65238
- this.parsedXML.FOLDER = parsed.abapGit["asx:abap"]["asx:values"].FOLDER;
65402
+ this.parsedXML.URL = (_e = (_d = (_c = parsed.abapGit) === null || _c === void 0 ? void 0 : _c["asx:abap"]) === null || _d === void 0 ? void 0 : _d["asx:values"]) === null || _e === void 0 ? void 0 : _e.URL;
65403
+ this.parsedXML.CLASS = (_h = (_g = (_f = parsed.abapGit) === null || _f === void 0 ? void 0 : _f["asx:abap"]) === null || _g === void 0 ? void 0 : _g["asx:values"]) === null || _h === void 0 ? void 0 : _h.CLASS;
65404
+ this.parsedXML.FOLDER = (_l = (_k = (_j = parsed.abapGit) === null || _j === void 0 ? void 0 : _j["asx:abap"]) === null || _k === void 0 ? void 0 : _k["asx:values"]) === null || _l === void 0 ? void 0 : _l.FOLDER;
65239
65405
  const end = Date.now();
65240
65406
  return { updated: true, runtime: end - start };
65241
65407
  }
@@ -66083,10 +66249,10 @@ class Oauth2Profile extends _abstract_object_1.AbstractObject {
66083
66249
  return undefined;
66084
66250
  }
66085
66251
  listScopes() {
66086
- var _a, _b, _c;
66252
+ var _a, _b, _c, _d, _e;
66087
66253
  const ret = [];
66088
66254
  const parsed = super.parseRaw2();
66089
- for (const t of (0, xml_utils_1.xmlToArray)((_c = (_b = (_a = parsed.abapGit["asx:abap"]["asx:values"]) === null || _a === void 0 ? void 0 : _a.PROFILE) === null || _b === void 0 ? void 0 : _b.T_SCOPES) === null || _c === void 0 ? void 0 : _c.OA2P_SCOPES)) {
66255
+ for (const t of (0, xml_utils_1.xmlToArray)((_e = (_d = (_c = (_b = (_a = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === null || _c === void 0 ? void 0 : _c.PROFILE) === null || _d === void 0 ? void 0 : _d.T_SCOPES) === null || _e === void 0 ? void 0 : _e.OA2P_SCOPES)) {
66090
66256
  ret.push(t.SCOPE);
66091
66257
  }
66092
66258
  return ret;
@@ -66371,7 +66537,7 @@ class Program extends _abap_object_1.ABAPObject {
66371
66537
  }
66372
66538
  ////////////////////////////
66373
66539
  parseXML() {
66374
- var _a, _b, _c;
66540
+ var _a, _b, _c, _d;
66375
66541
  if (this.parsedXML !== undefined) {
66376
66542
  return;
66377
66543
  }
@@ -66389,11 +66555,11 @@ class Program extends _abap_object_1.ABAPObject {
66389
66555
  }
66390
66556
  let description = "";
66391
66557
  const selectionTexts = {};
66392
- for (const t of (0, xml_utils_1.xmlToArray)((_c = (_b = (_a = parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]["asx:values"]) === null || _b === void 0 ? void 0 : _b.TPOOL) === null || _c === void 0 ? void 0 : _c.item)) {
66558
+ for (const t of (0, xml_utils_1.xmlToArray)((_d = (_c = (_b = (_a = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === null || _c === void 0 ? void 0 : _c.TPOOL) === null || _d === void 0 ? void 0 : _d.item)) {
66393
66559
  if ((t === null || t === void 0 ? void 0 : t.ID) === "R") {
66394
66560
  description = t.ENTRY ? (0, xml_utils_1.unescape)(t.ENTRY) : "";
66395
66561
  }
66396
- else if ((t === null || t === void 0 ? void 0 : t.ID) === "S" && t.KEY !== undefined) {
66562
+ else if ((t === null || t === void 0 ? void 0 : t.ID) === "S" && typeof t.KEY === "string") {
66397
66563
  selectionTexts[t.KEY.toUpperCase()] = { entry: t.ENTRY ? (0, xml_utils_1.unescape)(t.ENTRY) : "", maxLength: parseInt(t.LENGTH, 10) };
66398
66564
  }
66399
66565
  }
@@ -66460,20 +66626,19 @@ class ProxyObject extends _abstract_object_1.AbstractObject {
66460
66626
  return { updated: true, runtime: end - start };
66461
66627
  }
66462
66628
  parseXML() {
66463
- var _a, _b;
66629
+ var _a, _b, _c, _d, _e;
66464
66630
  const result = { proxyData: [] };
66465
66631
  const parsed = super.parseRaw2();
66466
66632
  if (parsed === undefined
66467
66633
  || parsed.abapGit === undefined
66468
- || ((_a = parsed.abapGit["asx:abap"]) === null || _a === void 0 ? void 0 : _a["asx:values"]) === undefined) {
66634
+ || ((_b = (_a = parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === undefined) {
66469
66635
  return result;
66470
66636
  }
66471
- const values = parsed.abapGit["asx:abap"]["asx:values"];
66472
- result.proxyData = (0, xml_utils_1.xmlToArray)((_b = values.PROXY_DATA) === null || _b === void 0 ? void 0 : _b.item);
66637
+ const values = (_d = (_c = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _c === void 0 ? void 0 : _c["asx:abap"]) === null || _d === void 0 ? void 0 : _d["asx:values"];
66638
+ result.proxyData = (0, xml_utils_1.xmlToArray)((_e = values.PROXY_DATA) === null || _e === void 0 ? void 0 : _e.item);
66473
66639
  return result;
66474
66640
  }
66475
66641
  generateABAPObjects() {
66476
- var _a, _b, _c, _d, _e;
66477
66642
  this.parse();
66478
66643
  const result = [];
66479
66644
  if (!this.parsedXML) {
@@ -66481,7 +66646,7 @@ class ProxyObject extends _abstract_object_1.AbstractObject {
66481
66646
  }
66482
66647
  // Find interface definition
66483
66648
  const intfItem = this.parsedXML.proxyData.find(i => i.R3_TYPE === "INTF");
66484
- if (!intfItem || !intfItem.R3_NAME) {
66649
+ if (!intfItem || typeof intfItem.R3_NAME !== "string") {
66485
66650
  return result;
66486
66651
  }
66487
66652
  const intfName = intfItem.R3_NAME.toLowerCase();
@@ -66490,10 +66655,10 @@ class ProxyObject extends _abstract_object_1.AbstractObject {
66490
66655
  // Build interface code
66491
66656
  let code = `INTERFACE ${intfName} PUBLIC.\n`;
66492
66657
  for (const method of methods) {
66493
- const methodName = (_a = method.R3_NAME) === null || _a === void 0 ? void 0 : _a.toLowerCase();
66494
- if (!methodName) {
66658
+ if (typeof method.R3_NAME !== "string") {
66495
66659
  continue;
66496
66660
  }
66661
+ const methodName = method.R3_NAME.toLowerCase();
66497
66662
  // Find parameters for this method
66498
66663
  const importingParameters = this.parsedXML.proxyData.filter(i => i.R3_TYPE === "PAIM" && i.OBJ_NAME1 === method.OBJ_NAME1);
66499
66664
  const exportingParameters = this.parsedXML.proxyData.filter(i => i.R3_TYPE === "PAEX" && i.OBJ_NAME1 === method.OBJ_NAME1);
@@ -66502,8 +66667,8 @@ class ProxyObject extends _abstract_object_1.AbstractObject {
66502
66667
  code += ` IMPORTING\n`;
66503
66668
  for (let i = 0; i < importingParameters.length; i++) {
66504
66669
  const param = importingParameters[i];
66505
- const paramName = (_b = param.OBJ_NAME2) === null || _b === void 0 ? void 0 : _b.toLowerCase();
66506
- const paramType = (_c = param.OBJ_NAME_R) === null || _c === void 0 ? void 0 : _c.toLowerCase();
66670
+ const paramName = typeof param.OBJ_NAME2 === "string" ? param.OBJ_NAME2.toLowerCase() : undefined;
66671
+ const paramType = typeof param.OBJ_NAME_R === "string" ? param.OBJ_NAME_R.toLowerCase() : undefined;
66507
66672
  const isLast = i === importingParameters.length - 1 && exportingParameters.length === 0;
66508
66673
  code += ` ${paramName} TYPE ${paramType}${isLast ? "." : ""}\n`;
66509
66674
  }
@@ -66512,8 +66677,8 @@ class ProxyObject extends _abstract_object_1.AbstractObject {
66512
66677
  code += ` EXPORTING\n`;
66513
66678
  for (let i = 0; i < exportingParameters.length; i++) {
66514
66679
  const param = exportingParameters[i];
66515
- const paramName = (_d = param.OBJ_NAME2) === null || _d === void 0 ? void 0 : _d.toLowerCase();
66516
- const paramType = (_e = param.OBJ_NAME_R) === null || _e === void 0 ? void 0 : _e.toLowerCase();
66680
+ const paramName = typeof param.OBJ_NAME2 === "string" ? param.OBJ_NAME2.toLowerCase() : undefined;
66681
+ const paramType = typeof param.OBJ_NAME_R === "string" ? param.OBJ_NAME_R.toLowerCase() : undefined;
66517
66682
  const isLast = i === exportingParameters.length - 1;
66518
66683
  code += ` ${paramName} TYPE ${paramType}${isLast ? "." : ""}\n`;
66519
66684
  }
@@ -68344,7 +68509,7 @@ class Table extends _abstract_object_1.AbstractObject {
68344
68509
  return false;
68345
68510
  }
68346
68511
  parseXML() {
68347
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
68512
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4;
68348
68513
  const parsed = super.parseRaw2();
68349
68514
  if (parsed === undefined) {
68350
68515
  return;
@@ -68354,19 +68519,22 @@ class Table extends _abstract_object_1.AbstractObject {
68354
68519
  return;
68355
68520
  }
68356
68521
  // enhancement category
68357
- if (((_b = (_a = parsed.abapGit["asx:abap"]["asx:values"]) === null || _a === void 0 ? void 0 : _a.DD02V) === null || _b === void 0 ? void 0 : _b.EXCLASS) === undefined) {
68522
+ if (((_d = (_c = (_b = (_a = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === null || _c === void 0 ? void 0 : _c.DD02V) === null || _d === void 0 ? void 0 : _d.EXCLASS) === undefined) {
68358
68523
  this.parsedData.enhancementCategory = EnhancementCategory.NotClassified;
68359
68524
  }
68360
68525
  else {
68361
- this.parsedData.enhancementCategory = (_d = (_c = parsed.abapGit["asx:abap"]["asx:values"]) === null || _c === void 0 ? void 0 : _c.DD02V) === null || _d === void 0 ? void 0 : _d.EXCLASS;
68526
+ this.parsedData.enhancementCategory = (_h = (_g = (_f = (_e = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _e === void 0 ? void 0 : _e["asx:abap"]) === null || _f === void 0 ? void 0 : _f["asx:values"]) === null || _g === void 0 ? void 0 : _g.DD02V) === null || _h === void 0 ? void 0 : _h.EXCLASS;
68362
68527
  }
68363
68528
  // table category
68364
- this.parsedData.tableCategory = (_f = (_e = parsed.abapGit["asx:abap"]["asx:values"]) === null || _e === void 0 ? void 0 : _e.DD02V) === null || _f === void 0 ? void 0 : _f.TABCLASS;
68365
- this.parsedData.description = (_h = (_g = parsed.abapGit["asx:abap"]["asx:values"]) === null || _g === void 0 ? void 0 : _g.DD02V) === null || _h === void 0 ? void 0 : _h.DDTEXT;
68366
- this.parsedData.dataClass = (_k = (_j = parsed.abapGit["asx:abap"]["asx:values"]) === null || _j === void 0 ? void 0 : _j.DD09L) === null || _k === void 0 ? void 0 : _k.TABART;
68529
+ this.parsedData.tableCategory = (_m = (_l = (_k = (_j = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _j === void 0 ? void 0 : _j["asx:abap"]) === null || _k === void 0 ? void 0 : _k["asx:values"]) === null || _l === void 0 ? void 0 : _l.DD02V) === null || _m === void 0 ? void 0 : _m.TABCLASS;
68530
+ this.parsedData.description = (_r = (_q = (_p = (_o = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _o === void 0 ? void 0 : _o["asx:abap"]) === null || _p === void 0 ? void 0 : _p["asx:values"]) === null || _q === void 0 ? void 0 : _q.DD02V) === null || _r === void 0 ? void 0 : _r.DDTEXT;
68531
+ this.parsedData.dataClass = (_v = (_u = (_t = (_s = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _s === void 0 ? void 0 : _s["asx:abap"]) === null || _t === void 0 ? void 0 : _t["asx:values"]) === null || _u === void 0 ? void 0 : _u.DD09L) === null || _v === void 0 ? void 0 : _v.TABART;
68367
68532
  // fields
68368
- const fields = (_l = parsed.abapGit["asx:abap"]["asx:values"]) === null || _l === void 0 ? void 0 : _l.DD03P_TABLE;
68533
+ const fields = (_y = (_x = (_w = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _w === void 0 ? void 0 : _w["asx:abap"]) === null || _x === void 0 ? void 0 : _x["asx:values"]) === null || _y === void 0 ? void 0 : _y.DD03P_TABLE;
68369
68534
  for (const field of (0, xml_utils_1.xmlToArray)(fields === null || fields === void 0 ? void 0 : fields.DD03P)) {
68535
+ if (typeof (field === null || field === void 0 ? void 0 : field.FIELDNAME) !== "string") {
68536
+ continue;
68537
+ }
68370
68538
  this.parsedData.fields.push({
68371
68539
  FIELDNAME: field.FIELDNAME,
68372
68540
  ROLLNAME: field.ROLLNAME,
@@ -68386,13 +68554,13 @@ class Table extends _abstract_object_1.AbstractObject {
68386
68554
  });
68387
68555
  }
68388
68556
  // secondary indexes
68389
- const indexes = (_m = parsed.abapGit["asx:abap"]["asx:values"]) === null || _m === void 0 ? void 0 : _m.DD12V;
68557
+ const indexes = (_1 = (_0 = (_z = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _z === void 0 ? void 0 : _z["asx:abap"]) === null || _0 === void 0 ? void 0 : _0["asx:values"]) === null || _1 === void 0 ? void 0 : _1.DD12V;
68390
68558
  ;
68391
68559
  this.parsedData.secondaryIndexes = [];
68392
68560
  for (const index of (0, xml_utils_1.xmlToArray)(indexes === null || indexes === void 0 ? void 0 : indexes.DD12V)) {
68393
68561
  const indexName = index.INDEXNAME;
68394
68562
  const indexFields = [];
68395
- const indexFieldsXml = (_o = parsed.abapGit["asx:abap"]["asx:values"]) === null || _o === void 0 ? void 0 : _o.DD17V;
68563
+ const indexFieldsXml = (_4 = (_3 = (_2 = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _2 === void 0 ? void 0 : _2["asx:abap"]) === null || _3 === void 0 ? void 0 : _3["asx:values"]) === null || _4 === void 0 ? void 0 : _4.DD17V;
68396
68564
  for (const indexField of (0, xml_utils_1.xmlToArray)(indexFieldsXml === null || indexFieldsXml === void 0 ? void 0 : indexFieldsXml.DD17V)) {
68397
68565
  if (indexField.INDEXNAME === indexName) {
68398
68566
  // assumption: fields are listed by POSITION in the xml
@@ -68615,7 +68783,7 @@ class TableType extends _abstract_object_1.AbstractObject {
68615
68783
  }
68616
68784
  ////////////////////
68617
68785
  parseXML() {
68618
- var _a, _b;
68786
+ var _a, _b, _c, _d;
68619
68787
  if (this.parsedXML !== undefined) {
68620
68788
  return;
68621
68789
  }
@@ -68627,11 +68795,14 @@ class TableType extends _abstract_object_1.AbstractObject {
68627
68795
  if (parsed === undefined || parsed.abapGit === undefined) {
68628
68796
  return;
68629
68797
  }
68630
- const values = parsed.abapGit["asx:abap"]["asx:values"];
68798
+ const values = (_b = (_a = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"];
68631
68799
  if (values === undefined) {
68632
68800
  return;
68633
68801
  }
68634
68802
  const dd40v = values.DD40V;
68803
+ if (dd40v === undefined) {
68804
+ return;
68805
+ }
68635
68806
  this.parsedXML.rowtype = dd40v.ROWTYPE ? dd40v.ROWTYPE : "";
68636
68807
  this.parsedXML.rowkind = dd40v.ROWKIND ? dd40v.ROWKIND : "";
68637
68808
  this.parsedXML.datatype = dd40v.DATATYPE;
@@ -68641,13 +68812,13 @@ class TableType extends _abstract_object_1.AbstractObject {
68641
68812
  this.parsedXML.keykind = dd40v.KEYKIND;
68642
68813
  this.parsedXML.ddtext = dd40v.DDTEXT;
68643
68814
  this.parsedXML.keydef = dd40v.KEYDEF;
68644
- for (const x of (0, xml_utils_1.xmlToArray)((_a = values.DD42V) === null || _a === void 0 ? void 0 : _a.DD42V)) {
68815
+ for (const x of (0, xml_utils_1.xmlToArray)((_c = values.DD42V) === null || _c === void 0 ? void 0 : _c.DD42V)) {
68645
68816
  this.parsedXML.dd42v.push({
68646
68817
  keyname: x.SECKEYNAME || "",
68647
68818
  keyfield: x.KEYFIELD || "",
68648
68819
  });
68649
68820
  }
68650
- for (const x of (0, xml_utils_1.xmlToArray)((_b = values.DD43V) === null || _b === void 0 ? void 0 : _b.DD43V)) {
68821
+ for (const x of (0, xml_utils_1.xmlToArray)((_d = values.DD43V) === null || _d === void 0 ? void 0 : _d.DD43V)) {
68651
68822
  this.parsedXML.dd43v.push({
68652
68823
  keyname: x.SECKEYNAME || "",
68653
68824
  accessmode: x.ACCESSMODE || "",
@@ -69023,7 +69194,7 @@ class View extends _abstract_object_1.AbstractObject {
69023
69194
  }
69024
69195
  ///////////////
69025
69196
  parseXML() {
69026
- var _a, _b, _c;
69197
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
69027
69198
  this.parsedData = {
69028
69199
  header: {
69029
69200
  VIEWCLASS: "",
@@ -69036,13 +69207,18 @@ class View extends _abstract_object_1.AbstractObject {
69036
69207
  if (parsed === undefined || parsed.abapGit === undefined) {
69037
69208
  return;
69038
69209
  }
69039
- const header = (_a = parsed.abapGit["asx:abap"]["asx:values"]) === null || _a === void 0 ? void 0 : _a.DD25V;
69210
+ const header = (_c = (_b = (_a = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === null || _c === void 0 ? void 0 : _c.DD25V;
69040
69211
  this.parsedData.header = {
69041
69212
  VIEWCLASS: (header === null || header === void 0 ? void 0 : header.VIEWCLASS) || "",
69042
69213
  DDTEXT: (header === null || header === void 0 ? void 0 : header.DDTEXT) || "",
69043
69214
  };
69044
- const fields = (_b = parsed.abapGit["asx:abap"]["asx:values"]) === null || _b === void 0 ? void 0 : _b.DD27P_TABLE;
69215
+ const fields = (_f = (_e = (_d = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _d === void 0 ? void 0 : _d["asx:abap"]) === null || _e === void 0 ? void 0 : _e["asx:values"]) === null || _f === void 0 ? void 0 : _f.DD27P_TABLE;
69045
69216
  for (const field of (0, xml_utils_1.xmlToArray)(fields === null || fields === void 0 ? void 0 : fields.DD27P)) {
69217
+ if (typeof (field === null || field === void 0 ? void 0 : field.VIEWFIELD) !== "string"
69218
+ || typeof (field === null || field === void 0 ? void 0 : field.TABNAME) !== "string"
69219
+ || typeof (field === null || field === void 0 ? void 0 : field.FIELDNAME) !== "string") {
69220
+ continue;
69221
+ }
69046
69222
  this.parsedData.fields.push({
69047
69223
  VIEWFIELD: field.VIEWFIELD,
69048
69224
  TABNAME: field.TABNAME,
@@ -69050,7 +69226,7 @@ class View extends _abstract_object_1.AbstractObject {
69050
69226
  KEYFLAG: field.KEYFLAG,
69051
69227
  });
69052
69228
  }
69053
- const join = (_c = parsed.abapGit["asx:abap"]["asx:values"]) === null || _c === void 0 ? void 0 : _c.DD28J_TABLE;
69229
+ const join = (_j = (_h = (_g = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _g === void 0 ? void 0 : _g["asx:abap"]) === null || _h === void 0 ? void 0 : _h["asx:values"]) === null || _j === void 0 ? void 0 : _j.DD28J_TABLE;
69054
69230
  for (const j of (0, xml_utils_1.xmlToArray)(join === null || join === void 0 ? void 0 : join.DD28J)) {
69055
69231
  this.parsedData.join.push({
69056
69232
  LTAB: j.LTAB,
@@ -69305,7 +69481,7 @@ class WebMIME extends _abstract_object_1.AbstractObject {
69305
69481
  return undefined;
69306
69482
  }
69307
69483
  parse() {
69308
- var _a;
69484
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
69309
69485
  if (this.parsedXML) {
69310
69486
  return { updated: false, runtime: 0 };
69311
69487
  }
@@ -69314,11 +69490,14 @@ class WebMIME extends _abstract_object_1.AbstractObject {
69314
69490
  const parsed = super.parseRaw2();
69315
69491
  if (parsed === undefined
69316
69492
  || parsed.abapGit === undefined
69317
- || parsed.abapGit["asx:abap"]["asx:values"] === undefined) {
69493
+ || ((_b = (_a = parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === undefined) {
69318
69494
  return { updated: false, runtime: 0 };
69319
69495
  }
69320
- this.parsedXML.description = parsed.abapGit["asx:abap"]["asx:values"].TEXT;
69321
- for (const param of (0, xml_utils_1.xmlToArray)((_a = parsed.abapGit["asx:abap"]["asx:values"].PARAMS) === null || _a === void 0 ? void 0 : _a.WWWPARAMS)) {
69496
+ this.parsedXML.description = (_e = (_d = (_c = parsed.abapGit) === null || _c === void 0 ? void 0 : _c["asx:abap"]) === null || _d === void 0 ? void 0 : _d["asx:values"]) === null || _e === void 0 ? void 0 : _e.TEXT;
69497
+ for (const param of (0, xml_utils_1.xmlToArray)((_j = (_h = (_g = (_f = parsed.abapGit) === null || _f === void 0 ? void 0 : _f["asx:abap"]) === null || _g === void 0 ? void 0 : _g["asx:values"]) === null || _h === void 0 ? void 0 : _h.PARAMS) === null || _j === void 0 ? void 0 : _j.WWWPARAMS)) {
69498
+ if (typeof (param === null || param === void 0 ? void 0 : param.NAME) !== "string") {
69499
+ continue;
69500
+ }
69322
69501
  this.parsedXML.params[param.NAME.toLowerCase()] = param.VALUE;
69323
69502
  }
69324
69503
  const end = Date.now();
@@ -69919,7 +70098,7 @@ class Registry {
69919
70098
  }
69920
70099
  static abaplintVersion() {
69921
70100
  // magic, see build script "version.js"
69922
- return "2.120.18";
70101
+ return "2.120.20";
69923
70102
  }
69924
70103
  getDDICReferences() {
69925
70104
  return this.ddicReferences;
@@ -74643,6 +74822,8 @@ const objects_1 = __webpack_require__(/*! ../objects */ "./node_modules/@abaplin
74643
74822
  const _reference_1 = __webpack_require__(/*! ../abap/5_syntax/_reference */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/_reference.js");
74644
74823
  const basic_1 = __webpack_require__(/*! ../abap/types/basic */ "./node_modules/@abaplint/core/build/src/abap/types/basic/index.js");
74645
74824
  const _statement_1 = __webpack_require__(/*! ../abap/2_statements/statements/_statement */ "./node_modules/@abaplint/core/build/src/abap/2_statements/statements/_statement.js");
74825
+ const statements_1 = __webpack_require__(/*! ../abap/2_statements/statements */ "./node_modules/@abaplint/core/build/src/abap/2_statements/statements/index.js");
74826
+ const expressions_1 = __webpack_require__(/*! ../abap/2_statements/expressions */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js");
74646
74827
  class ClearExportingParametersConf extends _basic_rule_config_1.BasicRuleConfig {
74647
74828
  constructor() {
74648
74829
  super(...arguments);
@@ -74674,6 +74855,8 @@ Note: EXPORTING parameters passed by VALUE are always initialized and are theref
74674
74855
  Reading and writing the parameter in the same statement (e.g. "ev_result = ev_result + 1") is reported,
74675
74856
  as the source is evaluated before the parameter is assigned.
74676
74857
  Objects containing parser or syntax errors are not reported.
74858
+ "IS SUPPLIED"/"IS REQUESTED" checks are not considered reads, and "GET REFERENCE OF" plus
74859
+ "ASSIGN ... TO <fs>" are considered writes, as the value can be written via the reference.
74677
74860
 
74678
74861
  Class and interface method implementations and function modules are checked.`,
74679
74862
  tags: [_irule_1.RuleTag.Styleguide],
@@ -74799,6 +74982,16 @@ ENDCLASS.`,
74799
74982
  }
74800
74983
  const pos = reference.position.getStart();
74801
74984
  if (reference.referenceType === _reference_1.ReferenceType.DataReadReference) {
74985
+ if (this.isSuppliedOrRequested(reference, obj)) {
74986
+ continue; // "IS SUPPLIED" / "IS REQUESTED" does not read the value
74987
+ }
74988
+ if (this.isReferenceOrAssign(reference, obj)) {
74989
+ // "GET REFERENCE OF" and "ASSIGN ... TO <fs>" may be used for writing the value
74990
+ if (earliestWrite === undefined || pos.isBefore(earliestWrite.position.getStart())) {
74991
+ earliestWrite = reference;
74992
+ }
74993
+ continue;
74994
+ }
74802
74995
  if (firstRead === undefined || pos.isBefore(firstRead.position.getStart())) {
74803
74996
  firstRead = reference;
74804
74997
  }
@@ -74821,6 +75014,46 @@ ENDCLASS.`,
74821
75014
  const message = `EXPORTING parameter "${parameter.getName().toLowerCase()}" read before it is cleared or assigned`;
74822
75015
  return issue_1.Issue.atIdentifier(firstRead.position, message, this.getMetadata().key, this.conf.severity);
74823
75016
  }
75017
+ isReferenceOrAssign(reference, obj) {
75018
+ const file = obj.getABAPFileByName(reference.position.getFilename());
75019
+ const pos = reference.position.getStart();
75020
+ for (const statement of (file === null || file === void 0 ? void 0 : file.getStatements()) || []) {
75021
+ const start = statement.getStart();
75022
+ const end = statement.getEnd();
75023
+ if (pos.equals(start) === false && (pos.isAfter(start) === false || pos.isBefore(end) === false)) {
75024
+ continue;
75025
+ }
75026
+ const type = statement.get();
75027
+ return type instanceof statements_1.GetReference || type instanceof statements_1.Assign;
75028
+ }
75029
+ return false;
75030
+ }
75031
+ isSuppliedOrRequested(reference, obj) {
75032
+ const file = obj.getABAPFileByName(reference.position.getFilename());
75033
+ const pos = reference.position.getStart();
75034
+ for (const statement of (file === null || file === void 0 ? void 0 : file.getStatements()) || []) {
75035
+ const start = statement.getStart();
75036
+ const end = statement.getEnd();
75037
+ if (pos.equals(start) === false && (pos.isAfter(start) === false || pos.isBefore(end) === false)) {
75038
+ continue;
75039
+ }
75040
+ for (const compare of statement.findAllExpressionsRecursive(expressions_1.Compare)) {
75041
+ const upper = compare.concatTokens().toUpperCase();
75042
+ if (upper.includes(" IS SUPPLIED") === false
75043
+ && upper.includes(" IS REQUESTED") === false
75044
+ && upper.includes(" IS NOT SUPPLIED") === false
75045
+ && upper.includes(" IS NOT REQUESTED") === false) {
75046
+ continue;
75047
+ }
75048
+ const cStart = compare.getFirstToken().getStart();
75049
+ const cEnd = compare.getLastToken().getEnd();
75050
+ if ((pos.equals(cStart) || pos.isAfter(cStart)) && pos.isBefore(cEnd)) {
75051
+ return true;
75052
+ }
75053
+ }
75054
+ }
75055
+ return false;
75056
+ }
74824
75057
  statementStart(reference, obj) {
74825
75058
  const file = obj.getABAPFileByName(reference.position.getFilename());
74826
75059
  for (const statement of (file === null || file === void 0 ? void 0 : file.getStatements()) || []) {
@@ -92872,11 +93105,18 @@ Consider using ABAP Doc for documentation.`,
92872
93105
  return this.checkXML(xml, file);
92873
93106
  }
92874
93107
  checkXML(xml, file) {
92875
- const parsed = new fast_xml_parser_1.XMLParser({ parseTagValue: false, ignoreAttributes: true, trimValues: false }).parse(xml);
92876
- if (parsed === undefined || parsed.abapGit["asx:abap"]["asx:values"] === undefined) {
93108
+ var _a, _b, _c, _d, _e;
93109
+ let parsed;
93110
+ try {
93111
+ parsed = new fast_xml_parser_1.XMLParser({ parseTagValue: false, ignoreAttributes: true, trimValues: false }).parse(xml);
93112
+ }
93113
+ catch (_f) {
92877
93114
  return [];
92878
93115
  }
92879
- const desc = parsed.abapGit["asx:abap"]["asx:values"].DESCRIPTIONS;
93116
+ if (((_b = (_a = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === undefined) {
93117
+ return [];
93118
+ }
93119
+ const desc = (_e = (_d = (_c = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _c === void 0 ? void 0 : _c["asx:abap"]) === null || _d === void 0 ? void 0 : _d["asx:values"]) === null || _e === void 0 ? void 0 : _e.DESCRIPTIONS;
92880
93120
  if (desc === undefined) {
92881
93121
  return [];
92882
93122
  }
@@ -99214,6 +99454,40 @@ class XMLConsistency {
99214
99454
  const issues = [];
99215
99455
  const texts = obj.getTexts();
99216
99456
  const maxLengths = obj.getTextMaxLengths();
99457
+ const hasLabelTexts = (texts === null || texts === void 0 ? void 0 : texts.short) !== undefined
99458
+ || (texts === null || texts === void 0 ? void 0 : texts.medium) !== undefined
99459
+ || (texts === null || texts === void 0 ? void 0 : texts.long) !== undefined
99460
+ || (texts === null || texts === void 0 ? void 0 : texts.heading) !== undefined;
99461
+ if ((texts === null || texts === void 0 ? void 0 : texts.short) !== undefined) {
99462
+ const issue = this.checkRequiredField(file, "SCRLEN1", maxLengths === null || maxLengths === void 0 ? void 0 : maxLengths.short);
99463
+ if (issue) {
99464
+ issues.push(issue);
99465
+ }
99466
+ }
99467
+ if ((texts === null || texts === void 0 ? void 0 : texts.medium) !== undefined) {
99468
+ const issue = this.checkRequiredField(file, "SCRLEN2", maxLengths === null || maxLengths === void 0 ? void 0 : maxLengths.medium);
99469
+ if (issue) {
99470
+ issues.push(issue);
99471
+ }
99472
+ }
99473
+ if ((texts === null || texts === void 0 ? void 0 : texts.long) !== undefined) {
99474
+ const issue = this.checkRequiredField(file, "SCRLEN3", maxLengths === null || maxLengths === void 0 ? void 0 : maxLengths.long);
99475
+ if (issue) {
99476
+ issues.push(issue);
99477
+ }
99478
+ }
99479
+ if ((texts === null || texts === void 0 ? void 0 : texts.heading) !== undefined) {
99480
+ const issue = this.checkRequiredField(file, "HEADLEN", maxLengths === null || maxLengths === void 0 ? void 0 : maxLengths.heading);
99481
+ if (issue) {
99482
+ issues.push(issue);
99483
+ }
99484
+ }
99485
+ if (hasLabelTexts) {
99486
+ const issue = this.checkRequiredField(file, "DTELMASTER", obj.getDtelMaster());
99487
+ if (issue) {
99488
+ issues.push(issue);
99489
+ }
99490
+ }
99217
99491
  for (const issue of [
99218
99492
  this.checkTextLength(file, "DDTEXT", obj.getDescription(), 60),
99219
99493
  this.checkTextLength(file, "SCRTEXT_S", texts === null || texts === void 0 ? void 0 : texts.short, maxLengths === null || maxLengths === void 0 ? void 0 : maxLengths.short),
@@ -99241,6 +99515,12 @@ class XMLConsistency {
99241
99515
  }
99242
99516
  return issues;
99243
99517
  }
99518
+ checkRequiredField(file, fieldName, value) {
99519
+ if (value === undefined || value === "") {
99520
+ return issue_1.Issue.atRow(file, 1, `Missing required field ${fieldName} in DD04V`, this.getMetadata().key, this.conf.severity);
99521
+ }
99522
+ return undefined;
99523
+ }
99244
99524
  runDomain(obj, file) {
99245
99525
  var _a, _b;
99246
99526
  const maxTextLength = 60;
@@ -100650,15 +100930,15 @@ function xmlToArray(data) {
100650
100930
  }
100651
100931
  }
100652
100932
  function unescape(str) {
100653
- if (str === undefined) {
100933
+ if (typeof str !== "string") {
100654
100934
  return "";
100655
100935
  }
100656
- str = str.replace(/&amp;/g, "&");
100657
- str = str.replace(/&gt;/g, ">");
100658
- str = str.replace(/&lt;/g, "<");
100659
- str = str.replace(/&quot;/g, "\"");
100660
- str = str.replace(/&apos;/g, "'");
100661
- return str;
100936
+ let result = str.replace(/&amp;/g, "&");
100937
+ result = result.replace(/&gt;/g, ">");
100938
+ result = result.replace(/&lt;/g, "<");
100939
+ result = result.replace(/&quot;/g, "\"");
100940
+ result = result.replace(/&apos;/g, "'");
100941
+ return result;
100662
100942
  }
100663
100943
  //# sourceMappingURL=xml_utils.js.map
100664
100944
 
@@ -105021,6 +105301,9 @@ class SourceTranspiler {
105021
105301
  const context = new _1.TypeNameOrInfer().findType(typ, traversal);
105022
105302
  ret.appendString(new SourceTranspiler().transpile(c.getFirstChild(), traversal, context).getCode());
105023
105303
  ret.appendString(")");
105304
+ if (this.addGet) {
105305
+ ret.appendString(".get()");
105306
+ }
105024
105307
  }
105025
105308
  else if (c.get() instanceof core_1.Expressions.ValueBody) {
105026
105309
  continue;
@@ -107050,6 +107333,10 @@ class ValueBodyTranspiler {
107050
107333
  let extraFields = "";
107051
107334
  let baseCode = undefined;
107052
107335
  const hasLines = body.findDirectExpression(core_1.Expressions.ValueBodyLine) !== undefined;
107336
+ const outerLet = body.findDirectExpression(core_1.Expressions.Let);
107337
+ const outerLetCode = outerLet === undefined
107338
+ ? undefined
107339
+ : new let_1.LetTranspiler().transpile(outerLet, traversal).getCode();
107053
107340
  const children = body.getChildren();
107054
107341
  for (let i = 0; i < children.length; i++) {
107055
107342
  const child = children[i];
@@ -107092,10 +107379,13 @@ class ValueBodyTranspiler {
107092
107379
  }
107093
107380
  }
107094
107381
  i = idx - 1;
107095
- const result = this.buildForChain(forNodes, typ, traversal, body, baseCode);
107382
+ const result = this.buildForChain(forNodes, typ, traversal, body, baseCode, outerLetCode);
107096
107383
  ret = result.chunk;
107097
107384
  post = result.post;
107098
107385
  }
107386
+ else if (child.get() instanceof core_1.Expressions.Let) {
107387
+ continue;
107388
+ }
107099
107389
  else if (child instanceof core_1.Nodes.TokenNode && child.getFirstToken().getStr().toUpperCase() === "DEFAULT") {
107100
107390
  // note: this is last in the body, so its okay to prepend and postpend
107101
107391
  const sources = body.findDirectExpressions(core_1.Expressions.Source);
@@ -107118,10 +107408,10 @@ class ValueBodyTranspiler {
107118
107408
  }
107119
107409
  return ret.appendString(post);
107120
107410
  }
107121
- buildForChain(forNodes, typ, traversal, body, baseCode) {
107411
+ buildForChain(forNodes, typ, traversal, body, baseCode, outerLetCode) {
107122
107412
  const val = baseCode ?? new type_name_or_infer_1.TypeNameOrInfer().transpile(typ, traversal).getCode();
107123
107413
  const chunk = new chunk_1.Chunk();
107124
- const preLoopDecls = [];
107414
+ const preLoopDecls = outerLetCode === undefined ? [] : [outerLetCode];
107125
107415
  const descriptors = [];
107126
107416
  const levelIndents = [];
107127
107417
  let uniqueCounter = 1;