@abaplint/cli 2.120.18 → 2.120.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/build/cli.js +407 -117
  2. package/package.json +5 -4
package/build/cli.js CHANGED
@@ -6139,7 +6139,7 @@ class MessageSource extends combi_1.Expression {
6139
6139
  getRunnable() {
6140
6140
  const msgid = (0, combi_1.seq)((0, combi_1.tok)(tokens_1.ParenLeft), _1.MessageClass, (0, combi_1.tok)(tokens_1.ParenRightW));
6141
6141
  const simple = (0, combi_1.seq)(_1.MessageTypeAndNumber, (0, combi_1.opt)(msgid));
6142
- const mess1 = (0, combi_1.seq)("ID", _1.Source, "TYPE", _1.Source, "NUMBER", (0, combi_1.altPrio)(_1.MessageNumber, _1.Source));
6142
+ const mess1 = (0, combi_1.seq)("ID", _1.SimpleSource3, "TYPE", _1.SimpleSource3, "NUMBER", (0, combi_1.altPrio)(_1.MessageNumber, _1.SimpleSource3));
6143
6143
  return (0, combi_1.altPrio)(simple, mess1);
6144
6144
  }
6145
6145
  }
@@ -7563,7 +7563,7 @@ class Source extends combi_1.Expression {
7563
7563
  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 });
7564
7564
  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 });
7565
7565
  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 });
7566
- 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)));
7566
+ 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 });
7567
7567
  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 });
7568
7568
  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 });
7569
7569
  const prefix1 = (0, combi_1.altPrio)((0, combi_1.tok)(tokens_1.WDashW), (0, combi_1.tok)(tokens_1.WPlusW));
@@ -26422,6 +26422,20 @@ class CurrentScope {
26422
26422
  }
26423
26423
  return false;
26424
26424
  }
26425
+ isInStaticMethod() {
26426
+ let curr = this.current;
26427
+ while (curr !== undefined) {
26428
+ const stype = curr.getIdentifier().stype;
26429
+ if (stype === _scope_type_1.ScopeType.MethodInstance) {
26430
+ return false;
26431
+ }
26432
+ else if (stype === _scope_type_1.ScopeType.ClassImplementation) {
26433
+ return true;
26434
+ }
26435
+ curr = curr.getParent();
26436
+ }
26437
+ return false;
26438
+ }
26425
26439
  addLocalFriend(className, friendName) {
26426
26440
  var _a;
26427
26441
  const key = className.toUpperCase();
@@ -27787,7 +27801,8 @@ class TypeUtils {
27787
27801
  }
27788
27802
  }
27789
27803
  else if (source instanceof basic_1.XStringType) {
27790
- if (target instanceof basic_1.CLikeType
27804
+ if (target instanceof basic_1.CharacterType
27805
+ || target instanceof basic_1.CLikeType
27791
27806
  || target instanceof basic_1.IntegerType
27792
27807
  || target instanceof basic_1.StringType
27793
27808
  || target instanceof basic_1.ObjectReferenceType
@@ -29149,19 +29164,59 @@ function checkOffsetLength(source, sourceType, method, input) {
29149
29164
 
29150
29165
  "use strict";
29151
29166
 
29167
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
29168
+ if (k2 === undefined) k2 = k;
29169
+ var desc = Object.getOwnPropertyDescriptor(m, k);
29170
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
29171
+ desc = { enumerable: true, get: function() { return m[k]; } };
29172
+ }
29173
+ Object.defineProperty(o, k2, desc);
29174
+ }) : (function(o, m, k, k2) {
29175
+ if (k2 === undefined) k2 = k;
29176
+ o[k2] = m[k];
29177
+ }));
29178
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
29179
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
29180
+ }) : function(o, v) {
29181
+ o["default"] = v;
29182
+ });
29183
+ var __importStar = (this && this.__importStar) || (function () {
29184
+ var ownKeys = function(o) {
29185
+ ownKeys = Object.getOwnPropertyNames || function (o) {
29186
+ var ar = [];
29187
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29188
+ return ar;
29189
+ };
29190
+ return ownKeys(o);
29191
+ };
29192
+ return function (mod) {
29193
+ if (mod && mod.__esModule) return mod;
29194
+ var result = {};
29195
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
29196
+ __setModuleDefault(result, mod);
29197
+ return result;
29198
+ };
29199
+ })();
29152
29200
  Object.defineProperty(exports, "__esModule", ({ value: true }));
29153
29201
  exports.AttributeChain = void 0;
29202
+ const nodes_1 = __webpack_require__(/*! ../../nodes */ "../core/build/src/abap/nodes/index.js");
29203
+ const Expressions = __importStar(__webpack_require__(/*! ../../2_statements/expressions */ "../core/build/src/abap/2_statements/expressions/index.js"));
29154
29204
  const void_type_1 = __webpack_require__(/*! ../../types/basic/void_type */ "../core/build/src/abap/types/basic/void_type.js");
29155
- const object_reference_type_1 = __webpack_require__(/*! ../../types/basic/object_reference_type */ "../core/build/src/abap/types/basic/object_reference_type.js");
29205
+ const basic_1 = __webpack_require__(/*! ../../types/basic */ "../core/build/src/abap/types/basic/index.js");
29156
29206
  const _object_oriented_1 = __webpack_require__(/*! ../_object_oriented */ "../core/build/src/abap/5_syntax/_object_oriented.js");
29157
29207
  const expressions_1 = __webpack_require__(/*! ../../2_statements/expressions */ "../core/build/src/abap/2_statements/expressions/index.js");
29158
29208
  const _syntax_input_1 = __webpack_require__(/*! ../_syntax_input */ "../core/build/src/abap/5_syntax/_syntax_input.js");
29209
+ const component_name_1 = __webpack_require__(/*! ./component_name */ "../core/build/src/abap/5_syntax/expressions/component_name.js");
29210
+ const attribute_name_1 = __webpack_require__(/*! ./attribute_name */ "../core/build/src/abap/5_syntax/expressions/attribute_name.js");
29211
+ const table_expression_1 = __webpack_require__(/*! ./table_expression */ "../core/build/src/abap/5_syntax/expressions/table_expression.js");
29212
+ const field_offset_1 = __webpack_require__(/*! ./field_offset */ "../core/build/src/abap/5_syntax/expressions/field_offset.js");
29213
+ const field_length_1 = __webpack_require__(/*! ./field_length */ "../core/build/src/abap/5_syntax/expressions/field_length.js");
29159
29214
  class AttributeChain {
29160
29215
  static runSyntax(inputContext, node, input, type) {
29161
29216
  if (inputContext instanceof void_type_1.VoidType) {
29162
29217
  return inputContext;
29163
29218
  }
29164
- else if (!(inputContext instanceof object_reference_type_1.ObjectReferenceType)) {
29219
+ else if (!(inputContext instanceof basic_1.ObjectReferenceType)) {
29165
29220
  input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), "Not an object reference(AttributeChain)"));
29166
29221
  return void_type_1.VoidType.get(_syntax_input_1.CheckSyntaxKey);
29167
29222
  }
@@ -29191,8 +29246,69 @@ class AttributeChain {
29191
29246
  for (const t of type) {
29192
29247
  input.scope.addReference(nameToken, context, t, input.filename);
29193
29248
  }
29194
- // todo, loop, handle ArrowOrDash, ComponentName, TableExpression
29195
- return context.getType();
29249
+ let contextType = context.getType();
29250
+ const children = node.getChildren();
29251
+ for (let i = 1; i < children.length; i++) {
29252
+ const child = children[i];
29253
+ if (contextType instanceof void_type_1.VoidType || contextType instanceof basic_1.UnknownType) {
29254
+ return contextType;
29255
+ }
29256
+ else if (child.get() instanceof Expressions.ArrowOrDash) {
29257
+ const operator = child.getFirstToken().getStr();
29258
+ if (operator === "-" && !(contextType instanceof basic_1.StructureType)) {
29259
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, child.getFirstToken(), "AttributeChain, not a structure"));
29260
+ return void_type_1.VoidType.get(_syntax_input_1.CheckSyntaxKey);
29261
+ }
29262
+ else if ((operator === "->" || operator === "=>")
29263
+ && !(contextType instanceof basic_1.ObjectReferenceType)
29264
+ && !(contextType instanceof basic_1.DataReference)) {
29265
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, child.getFirstToken(), "AttributeChain, not a reference"));
29266
+ return void_type_1.VoidType.get(_syntax_input_1.CheckSyntaxKey);
29267
+ }
29268
+ }
29269
+ else if (child.get() instanceof Expressions.ComponentName) {
29270
+ if (contextType instanceof basic_1.ObjectReferenceType || contextType instanceof basic_1.DataReference) {
29271
+ contextType = attribute_name_1.AttributeName.runSyntax(contextType, child, input, type);
29272
+ }
29273
+ else {
29274
+ contextType = component_name_1.ComponentName.runSyntax(contextType, child, input);
29275
+ }
29276
+ }
29277
+ else if (child.getFirstToken().getStr() === "*" && contextType instanceof basic_1.DataReference) {
29278
+ contextType = contextType.getType();
29279
+ }
29280
+ else if (child instanceof nodes_1.ExpressionNode && child.get() instanceof Expressions.TableExpression) {
29281
+ if (!(contextType instanceof basic_1.TableType)) {
29282
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, child.getFirstToken(), "Table expression, expected table"));
29283
+ return void_type_1.VoidType.get(_syntax_input_1.CheckSyntaxKey);
29284
+ }
29285
+ table_expression_1.TableExpression.runSyntax(child, input, contextType);
29286
+ contextType = contextType.getRowType();
29287
+ }
29288
+ else if (child instanceof nodes_1.ExpressionNode && child.get() instanceof Expressions.FieldOffset) {
29289
+ const offset = field_offset_1.FieldOffset.runSyntax(child, input);
29290
+ if (offset !== undefined) {
29291
+ if (contextType instanceof basic_1.CharacterType) {
29292
+ contextType = new basic_1.CharacterType(contextType.getLength() - offset);
29293
+ }
29294
+ else if (contextType instanceof basic_1.HexType) {
29295
+ contextType = new basic_1.HexType(contextType.getLength() - offset);
29296
+ }
29297
+ }
29298
+ }
29299
+ else if (child instanceof nodes_1.ExpressionNode && child.get() instanceof Expressions.FieldLength) {
29300
+ const length = field_length_1.FieldLength.runSyntax(child, input);
29301
+ if (length !== undefined) {
29302
+ if (contextType instanceof basic_1.CharacterType) {
29303
+ contextType = new basic_1.CharacterType(length);
29304
+ }
29305
+ else if (contextType instanceof basic_1.HexType) {
29306
+ contextType = new basic_1.HexType(length);
29307
+ }
29308
+ }
29309
+ }
29310
+ }
29311
+ return contextType;
29196
29312
  }
29197
29313
  }
29198
29314
  exports.AttributeChain = AttributeChain;
@@ -31969,6 +32085,9 @@ class MessageSource {
31969
32085
  for (const f of node.findDirectExpressions(Expressions.Source)) {
31970
32086
  source_1.Source.runSyntax(f, input);
31971
32087
  }
32088
+ for (const f of node.findDirectExpressions(Expressions.SimpleSource3)) {
32089
+ source_1.Source.runSyntax(f, input);
32090
+ }
31972
32091
  if (node.getFirstToken().getStr().toUpperCase() === "ID") {
31973
32092
  const id = (_a = node.findExpressionAfterToken("ID")) === null || _a === void 0 ? void 0 : _a.concatTokens();
31974
32093
  let number = (_b = node.findDirectExpression(Expressions.MessageNumber)) === null || _b === void 0 ? void 0 : _b.concatTokens();
@@ -32165,6 +32284,11 @@ class MethodCallChain {
32165
32284
  input.issues.push((0, _syntax_input_1.syntaxIssue)(input, methodToken, message));
32166
32285
  return basic_1.VoidType.get(_syntax_input_1.CheckSyntaxKey);
32167
32286
  }
32287
+ if (current === first && (method === null || method === void 0 ? void 0 : method.isStatic()) === false && input.scope.isInStaticMethod() === true) {
32288
+ const message = "Method \"" + methodName + "\" not static";
32289
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, methodToken, message));
32290
+ return basic_1.VoidType.get(_syntax_input_1.CheckSyntaxKey);
32291
+ }
32168
32292
  const voidedName = context instanceof basic_1.VoidType ? context.getVoided() : undefined;
32169
32293
  const extra = helper.methodReferenceExtras(foundDef, className || voidedName);
32170
32294
  input.scope.addReference(methodToken, method, _reference_1.ReferenceType.MethodReference, input.filename, extra);
@@ -32955,9 +33079,11 @@ class MethodSource {
32955
33079
  throw new assert_error_1.AssertError("MethodSource, first child expected");
32956
33080
  }
32957
33081
  let context = this.findTop(first, input, children);
33082
+ let implicitMe = false;
32958
33083
  if (context === undefined) {
32959
33084
  context = (_a = input.scope.findVariable("me")) === null || _a === void 0 ? void 0 : _a.getType();
32960
33085
  children.unshift(first);
33086
+ implicitMe = true;
32961
33087
  }
32962
33088
  if (input.scope.getLanguageVersion() === version_1.LanguageVersion.Cloud
32963
33089
  && first.get() instanceof Expressions.Dynamic
@@ -33017,6 +33143,11 @@ class MethodSource {
33017
33143
  const def = input.scope.findObjectDefinition(className);
33018
33144
  // eslint-disable-next-line prefer-const
33019
33145
  let { method, def: foundDef } = helper.searchMethodName(def, methodName);
33146
+ if (implicitMe && current === first && (method === null || method === void 0 ? void 0 : method.isStatic()) === false && input.scope.isInStaticMethod() === true) {
33147
+ const message = "Method \"" + methodName + "\" not static";
33148
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, methodToken, message));
33149
+ return basic_1.VoidType.get(_syntax_input_1.CheckSyntaxKey);
33150
+ }
33020
33151
  if (method === undefined && (methodName === null || methodName === void 0 ? void 0 : methodName.toUpperCase()) === "CONSTRUCTOR") {
33021
33152
  context = basic_1.VoidType.get("CONSTRUCTOR"); // todo, this is a workaround, constructors always exists
33022
33153
  }
@@ -35469,7 +35600,7 @@ class Target {
35469
35600
  && !(context instanceof basic_1.VoidType)
35470
35601
  && !(context instanceof unknown_type_1.UnknownType)
35471
35602
  && !(context instanceof unknown_type_1.UnknownType)) {
35472
- const message = "Not a internal table, \"[]\"";
35603
+ const message = `Not an internal table, "${node.concatTokens()}"`;
35473
35604
  input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
35474
35605
  return basic_1.VoidType.get(_syntax_input_1.CheckSyntaxKey);
35475
35606
  }
@@ -51579,6 +51710,7 @@ class ClassDefinition extends _identifier_1.Identifier {
51579
51710
  // perform checks after everything has been initialized
51580
51711
  this.checkInterfaceVisibility(input, node);
51581
51712
  this.checkMethodsFromSuperClasses(input);
51713
+ this.checkMethodNameConflicts(input);
51582
51714
  this.checkClassNameLength(input);
51583
51715
  this.checkMethodNameLength(input);
51584
51716
  this.checkClassConstructorStatic(input);
@@ -51710,6 +51842,14 @@ class ClassDefinition extends _identifier_1.Identifier {
51710
51842
  }
51711
51843
  }
51712
51844
  }
51845
+ checkMethodNameConflicts(input) {
51846
+ for (const m of this.methodDefs.getAll()) {
51847
+ if (this.attributes.findByName(m.getName()) !== undefined
51848
+ || this.types.getByName(m.getName()) !== undefined) {
51849
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, m.getToken(), `"${m.getName()}" already defined`));
51850
+ }
51851
+ }
51852
+ }
51713
51853
  findFriends(def, input) {
51714
51854
  var _a;
51715
51855
  const result = [];
@@ -60052,21 +60192,22 @@ class ABAPObject extends _abstract_object_1.AbstractObject {
60052
60192
  return this.textsTranslations;
60053
60193
  }
60054
60194
  findTexts(parsed) {
60055
- var _a, _b, _c, _d, _e, _f;
60056
- var _g;
60195
+ var _a, _b, _c, _d, _e, _f, _g, _h;
60196
+ var _j;
60057
60197
  this.texts = {};
60058
60198
  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) {
60059
60199
  return;
60060
60200
  }
60061
- for (const t of (0, xml_utils_1.xmlToArray)(parsed.abapGit["asx:abap"]["asx:values"].TPOOL.item)) {
60062
- const id = (_e = t.ID) === null || _e === void 0 ? void 0 : _e.toUpperCase();
60201
+ 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)) {
60202
+ const id = typeof (t === null || t === void 0 ? void 0 : t.ID) === "string" ? t.ID.toUpperCase() : undefined;
60063
60203
  if (id === undefined) {
60064
60204
  continue;
60065
60205
  }
60066
60206
  if (id !== "R" && t.KEY === undefined) {
60067
60207
  continue;
60068
60208
  }
60069
- const key = (_f = ((_g = t.KEY) !== null && _g !== void 0 ? _g : t.ID)) === null || _f === void 0 ? void 0 : _f.toUpperCase();
60209
+ const rawKey = (_j = t.KEY) !== null && _j !== void 0 ? _j : t.ID;
60210
+ const key = typeof rawKey === "string" ? rawKey.toUpperCase() : undefined;
60070
60211
  if (key === undefined) {
60071
60212
  continue;
60072
60213
  }
@@ -60077,8 +60218,8 @@ class ABAPObject extends _abstract_object_1.AbstractObject {
60077
60218
  }
60078
60219
  }
60079
60220
  findTextsTranslations(parsed) {
60080
- var _a, _b, _c, _d, _e, _f;
60081
- var _g;
60221
+ var _a, _b, _c, _d, _e;
60222
+ var _f;
60082
60223
  this.textsTranslations = [];
60083
60224
  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;
60084
60225
  if (values === undefined) {
@@ -60087,7 +60228,8 @@ class ABAPObject extends _abstract_object_1.AbstractObject {
60087
60228
  for (const langItem of (0, xml_utils_1.xmlToArray)(values)) {
60088
60229
  const textElements = {};
60089
60230
  for (const item of (0, xml_utils_1.xmlToArray)((_e = langItem.TEXTPOOL) === null || _e === void 0 ? void 0 : _e.item)) {
60090
- const key = (_f = ((_g = item.KEY) !== null && _g !== void 0 ? _g : item.ID)) === null || _f === void 0 ? void 0 : _f.toUpperCase();
60231
+ const rawKey = (_f = item.KEY) !== null && _f !== void 0 ? _f : item.ID;
60232
+ const key = typeof rawKey === "string" ? rawKey.toUpperCase() : undefined;
60091
60233
  if (key !== undefined) {
60092
60234
  textElements[key] = { entry: (0, xml_utils_1.unescape)(item.ENTRY), maxLength: parseInt(item.LENGTH, 10) };
60093
60235
  }
@@ -60248,11 +60390,14 @@ function parseNumber(value) {
60248
60390
  return parseInt(value, 10);
60249
60391
  }
60250
60392
  function parseDynpros(parsed) {
60251
- var _a, _b, _c, _d;
60393
+ var _a, _b, _c, _d, _e, _f, _g, _h;
60252
60394
  const dynpros = [];
60253
60395
  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;
60254
60396
  if (xmlDynpros !== undefined) {
60255
60397
  for (const d of (0, xml_utils_1.xmlToArray)(xmlDynpros.item)) {
60398
+ if ((d === null || d === void 0 ? void 0 : d.HEADER) === undefined) {
60399
+ continue;
60400
+ }
60256
60401
  const fields = [];
60257
60402
  for (const f of (0, xml_utils_1.xmlToArray)((_d = d.FIELDS) === null || _d === void 0 ? void 0 : _d.RPY_DYFATC)) {
60258
60403
  fields.push({
@@ -60267,10 +60412,10 @@ function parseDynpros(parsed) {
60267
60412
  });
60268
60413
  }
60269
60414
  dynpros.push({
60270
- number: d.HEADER.SCREEN,
60271
- description: d.HEADER.DESCRIPT,
60272
- nextScreen: d.HEADER.NEXTSCREEN,
60273
- type: d.HEADER.TYPE,
60415
+ number: (_e = d.HEADER) === null || _e === void 0 ? void 0 : _e.SCREEN,
60416
+ description: (_f = d.HEADER) === null || _f === void 0 ? void 0 : _f.DESCRIPT,
60417
+ nextScreen: (_g = d.HEADER) === null || _g === void 0 ? void 0 : _g.NEXTSCREEN,
60418
+ type: (_h = d.HEADER) === null || _h === void 0 ? void 0 : _h.TYPE,
60274
60419
  fields: fields,
60275
60420
  });
60276
60421
  }
@@ -60757,7 +60902,7 @@ class AuthorizationCheckField extends _abstract_object_1.AbstractObject {
60757
60902
  }
60758
60903
  }
60759
60904
  parse() {
60760
- var _a;
60905
+ var _a, _b, _c, _d, _e, _f;
60761
60906
  if (this.parsedXML) {
60762
60907
  return { updated: false, runtime: 0 };
60763
60908
  }
@@ -60766,10 +60911,10 @@ class AuthorizationCheckField extends _abstract_object_1.AbstractObject {
60766
60911
  const parsed = super.parseRaw2();
60767
60912
  if (parsed === undefined
60768
60913
  || parsed.abapGit === undefined
60769
- || parsed.abapGit["asx:abap"]["asx:values"] === undefined) {
60914
+ || ((_b = (_a = parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === undefined) {
60770
60915
  return { updated: false, runtime: 0 };
60771
60916
  }
60772
- this.parsedXML.rollname = (_a = parsed.abapGit["asx:abap"]["asx:values"].AUTHX) === null || _a === void 0 ? void 0 : _a.ROLLNAME;
60917
+ 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;
60773
60918
  const end = Date.now();
60774
60919
  return { updated: true, runtime: end - start };
60775
60920
  }
@@ -61616,17 +61761,16 @@ class Class extends _abap_object_1.ABAPObject {
61616
61761
  }
61617
61762
  /////////////////////////
61618
61763
  parseXML() {
61764
+ var _a, _b, _c, _d, _e;
61619
61765
  if (this.parsedXML !== undefined) {
61620
61766
  return;
61621
61767
  }
61622
61768
  this.parsedXML = {};
61623
61769
  const parsed = super.parseRaw2();
61624
- if (parsed === undefined
61625
- || parsed.abapGit["asx:abap"] === undefined
61626
- || parsed.abapGit["asx:abap"]["asx:values"] === undefined) {
61770
+ 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) {
61627
61771
  return;
61628
61772
  }
61629
- const vseo = parsed.abapGit["asx:abap"]["asx:values"].VSEOCLASS;
61773
+ 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;
61630
61774
  if (vseo === undefined) {
61631
61775
  return;
61632
61776
  }
@@ -62307,6 +62451,11 @@ class DataElement extends _abstract_object_1.AbstractObject {
62307
62451
  this.parse();
62308
62452
  return (_a = this.parsedXML) === null || _a === void 0 ? void 0 : _a.textsTranslations;
62309
62453
  }
62454
+ getDtelMaster() {
62455
+ var _a;
62456
+ this.parse();
62457
+ return (_a = this.parsedXML) === null || _a === void 0 ? void 0 : _a.dtelmaster;
62458
+ }
62310
62459
  parseType(reg) {
62311
62460
  var _a;
62312
62461
  const references = [];
@@ -62384,6 +62533,7 @@ class DataElement extends _abstract_object_1.AbstractObject {
62384
62533
  datatype: dd04v === null || dd04v === void 0 ? void 0 : dd04v.DATATYPE,
62385
62534
  leng: dd04v === null || dd04v === void 0 ? void 0 : dd04v.LENG,
62386
62535
  decimals: dd04v === null || dd04v === void 0 ? void 0 : dd04v.DECIMALS,
62536
+ dtelmaster: dd04v === null || dd04v === void 0 ? void 0 : dd04v.DTELMASTER,
62387
62537
  texts: {
62388
62538
  short: dd04v === null || dd04v === void 0 ? void 0 : dd04v.SCRTEXT_S,
62389
62539
  medium: dd04v === null || dd04v === void 0 ? void 0 : dd04v.SCRTEXT_M,
@@ -62820,6 +62970,7 @@ class EnhancementImplementation extends _abstract_object_1.AbstractObject {
62820
62970
  return (_a = this.parsedXML) === null || _a === void 0 ? void 0 : _a.description;
62821
62971
  }
62822
62972
  parse() {
62973
+ var _a, _b, _c, _d, _e, _f, _g, _h;
62823
62974
  if (this.parsedXML) {
62824
62975
  return { updated: false, runtime: 0 };
62825
62976
  }
@@ -62828,11 +62979,11 @@ class EnhancementImplementation extends _abstract_object_1.AbstractObject {
62828
62979
  const parsed = super.parseRaw2();
62829
62980
  if (parsed === undefined
62830
62981
  || parsed.abapGit === undefined
62831
- || parsed.abapGit["asx:abap"]["asx:values"] === undefined) {
62982
+ || ((_b = (_a = parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === undefined) {
62832
62983
  return { updated: false, runtime: 0 };
62833
62984
  }
62834
- this.parsedXML.className = parsed.abapGit["asx:abap"]["asx:values"].CLASS;
62835
- this.parsedXML.description = parsed.abapGit["asx:abap"]["asx:values"].SHORTTEXT;
62985
+ 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;
62986
+ 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;
62836
62987
  const end = Date.now();
62837
62988
  return { updated: true, runtime: end - start };
62838
62989
  }
@@ -62880,13 +63031,13 @@ class EnhancementSpot extends _abstract_object_1.AbstractObject {
62880
63031
  }
62881
63032
  /////////////////
62882
63033
  parseXML() {
62883
- var _a, _b;
63034
+ var _a, _b, _c, _d;
62884
63035
  const parsed = super.parseRaw2();
62885
63036
  if (parsed === undefined) {
62886
63037
  return [];
62887
63038
  }
62888
63039
  const ret = [];
62889
- 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)) {
63040
+ 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)) {
62890
63041
  ret.push({
62891
63042
  name: b.BADI_NAME,
62892
63043
  interface: b.INTERFACE_NAME,
@@ -63329,33 +63480,45 @@ class FunctionGroup extends _abap_object_1.ABAPObject {
63329
63480
  if (found === undefined) {
63330
63481
  return {};
63331
63482
  }
63332
- const parsed = new fast_xml_parser_1.XMLParser({ parseTagValue: false, ignoreAttributes: true, trimValues: false }).parse(found.getRaw());
63333
- this.findTexts(parsed);
63483
+ try {
63484
+ const parsed = new fast_xml_parser_1.XMLParser({ parseTagValue: false, ignoreAttributes: true, trimValues: false }).parse(found.getRaw());
63485
+ this.findTexts(parsed);
63486
+ }
63487
+ catch (_b) {
63488
+ this.texts = {};
63489
+ }
63334
63490
  }
63335
63491
  return (_a = this.texts["I"]) !== null && _a !== void 0 ? _a : {};
63336
63492
  }
63337
63493
  /////////////////////////////////
63338
63494
  parseXML() {
63339
- var _a, _b, _c;
63495
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
63340
63496
  this.includes = [];
63341
63497
  this.modules = [];
63342
63498
  const parsed = this.parseRaw2();
63343
63499
  if (parsed === undefined) {
63344
63500
  return;
63345
63501
  }
63346
- this.description = (_a = parsed.abapGit["asx:abap"]["asx:values"]) === null || _a === void 0 ? void 0 : _a.AREAT;
63502
+ 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;
63347
63503
  this.dynpros = (0, _dynpros_1.parseDynpros)(parsed);
63348
63504
  // INCLUDES
63349
- const includes = (_b = parsed.abapGit["asx:abap"]["asx:values"]) === null || _b === void 0 ? void 0 : _b.INCLUDES;
63505
+ 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;
63350
63506
  if (includes !== undefined) {
63351
63507
  for (const i of (0, xml_utils_1.xmlToArray)(includes.SOBJ_NAME)) {
63352
- this.includes.push(i);
63508
+ if (typeof i === "string") {
63509
+ this.includes.push(i);
63510
+ }
63353
63511
  }
63354
63512
  }
63355
63513
  // FUNCTION MODULES
63356
- const functions = (_c = parsed.abapGit["asx:abap"]["asx:values"]) === null || _c === void 0 ? void 0 : _c.FUNCTIONS;
63514
+ 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;
63357
63515
  for (const module of (0, xml_utils_1.xmlToArray)(functions === null || functions === void 0 ? void 0 : functions.item)) {
63358
- this.modules.push(new types_1.FunctionModuleDefinition(module));
63516
+ try {
63517
+ this.modules.push(new types_1.FunctionModuleDefinition(module));
63518
+ }
63519
+ catch (_k) {
63520
+ // Ignore malformed function module metadata.
63521
+ }
63359
63522
  }
63360
63523
  }
63361
63524
  findTextFile() {
@@ -63911,6 +64074,7 @@ class ICFService extends _abstract_object_1.AbstractObject {
63911
64074
  return (_a = this.parsedXML) === null || _a === void 0 ? void 0 : _a.handlers;
63912
64075
  }
63913
64076
  parse() {
64077
+ var _a, _b, _c, _d, _e, _f, _g, _h;
63914
64078
  if (this.parsedXML) {
63915
64079
  return { updated: false, runtime: 0 };
63916
64080
  }
@@ -63919,17 +64083,17 @@ class ICFService extends _abstract_object_1.AbstractObject {
63919
64083
  const parsed = super.parseRaw2();
63920
64084
  if (parsed === undefined
63921
64085
  || parsed.abapGit === undefined
63922
- || parsed.abapGit["asx:abap"]["asx:values"] === undefined) {
64086
+ || ((_b = (_a = parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === undefined) {
63923
64087
  return { updated: false, runtime: 0 };
63924
64088
  }
63925
- const table = parsed.abapGit["asx:abap"]["asx:values"].ICFHANDLER_TABLE;
64089
+ 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;
63926
64090
  this.parsedXML.handlers = [];
63927
64091
  for (const h of (0, xml_utils_1.xmlToArray)(table)) {
63928
64092
  if (h.ICFHANDLER !== undefined) {
63929
64093
  this.parsedXML.handlers.push(h.ICFHANDLER.ICFHANDLER);
63930
64094
  }
63931
64095
  }
63932
- this.parsedXML.url = parsed.abapGit["asx:abap"]["asx:values"].URL;
64096
+ 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;
63933
64097
  const end = Date.now();
63934
64098
  return { updated: true, runtime: end - start };
63935
64099
  }
@@ -64352,16 +64516,17 @@ class Interface extends _abap_object_1.ABAPObject {
64352
64516
  }
64353
64517
  /////////////////////////
64354
64518
  parseXML() {
64519
+ var _a, _b, _c, _d, _e;
64355
64520
  if (this.parsedXML !== undefined) {
64356
64521
  return;
64357
64522
  }
64358
64523
  this.parsedXML = {};
64359
64524
  const parsed = super.parseRaw2();
64360
64525
  if (parsed === undefined
64361
- || parsed.abapGit["asx:abap"]["asx:values"] === undefined) {
64526
+ || ((_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) {
64362
64527
  return;
64363
64528
  }
64364
- const vseo = parsed.abapGit["asx:abap"]["asx:values"].VSEOINTERF;
64529
+ 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;
64365
64530
  if (vseo === undefined) {
64366
64531
  this.parsedXML.description = "";
64367
64532
  this.parsedXML.name = "";
@@ -64465,7 +64630,7 @@ class LockObject extends _abstract_object_1.AbstractObject {
64465
64630
  }
64466
64631
  }
64467
64632
  parse() {
64468
- var _a, _b;
64633
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
64469
64634
  if (this.parsedXML) {
64470
64635
  return { updated: false, runtime: 0 };
64471
64636
  }
@@ -64474,11 +64639,11 @@ class LockObject extends _abstract_object_1.AbstractObject {
64474
64639
  const parsed = super.parseRaw2();
64475
64640
  if (parsed === undefined
64476
64641
  || parsed.abapGit === undefined
64477
- || parsed.abapGit["asx:abap"]["asx:values"] === undefined) {
64642
+ || ((_b = (_a = parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === undefined) {
64478
64643
  return { updated: false, runtime: 0 };
64479
64644
  }
64480
- this.parsedXML.primaryTable = (_a = parsed.abapGit["asx:abap"]["asx:values"].DD25V) === null || _a === void 0 ? void 0 : _a.ROOTTAB;
64481
- this.parsedXML.description = (_b = parsed.abapGit["asx:abap"]["asx:values"].DD25V) === null || _b === void 0 ? void 0 : _b.DDTEXT;
64645
+ 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;
64646
+ 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;
64482
64647
  const end = Date.now();
64483
64648
  return { updated: true, runtime: end - start };
64484
64649
  }
@@ -64566,7 +64731,7 @@ class MaintenanceAndTransportObject extends _abstract_object_1.AbstractObject {
64566
64731
  }
64567
64732
  }
64568
64733
  parse() {
64569
- var _a, _b, _c, _d;
64734
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
64570
64735
  if (this.parsedXML) {
64571
64736
  return { updated: false, runtime: 0 };
64572
64737
  }
@@ -64575,12 +64740,12 @@ class MaintenanceAndTransportObject extends _abstract_object_1.AbstractObject {
64575
64740
  const parsed = super.parseRaw2();
64576
64741
  if (parsed === undefined
64577
64742
  || parsed.abapGit === undefined
64578
- || parsed.abapGit["asx:abap"]["asx:values"] === undefined) {
64743
+ || ((_b = (_a = parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === undefined) {
64579
64744
  return { updated: false, runtime: 0 };
64580
64745
  }
64581
- 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;
64582
- this.parsedXML.objectName = (_c = parsed.abapGit["asx:abap"]["asx:values"].OBJH) === null || _c === void 0 ? void 0 : _c.OBJECTNAME;
64583
- this.parsedXML.objectType = (_d = parsed.abapGit["asx:abap"]["asx:values"].OBJH) === null || _d === void 0 ? void 0 : _d.OBJECTTYPE;
64746
+ 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;
64747
+ 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;
64748
+ 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;
64584
64749
  const end = Date.now();
64585
64750
  return { updated: true, runtime: end - start };
64586
64751
  }
@@ -64653,7 +64818,7 @@ class MessageClass extends _abstract_object_1.AbstractObject {
64653
64818
  }
64654
64819
  /////////////////////////////////
64655
64820
  parseXML() {
64656
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
64821
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
64657
64822
  if (this.xml !== undefined) {
64658
64823
  return;
64659
64824
  }
@@ -64667,16 +64832,16 @@ class MessageClass extends _abstract_object_1.AbstractObject {
64667
64832
  if (parsed === undefined) {
64668
64833
  return;
64669
64834
  }
64670
- 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;
64671
- 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;
64672
- 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;
64835
+ 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;
64836
+ 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;
64837
+ 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;
64673
64838
  if (t100 === undefined) {
64674
64839
  return;
64675
64840
  }
64676
64841
  for (const msg of (0, xml_utils_1.xmlToArray)(t100.T100)) {
64677
64842
  this.xml.parsedMessages.push(new message_1.Message(msg.MSGNR, (0, xml_utils_1.unescape)(msg.TEXT), msg.ARBGB));
64678
64843
  }
64679
- 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;
64844
+ 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;
64680
64845
  if (t100_texts === undefined) {
64681
64846
  return;
64682
64847
  }
@@ -64774,6 +64939,7 @@ class MIMEObject extends _abstract_object_1.AbstractObject {
64774
64939
  return undefined;
64775
64940
  }
64776
64941
  parse() {
64942
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
64777
64943
  if (this.parsedXML) {
64778
64944
  return { updated: false, runtime: 0 };
64779
64945
  }
@@ -64782,12 +64948,12 @@ class MIMEObject extends _abstract_object_1.AbstractObject {
64782
64948
  const parsed = super.parseRaw2();
64783
64949
  if (parsed === undefined
64784
64950
  || parsed.abapGit === undefined
64785
- || parsed.abapGit["asx:abap"]["asx:values"] === undefined) {
64951
+ || ((_b = (_a = parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === undefined) {
64786
64952
  return { updated: false, runtime: 0 };
64787
64953
  }
64788
- this.parsedXML.URL = parsed.abapGit["asx:abap"]["asx:values"].URL;
64789
- this.parsedXML.CLASS = parsed.abapGit["asx:abap"]["asx:values"].CLASS;
64790
- this.parsedXML.FOLDER = parsed.abapGit["asx:abap"]["asx:values"].FOLDER;
64954
+ 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;
64955
+ 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;
64956
+ 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;
64791
64957
  const end = Date.now();
64792
64958
  return { updated: true, runtime: end - start };
64793
64959
  }
@@ -65635,10 +65801,10 @@ class Oauth2Profile extends _abstract_object_1.AbstractObject {
65635
65801
  return undefined;
65636
65802
  }
65637
65803
  listScopes() {
65638
- var _a, _b, _c;
65804
+ var _a, _b, _c, _d, _e;
65639
65805
  const ret = [];
65640
65806
  const parsed = super.parseRaw2();
65641
- 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)) {
65807
+ 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)) {
65642
65808
  ret.push(t.SCOPE);
65643
65809
  }
65644
65810
  return ret;
@@ -65923,7 +66089,7 @@ class Program extends _abap_object_1.ABAPObject {
65923
66089
  }
65924
66090
  ////////////////////////////
65925
66091
  parseXML() {
65926
- var _a, _b, _c;
66092
+ var _a, _b, _c, _d;
65927
66093
  if (this.parsedXML !== undefined) {
65928
66094
  return;
65929
66095
  }
@@ -65941,11 +66107,11 @@ class Program extends _abap_object_1.ABAPObject {
65941
66107
  }
65942
66108
  let description = "";
65943
66109
  const selectionTexts = {};
65944
- 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)) {
66110
+ 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)) {
65945
66111
  if ((t === null || t === void 0 ? void 0 : t.ID) === "R") {
65946
66112
  description = t.ENTRY ? (0, xml_utils_1.unescape)(t.ENTRY) : "";
65947
66113
  }
65948
- else if ((t === null || t === void 0 ? void 0 : t.ID) === "S" && t.KEY !== undefined) {
66114
+ else if ((t === null || t === void 0 ? void 0 : t.ID) === "S" && typeof t.KEY === "string") {
65949
66115
  selectionTexts[t.KEY.toUpperCase()] = { entry: t.ENTRY ? (0, xml_utils_1.unescape)(t.ENTRY) : "", maxLength: parseInt(t.LENGTH, 10) };
65950
66116
  }
65951
66117
  }
@@ -66012,20 +66178,19 @@ class ProxyObject extends _abstract_object_1.AbstractObject {
66012
66178
  return { updated: true, runtime: end - start };
66013
66179
  }
66014
66180
  parseXML() {
66015
- var _a, _b;
66181
+ var _a, _b, _c, _d, _e;
66016
66182
  const result = { proxyData: [] };
66017
66183
  const parsed = super.parseRaw2();
66018
66184
  if (parsed === undefined
66019
66185
  || parsed.abapGit === undefined
66020
- || ((_a = parsed.abapGit["asx:abap"]) === null || _a === void 0 ? void 0 : _a["asx:values"]) === undefined) {
66186
+ || ((_b = (_a = parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === undefined) {
66021
66187
  return result;
66022
66188
  }
66023
- const values = parsed.abapGit["asx:abap"]["asx:values"];
66024
- result.proxyData = (0, xml_utils_1.xmlToArray)((_b = values.PROXY_DATA) === null || _b === void 0 ? void 0 : _b.item);
66189
+ 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"];
66190
+ result.proxyData = (0, xml_utils_1.xmlToArray)((_e = values.PROXY_DATA) === null || _e === void 0 ? void 0 : _e.item);
66025
66191
  return result;
66026
66192
  }
66027
66193
  generateABAPObjects() {
66028
- var _a, _b, _c, _d, _e;
66029
66194
  this.parse();
66030
66195
  const result = [];
66031
66196
  if (!this.parsedXML) {
@@ -66033,7 +66198,7 @@ class ProxyObject extends _abstract_object_1.AbstractObject {
66033
66198
  }
66034
66199
  // Find interface definition
66035
66200
  const intfItem = this.parsedXML.proxyData.find(i => i.R3_TYPE === "INTF");
66036
- if (!intfItem || !intfItem.R3_NAME) {
66201
+ if (!intfItem || typeof intfItem.R3_NAME !== "string") {
66037
66202
  return result;
66038
66203
  }
66039
66204
  const intfName = intfItem.R3_NAME.toLowerCase();
@@ -66042,10 +66207,10 @@ class ProxyObject extends _abstract_object_1.AbstractObject {
66042
66207
  // Build interface code
66043
66208
  let code = `INTERFACE ${intfName} PUBLIC.\n`;
66044
66209
  for (const method of methods) {
66045
- const methodName = (_a = method.R3_NAME) === null || _a === void 0 ? void 0 : _a.toLowerCase();
66046
- if (!methodName) {
66210
+ if (typeof method.R3_NAME !== "string") {
66047
66211
  continue;
66048
66212
  }
66213
+ const methodName = method.R3_NAME.toLowerCase();
66049
66214
  // Find parameters for this method
66050
66215
  const importingParameters = this.parsedXML.proxyData.filter(i => i.R3_TYPE === "PAIM" && i.OBJ_NAME1 === method.OBJ_NAME1);
66051
66216
  const exportingParameters = this.parsedXML.proxyData.filter(i => i.R3_TYPE === "PAEX" && i.OBJ_NAME1 === method.OBJ_NAME1);
@@ -66054,8 +66219,8 @@ class ProxyObject extends _abstract_object_1.AbstractObject {
66054
66219
  code += ` IMPORTING\n`;
66055
66220
  for (let i = 0; i < importingParameters.length; i++) {
66056
66221
  const param = importingParameters[i];
66057
- const paramName = (_b = param.OBJ_NAME2) === null || _b === void 0 ? void 0 : _b.toLowerCase();
66058
- const paramType = (_c = param.OBJ_NAME_R) === null || _c === void 0 ? void 0 : _c.toLowerCase();
66222
+ const paramName = typeof param.OBJ_NAME2 === "string" ? param.OBJ_NAME2.toLowerCase() : undefined;
66223
+ const paramType = typeof param.OBJ_NAME_R === "string" ? param.OBJ_NAME_R.toLowerCase() : undefined;
66059
66224
  const isLast = i === importingParameters.length - 1 && exportingParameters.length === 0;
66060
66225
  code += ` ${paramName} TYPE ${paramType}${isLast ? "." : ""}\n`;
66061
66226
  }
@@ -66064,8 +66229,8 @@ class ProxyObject extends _abstract_object_1.AbstractObject {
66064
66229
  code += ` EXPORTING\n`;
66065
66230
  for (let i = 0; i < exportingParameters.length; i++) {
66066
66231
  const param = exportingParameters[i];
66067
- const paramName = (_d = param.OBJ_NAME2) === null || _d === void 0 ? void 0 : _d.toLowerCase();
66068
- const paramType = (_e = param.OBJ_NAME_R) === null || _e === void 0 ? void 0 : _e.toLowerCase();
66232
+ const paramName = typeof param.OBJ_NAME2 === "string" ? param.OBJ_NAME2.toLowerCase() : undefined;
66233
+ const paramType = typeof param.OBJ_NAME_R === "string" ? param.OBJ_NAME_R.toLowerCase() : undefined;
66069
66234
  const isLast = i === exportingParameters.length - 1;
66070
66235
  code += ` ${paramName} TYPE ${paramType}${isLast ? "." : ""}\n`;
66071
66236
  }
@@ -67896,7 +68061,7 @@ class Table extends _abstract_object_1.AbstractObject {
67896
68061
  return false;
67897
68062
  }
67898
68063
  parseXML() {
67899
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
68064
+ 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;
67900
68065
  const parsed = super.parseRaw2();
67901
68066
  if (parsed === undefined) {
67902
68067
  return;
@@ -67906,19 +68071,22 @@ class Table extends _abstract_object_1.AbstractObject {
67906
68071
  return;
67907
68072
  }
67908
68073
  // enhancement category
67909
- 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) {
68074
+ 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) {
67910
68075
  this.parsedData.enhancementCategory = EnhancementCategory.NotClassified;
67911
68076
  }
67912
68077
  else {
67913
- 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;
68078
+ 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;
67914
68079
  }
67915
68080
  // table category
67916
- 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;
67917
- 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;
67918
- 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;
68081
+ 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;
68082
+ 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;
68083
+ 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;
67919
68084
  // fields
67920
- const fields = (_l = parsed.abapGit["asx:abap"]["asx:values"]) === null || _l === void 0 ? void 0 : _l.DD03P_TABLE;
68085
+ 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;
67921
68086
  for (const field of (0, xml_utils_1.xmlToArray)(fields === null || fields === void 0 ? void 0 : fields.DD03P)) {
68087
+ if (typeof (field === null || field === void 0 ? void 0 : field.FIELDNAME) !== "string") {
68088
+ continue;
68089
+ }
67922
68090
  this.parsedData.fields.push({
67923
68091
  FIELDNAME: field.FIELDNAME,
67924
68092
  ROLLNAME: field.ROLLNAME,
@@ -67938,13 +68106,13 @@ class Table extends _abstract_object_1.AbstractObject {
67938
68106
  });
67939
68107
  }
67940
68108
  // secondary indexes
67941
- const indexes = (_m = parsed.abapGit["asx:abap"]["asx:values"]) === null || _m === void 0 ? void 0 : _m.DD12V;
68109
+ 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;
67942
68110
  ;
67943
68111
  this.parsedData.secondaryIndexes = [];
67944
68112
  for (const index of (0, xml_utils_1.xmlToArray)(indexes === null || indexes === void 0 ? void 0 : indexes.DD12V)) {
67945
68113
  const indexName = index.INDEXNAME;
67946
68114
  const indexFields = [];
67947
- const indexFieldsXml = (_o = parsed.abapGit["asx:abap"]["asx:values"]) === null || _o === void 0 ? void 0 : _o.DD17V;
68115
+ 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;
67948
68116
  for (const indexField of (0, xml_utils_1.xmlToArray)(indexFieldsXml === null || indexFieldsXml === void 0 ? void 0 : indexFieldsXml.DD17V)) {
67949
68117
  if (indexField.INDEXNAME === indexName) {
67950
68118
  // assumption: fields are listed by POSITION in the xml
@@ -68167,7 +68335,7 @@ class TableType extends _abstract_object_1.AbstractObject {
68167
68335
  }
68168
68336
  ////////////////////
68169
68337
  parseXML() {
68170
- var _a, _b;
68338
+ var _a, _b, _c, _d;
68171
68339
  if (this.parsedXML !== undefined) {
68172
68340
  return;
68173
68341
  }
@@ -68179,11 +68347,14 @@ class TableType extends _abstract_object_1.AbstractObject {
68179
68347
  if (parsed === undefined || parsed.abapGit === undefined) {
68180
68348
  return;
68181
68349
  }
68182
- const values = parsed.abapGit["asx:abap"]["asx:values"];
68350
+ 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"];
68183
68351
  if (values === undefined) {
68184
68352
  return;
68185
68353
  }
68186
68354
  const dd40v = values.DD40V;
68355
+ if (dd40v === undefined) {
68356
+ return;
68357
+ }
68187
68358
  this.parsedXML.rowtype = dd40v.ROWTYPE ? dd40v.ROWTYPE : "";
68188
68359
  this.parsedXML.rowkind = dd40v.ROWKIND ? dd40v.ROWKIND : "";
68189
68360
  this.parsedXML.datatype = dd40v.DATATYPE;
@@ -68193,13 +68364,13 @@ class TableType extends _abstract_object_1.AbstractObject {
68193
68364
  this.parsedXML.keykind = dd40v.KEYKIND;
68194
68365
  this.parsedXML.ddtext = dd40v.DDTEXT;
68195
68366
  this.parsedXML.keydef = dd40v.KEYDEF;
68196
- for (const x of (0, xml_utils_1.xmlToArray)((_a = values.DD42V) === null || _a === void 0 ? void 0 : _a.DD42V)) {
68367
+ for (const x of (0, xml_utils_1.xmlToArray)((_c = values.DD42V) === null || _c === void 0 ? void 0 : _c.DD42V)) {
68197
68368
  this.parsedXML.dd42v.push({
68198
68369
  keyname: x.SECKEYNAME || "",
68199
68370
  keyfield: x.KEYFIELD || "",
68200
68371
  });
68201
68372
  }
68202
- for (const x of (0, xml_utils_1.xmlToArray)((_b = values.DD43V) === null || _b === void 0 ? void 0 : _b.DD43V)) {
68373
+ for (const x of (0, xml_utils_1.xmlToArray)((_d = values.DD43V) === null || _d === void 0 ? void 0 : _d.DD43V)) {
68203
68374
  this.parsedXML.dd43v.push({
68204
68375
  keyname: x.SECKEYNAME || "",
68205
68376
  accessmode: x.ACCESSMODE || "",
@@ -68575,7 +68746,7 @@ class View extends _abstract_object_1.AbstractObject {
68575
68746
  }
68576
68747
  ///////////////
68577
68748
  parseXML() {
68578
- var _a, _b, _c;
68749
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
68579
68750
  this.parsedData = {
68580
68751
  header: {
68581
68752
  VIEWCLASS: "",
@@ -68588,13 +68759,18 @@ class View extends _abstract_object_1.AbstractObject {
68588
68759
  if (parsed === undefined || parsed.abapGit === undefined) {
68589
68760
  return;
68590
68761
  }
68591
- const header = (_a = parsed.abapGit["asx:abap"]["asx:values"]) === null || _a === void 0 ? void 0 : _a.DD25V;
68762
+ 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;
68592
68763
  this.parsedData.header = {
68593
68764
  VIEWCLASS: (header === null || header === void 0 ? void 0 : header.VIEWCLASS) || "",
68594
68765
  DDTEXT: (header === null || header === void 0 ? void 0 : header.DDTEXT) || "",
68595
68766
  };
68596
- const fields = (_b = parsed.abapGit["asx:abap"]["asx:values"]) === null || _b === void 0 ? void 0 : _b.DD27P_TABLE;
68767
+ 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;
68597
68768
  for (const field of (0, xml_utils_1.xmlToArray)(fields === null || fields === void 0 ? void 0 : fields.DD27P)) {
68769
+ if (typeof (field === null || field === void 0 ? void 0 : field.VIEWFIELD) !== "string"
68770
+ || typeof (field === null || field === void 0 ? void 0 : field.TABNAME) !== "string"
68771
+ || typeof (field === null || field === void 0 ? void 0 : field.FIELDNAME) !== "string") {
68772
+ continue;
68773
+ }
68598
68774
  this.parsedData.fields.push({
68599
68775
  VIEWFIELD: field.VIEWFIELD,
68600
68776
  TABNAME: field.TABNAME,
@@ -68602,7 +68778,7 @@ class View extends _abstract_object_1.AbstractObject {
68602
68778
  KEYFLAG: field.KEYFLAG,
68603
68779
  });
68604
68780
  }
68605
- const join = (_c = parsed.abapGit["asx:abap"]["asx:values"]) === null || _c === void 0 ? void 0 : _c.DD28J_TABLE;
68781
+ 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;
68606
68782
  for (const j of (0, xml_utils_1.xmlToArray)(join === null || join === void 0 ? void 0 : join.DD28J)) {
68607
68783
  this.parsedData.join.push({
68608
68784
  LTAB: j.LTAB,
@@ -68857,7 +69033,7 @@ class WebMIME extends _abstract_object_1.AbstractObject {
68857
69033
  return undefined;
68858
69034
  }
68859
69035
  parse() {
68860
- var _a;
69036
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
68861
69037
  if (this.parsedXML) {
68862
69038
  return { updated: false, runtime: 0 };
68863
69039
  }
@@ -68866,11 +69042,14 @@ class WebMIME extends _abstract_object_1.AbstractObject {
68866
69042
  const parsed = super.parseRaw2();
68867
69043
  if (parsed === undefined
68868
69044
  || parsed.abapGit === undefined
68869
- || parsed.abapGit["asx:abap"]["asx:values"] === undefined) {
69045
+ || ((_b = (_a = parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === undefined) {
68870
69046
  return { updated: false, runtime: 0 };
68871
69047
  }
68872
- this.parsedXML.description = parsed.abapGit["asx:abap"]["asx:values"].TEXT;
68873
- 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)) {
69048
+ 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;
69049
+ 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)) {
69050
+ if (typeof (param === null || param === void 0 ? void 0 : param.NAME) !== "string") {
69051
+ continue;
69052
+ }
68874
69053
  this.parsedXML.params[param.NAME.toLowerCase()] = param.VALUE;
68875
69054
  }
68876
69055
  const end = Date.now();
@@ -69471,7 +69650,7 @@ class Registry {
69471
69650
  }
69472
69651
  static abaplintVersion() {
69473
69652
  // magic, see build script "version.js"
69474
- return "2.120.18";
69653
+ return "2.120.20";
69475
69654
  }
69476
69655
  getDDICReferences() {
69477
69656
  return this.ddicReferences;
@@ -74195,6 +74374,8 @@ const objects_1 = __webpack_require__(/*! ../objects */ "../core/build/src/objec
74195
74374
  const _reference_1 = __webpack_require__(/*! ../abap/5_syntax/_reference */ "../core/build/src/abap/5_syntax/_reference.js");
74196
74375
  const basic_1 = __webpack_require__(/*! ../abap/types/basic */ "../core/build/src/abap/types/basic/index.js");
74197
74376
  const _statement_1 = __webpack_require__(/*! ../abap/2_statements/statements/_statement */ "../core/build/src/abap/2_statements/statements/_statement.js");
74377
+ const statements_1 = __webpack_require__(/*! ../abap/2_statements/statements */ "../core/build/src/abap/2_statements/statements/index.js");
74378
+ const expressions_1 = __webpack_require__(/*! ../abap/2_statements/expressions */ "../core/build/src/abap/2_statements/expressions/index.js");
74198
74379
  class ClearExportingParametersConf extends _basic_rule_config_1.BasicRuleConfig {
74199
74380
  constructor() {
74200
74381
  super(...arguments);
@@ -74226,6 +74407,8 @@ Note: EXPORTING parameters passed by VALUE are always initialized and are theref
74226
74407
  Reading and writing the parameter in the same statement (e.g. "ev_result = ev_result + 1") is reported,
74227
74408
  as the source is evaluated before the parameter is assigned.
74228
74409
  Objects containing parser or syntax errors are not reported.
74410
+ "IS SUPPLIED"/"IS REQUESTED" checks are not considered reads, and "GET REFERENCE OF" plus
74411
+ "ASSIGN ... TO <fs>" are considered writes, as the value can be written via the reference.
74229
74412
 
74230
74413
  Class and interface method implementations and function modules are checked.`,
74231
74414
  tags: [_irule_1.RuleTag.Styleguide],
@@ -74351,6 +74534,16 @@ ENDCLASS.`,
74351
74534
  }
74352
74535
  const pos = reference.position.getStart();
74353
74536
  if (reference.referenceType === _reference_1.ReferenceType.DataReadReference) {
74537
+ if (this.isSuppliedOrRequested(reference, obj)) {
74538
+ continue; // "IS SUPPLIED" / "IS REQUESTED" does not read the value
74539
+ }
74540
+ if (this.isReferenceOrAssign(reference, obj)) {
74541
+ // "GET REFERENCE OF" and "ASSIGN ... TO <fs>" may be used for writing the value
74542
+ if (earliestWrite === undefined || pos.isBefore(earliestWrite.position.getStart())) {
74543
+ earliestWrite = reference;
74544
+ }
74545
+ continue;
74546
+ }
74354
74547
  if (firstRead === undefined || pos.isBefore(firstRead.position.getStart())) {
74355
74548
  firstRead = reference;
74356
74549
  }
@@ -74373,6 +74566,46 @@ ENDCLASS.`,
74373
74566
  const message = `EXPORTING parameter "${parameter.getName().toLowerCase()}" read before it is cleared or assigned`;
74374
74567
  return issue_1.Issue.atIdentifier(firstRead.position, message, this.getMetadata().key, this.conf.severity);
74375
74568
  }
74569
+ isReferenceOrAssign(reference, obj) {
74570
+ const file = obj.getABAPFileByName(reference.position.getFilename());
74571
+ const pos = reference.position.getStart();
74572
+ for (const statement of (file === null || file === void 0 ? void 0 : file.getStatements()) || []) {
74573
+ const start = statement.getStart();
74574
+ const end = statement.getEnd();
74575
+ if (pos.equals(start) === false && (pos.isAfter(start) === false || pos.isBefore(end) === false)) {
74576
+ continue;
74577
+ }
74578
+ const type = statement.get();
74579
+ return type instanceof statements_1.GetReference || type instanceof statements_1.Assign;
74580
+ }
74581
+ return false;
74582
+ }
74583
+ isSuppliedOrRequested(reference, obj) {
74584
+ const file = obj.getABAPFileByName(reference.position.getFilename());
74585
+ const pos = reference.position.getStart();
74586
+ for (const statement of (file === null || file === void 0 ? void 0 : file.getStatements()) || []) {
74587
+ const start = statement.getStart();
74588
+ const end = statement.getEnd();
74589
+ if (pos.equals(start) === false && (pos.isAfter(start) === false || pos.isBefore(end) === false)) {
74590
+ continue;
74591
+ }
74592
+ for (const compare of statement.findAllExpressionsRecursive(expressions_1.Compare)) {
74593
+ const upper = compare.concatTokens().toUpperCase();
74594
+ if (upper.includes(" IS SUPPLIED") === false
74595
+ && upper.includes(" IS REQUESTED") === false
74596
+ && upper.includes(" IS NOT SUPPLIED") === false
74597
+ && upper.includes(" IS NOT REQUESTED") === false) {
74598
+ continue;
74599
+ }
74600
+ const cStart = compare.getFirstToken().getStart();
74601
+ const cEnd = compare.getLastToken().getEnd();
74602
+ if ((pos.equals(cStart) || pos.isAfter(cStart)) && pos.isBefore(cEnd)) {
74603
+ return true;
74604
+ }
74605
+ }
74606
+ }
74607
+ return false;
74608
+ }
74376
74609
  statementStart(reference, obj) {
74377
74610
  const file = obj.getABAPFileByName(reference.position.getFilename());
74378
74611
  for (const statement of (file === null || file === void 0 ? void 0 : file.getStatements()) || []) {
@@ -92424,11 +92657,18 @@ Consider using ABAP Doc for documentation.`,
92424
92657
  return this.checkXML(xml, file);
92425
92658
  }
92426
92659
  checkXML(xml, file) {
92427
- const parsed = new fast_xml_parser_1.XMLParser({ parseTagValue: false, ignoreAttributes: true, trimValues: false }).parse(xml);
92428
- if (parsed === undefined || parsed.abapGit["asx:abap"]["asx:values"] === undefined) {
92660
+ var _a, _b, _c, _d, _e;
92661
+ let parsed;
92662
+ try {
92663
+ parsed = new fast_xml_parser_1.XMLParser({ parseTagValue: false, ignoreAttributes: true, trimValues: false }).parse(xml);
92664
+ }
92665
+ catch (_f) {
92429
92666
  return [];
92430
92667
  }
92431
- const desc = parsed.abapGit["asx:abap"]["asx:values"].DESCRIPTIONS;
92668
+ 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) {
92669
+ return [];
92670
+ }
92671
+ 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;
92432
92672
  if (desc === undefined) {
92433
92673
  return [];
92434
92674
  }
@@ -98766,6 +99006,40 @@ class XMLConsistency {
98766
99006
  const issues = [];
98767
99007
  const texts = obj.getTexts();
98768
99008
  const maxLengths = obj.getTextMaxLengths();
99009
+ const hasLabelTexts = (texts === null || texts === void 0 ? void 0 : texts.short) !== undefined
99010
+ || (texts === null || texts === void 0 ? void 0 : texts.medium) !== undefined
99011
+ || (texts === null || texts === void 0 ? void 0 : texts.long) !== undefined
99012
+ || (texts === null || texts === void 0 ? void 0 : texts.heading) !== undefined;
99013
+ if ((texts === null || texts === void 0 ? void 0 : texts.short) !== undefined) {
99014
+ const issue = this.checkRequiredField(file, "SCRLEN1", maxLengths === null || maxLengths === void 0 ? void 0 : maxLengths.short);
99015
+ if (issue) {
99016
+ issues.push(issue);
99017
+ }
99018
+ }
99019
+ if ((texts === null || texts === void 0 ? void 0 : texts.medium) !== undefined) {
99020
+ const issue = this.checkRequiredField(file, "SCRLEN2", maxLengths === null || maxLengths === void 0 ? void 0 : maxLengths.medium);
99021
+ if (issue) {
99022
+ issues.push(issue);
99023
+ }
99024
+ }
99025
+ if ((texts === null || texts === void 0 ? void 0 : texts.long) !== undefined) {
99026
+ const issue = this.checkRequiredField(file, "SCRLEN3", maxLengths === null || maxLengths === void 0 ? void 0 : maxLengths.long);
99027
+ if (issue) {
99028
+ issues.push(issue);
99029
+ }
99030
+ }
99031
+ if ((texts === null || texts === void 0 ? void 0 : texts.heading) !== undefined) {
99032
+ const issue = this.checkRequiredField(file, "HEADLEN", maxLengths === null || maxLengths === void 0 ? void 0 : maxLengths.heading);
99033
+ if (issue) {
99034
+ issues.push(issue);
99035
+ }
99036
+ }
99037
+ if (hasLabelTexts) {
99038
+ const issue = this.checkRequiredField(file, "DTELMASTER", obj.getDtelMaster());
99039
+ if (issue) {
99040
+ issues.push(issue);
99041
+ }
99042
+ }
98769
99043
  for (const issue of [
98770
99044
  this.checkTextLength(file, "DDTEXT", obj.getDescription(), 60),
98771
99045
  this.checkTextLength(file, "SCRTEXT_S", texts === null || texts === void 0 ? void 0 : texts.short, maxLengths === null || maxLengths === void 0 ? void 0 : maxLengths.short),
@@ -98793,6 +99067,12 @@ class XMLConsistency {
98793
99067
  }
98794
99068
  return issues;
98795
99069
  }
99070
+ checkRequiredField(file, fieldName, value) {
99071
+ if (value === undefined || value === "") {
99072
+ return issue_1.Issue.atRow(file, 1, `Missing required field ${fieldName} in DD04V`, this.getMetadata().key, this.conf.severity);
99073
+ }
99074
+ return undefined;
99075
+ }
98796
99076
  runDomain(obj, file) {
98797
99077
  var _a, _b;
98798
99078
  const maxTextLength = 60;
@@ -100202,15 +100482,15 @@ function xmlToArray(data) {
100202
100482
  }
100203
100483
  }
100204
100484
  function unescape(str) {
100205
- if (str === undefined) {
100485
+ if (typeof str !== "string") {
100206
100486
  return "";
100207
100487
  }
100208
- str = str.replace(/&amp;/g, "&");
100209
- str = str.replace(/&gt;/g, ">");
100210
- str = str.replace(/&lt;/g, "<");
100211
- str = str.replace(/&quot;/g, "\"");
100212
- str = str.replace(/&apos;/g, "'");
100213
- return str;
100488
+ let result = str.replace(/&amp;/g, "&");
100489
+ result = result.replace(/&gt;/g, ">");
100490
+ result = result.replace(/&lt;/g, "<");
100491
+ result = result.replace(/&quot;/g, "\"");
100492
+ result = result.replace(/&apos;/g, "'");
100493
+ return result;
100214
100494
  }
100215
100495
  //# sourceMappingURL=xml_utils.js.map
100216
100496
 
@@ -100229,13 +100509,19 @@ exports.ApackDependencyProvider = void 0;
100229
100509
  const xml_js_1 = __webpack_require__(/*! xml-js */ "./node_modules/xml-js/lib/index.js");
100230
100510
  class ApackDependencyProvider {
100231
100511
  static fromManifest(manifestContents) {
100232
- var _a, _b;
100512
+ var _a, _b, _c, _d, _e;
100233
100513
  if (!manifestContents || !manifestContents.length) {
100234
100514
  return [];
100235
100515
  }
100236
100516
  const result = [];
100237
- const manifest = (0, xml_js_1.xml2js)(manifestContents, { compact: true });
100238
- let apackDependencies = (_b = (_a = manifest["asx:abap"]["asx:values"]["DATA"]) === null || _a === void 0 ? void 0 : _a["DEPENDENCIES"]) === null || _b === void 0 ? void 0 : _b.item;
100517
+ let manifest;
100518
+ try {
100519
+ manifest = (0, xml_js_1.xml2js)(manifestContents, { compact: true });
100520
+ }
100521
+ catch (_f) {
100522
+ return [];
100523
+ }
100524
+ let apackDependencies = (_d = (_c = (_b = (_a = manifest === null || manifest === void 0 ? void 0 : manifest["asx:abap"]) === null || _a === void 0 ? void 0 : _a["asx:values"]) === null || _b === void 0 ? void 0 : _b["DATA"]) === null || _c === void 0 ? void 0 : _c["DEPENDENCIES"]) === null || _d === void 0 ? void 0 : _d.item;
100239
100525
  if (!apackDependencies) {
100240
100526
  return [];
100241
100527
  }
@@ -100243,9 +100529,13 @@ class ApackDependencyProvider {
100243
100529
  apackDependencies = [apackDependencies];
100244
100530
  }
100245
100531
  for (const dependency of apackDependencies) {
100532
+ const url = (_e = dependency === null || dependency === void 0 ? void 0 : dependency["GIT_URL"]) === null || _e === void 0 ? void 0 : _e["_text"];
100533
+ if (typeof url !== "string") {
100534
+ continue;
100535
+ }
100246
100536
  result.push({
100247
100537
  files: "/src/**/*.*",
100248
- url: dependency["GIT_URL"]["_text"],
100538
+ url,
100249
100539
  });
100250
100540
  }
100251
100541
  return result;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abaplint/cli",
3
- "version": "2.120.18",
3
+ "version": "2.120.20",
4
4
  "description": "abaplint - Command Line Interface",
5
5
  "funding": "https://github.com/sponsors/larshp",
6
6
  "bin": {
@@ -8,7 +8,7 @@
8
8
  },
9
9
  "scripts": {
10
10
  "lint": "eslint \"src/**/*.ts\" \"test/**/*.ts\"",
11
- "clean": "rm -rf build",
11
+ "clean": "rimraf build",
12
12
  "compile": "npm run clean && tsc",
13
13
  "test": "npm run compile && mocha && npm run lint && npm run webpack",
14
14
  "webpack": "webpack --progress",
@@ -26,7 +26,7 @@
26
26
  "url": "git+https://github.com/abaplint/abaplint.git"
27
27
  },
28
28
  "engines": {
29
- "node": ">=18.0.0"
29
+ "node": ">=22.0.0"
30
30
  },
31
31
  "keywords": [
32
32
  "ABAP",
@@ -39,7 +39,7 @@
39
39
  },
40
40
  "homepage": "https://abaplint.org",
41
41
  "devDependencies": {
42
- "@abaplint/core": "^2.120.18",
42
+ "@abaplint/core": "^2.120.20",
43
43
  "@types/chai": "^4.3.20",
44
44
  "@types/minimist": "^1.2.5",
45
45
  "@types/mocha": "^10.0.10",
@@ -55,6 +55,7 @@
55
55
  "mocha": "^11.7.6",
56
56
  "p-limit": "^3.1.0",
57
57
  "progress": "^2.0.3",
58
+ "rimraf": "^6.1.3",
58
59
  "typescript": "^7.0.2",
59
60
  "webpack": "^5.107.2",
60
61
  "webpack-cli": "^7.0.3",