@abaplint/cli 2.113.219 → 2.113.221

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 +83 -24
  2. package/package.json +2 -2
package/build/cli.js CHANGED
@@ -7608,7 +7608,7 @@ const combi_1 = __webpack_require__(/*! ../combi */ "./node_modules/@abaplint/co
7608
7608
  const tokens_1 = __webpack_require__(/*! ../../1_lexer/tokens */ "./node_modules/@abaplint/core/build/src/abap/1_lexer/tokens/index.js");
7609
7609
  class ReportName extends combi_1.Expression {
7610
7610
  getRunnable() {
7611
- return (0, combi_1.seq)((0, combi_1.regex)(/^[\w/$%]+$/), (0, combi_1.star)((0, combi_1.seq)((0, combi_1.tok)(tokens_1.Dash), (0, combi_1.regex)(/^\w+$/))));
7611
+ return (0, combi_1.seq)((0, combi_1.regex)(/^[\w/$%&]+$/), (0, combi_1.star)((0, combi_1.seq)((0, combi_1.tok)(tokens_1.Dash), (0, combi_1.regex)(/^\w+$/))));
7612
7612
  }
7613
7613
  }
7614
7614
  exports.ReportName = ReportName;
@@ -8166,13 +8166,14 @@ const sql_field_name_1 = __webpack_require__(/*! ./sql_field_name */ "./node_mod
8166
8166
  const sql_source_1 = __webpack_require__(/*! ./sql_source */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_source.js");
8167
8167
  class SQLCase extends combi_1.Expression {
8168
8168
  getRunnable() {
8169
+ const abap = (0, combi_1.seq)((0, combi_1.tok)(tokens_1.WAt), _1.SimpleFieldChain2);
8169
8170
  const field = (0, combi_1.altPrio)(_1.SQLAggregation, SQLCase, _1.SQLFunction, _1.SQLPath, sql_field_name_1.SQLFieldName, constant_1.Constant);
8170
8171
  const sub = (0, combi_1.seq)((0, combi_1.altPrio)("+", "-", "*", "/", "&&"), (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenLeftW)), field, (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)));
8171
8172
  const sourc = (0, combi_1.altPrio)(SQLCase, _1.SQLAggregation, _1.SQLFunction, sql_source_1.SQLSource, constant_1.Constant);
8172
- const val = (0, combi_1.altPrio)(sql_cond_1.SQLCond, constant_1.Constant, (0, combi_1.seq)((0, combi_1.tok)(tokens_1.WAt), _1.SimpleSource3));
8173
+ const val = (0, combi_1.altPrio)(sql_cond_1.SQLCond, constant_1.Constant, abap);
8173
8174
  const when = (0, combi_1.seq)("WHEN", val, "THEN", sourc, (0, combi_1.starPrio)(sub));
8174
8175
  const els = (0, combi_1.seq)("ELSE", sourc);
8175
- return (0, combi_1.ver)(version_1.Version.v740sp05, (0, combi_1.seq)("CASE", (0, combi_1.opt)(sql_field_name_1.SQLFieldName), (0, combi_1.plusPrio)(when), (0, combi_1.optPrio)(els), "END"));
8176
+ return (0, combi_1.ver)(version_1.Version.v740sp05, (0, combi_1.seq)("CASE", (0, combi_1.opt)((0, combi_1.altPrio)(sql_field_name_1.SQLFieldName, abap)), (0, combi_1.plusPrio)(when), (0, combi_1.optPrio)(els), "END"));
8176
8177
  }
8177
8178
  }
8178
8179
  exports.SQLCase = SQLCase;
@@ -15209,7 +15210,8 @@ class ModifyEntities {
15209
15210
  const updateFrom = (0, combi_1.seq)("UPDATE FROM", expressions_1.Source, (0, combi_1.opt)(relating));
15210
15211
  const deleteFrom = (0, combi_1.seq)("DELETE FROM", expressions_1.Source);
15211
15212
  const updateFields = (0, combi_1.seq)("UPDATE", fieldsWith);
15212
- const operation = (0, combi_1.alt)((0, combi_1.seq)("UPDATE SET FIELDS WITH", expressions_1.Source), (0, combi_1.seq)("CREATE SET FIELDS WITH", expressions_1.Source), updateFields, deleteFrom, updateFrom, create, execute, (0, combi_1.seq)("CREATE", (0, combi_1.opt)(by), (0, combi_1.optPrio)("AUTO FILL CID"), (0, combi_1.altPrio)(withh, fieldsWith)));
15213
+ const updateSetFields = (0, combi_1.seq)("UPDATE SET FIELDS WITH", expressions_1.Source);
15214
+ const operation = (0, combi_1.alt)(updateSetFields, (0, combi_1.seq)("CREATE SET FIELDS WITH", expressions_1.Source), updateFields, deleteFrom, updateFrom, create, execute, (0, combi_1.seq)("CREATE", (0, combi_1.opt)(by), (0, combi_1.optPrio)("AUTO FILL CID"), (0, combi_1.altPrio)(withh, fieldsWith)));
15213
15215
  const failed = (0, combi_1.seq)("FAILED", expressions_1.Target);
15214
15216
  const result = (0, combi_1.seq)("RESULT", expressions_1.Target);
15215
15217
  const mapped = (0, combi_1.seq)("MAPPED", expressions_1.Target);
@@ -15219,7 +15221,7 @@ class ModifyEntities {
15219
15221
  const create2 = (0, combi_1.seq)("CREATE", fieldsWith, (0, combi_1.opt)((0, combi_1.seq)("CREATE BY", expressions_1.AssociationName, fieldsWith)));
15220
15222
  const create3 = (0, combi_1.seq)("CREATE BY", expressions_1.AssociationName, fieldsWith);
15221
15223
  const create4 = (0, combi_1.seq)("CREATE FROM", expressions_1.Source, (0, combi_1.plus)((0, combi_1.seq)("CREATE BY", expressions_1.AssociationName, "FROM", expressions_1.Source)));
15222
- const entity = (0, combi_1.seq)("ENTITY", (0, combi_1.opt)("IN LOCAL MODE"), (0, combi_1.alt)(expressions_1.NamespaceSimpleName, expressions_1.EntityAssociation), (0, combi_1.alt)(execute, create, updateFields, deleteFrom, updateFrom, create2, create3, create4));
15224
+ const entity = (0, combi_1.seq)("ENTITY", (0, combi_1.opt)("IN LOCAL MODE"), (0, combi_1.alt)(expressions_1.NamespaceSimpleName, expressions_1.EntityAssociation), (0, combi_1.alt)(execute, create, updateFields, deleteFrom, updateSetFields, updateFrom, create2, create3, create4));
15223
15225
  return (0, combi_1.ver)(version_1.Version.v754, (0, combi_1.seq)("MODIFY", (0, combi_1.alt)(entities, entity), end));
15224
15226
  }
15225
15227
  }
@@ -16161,7 +16163,8 @@ class ReadEntities {
16161
16163
  const result = (0, combi_1.seq)("RESULT", expressions_1.Target);
16162
16164
  const failed = (0, combi_1.seq)("FAILED", expressions_1.Target);
16163
16165
  const reported = (0, combi_1.seq)("REPORTED", expressions_1.Target);
16164
- const entity = (0, combi_1.seq)("ENTITY", expressions_1.NamespaceSimpleName, (0, combi_1.opt)((0, combi_1.seq)("BY", expressions_1.AssociationName)), (0, combi_1.alt)(fields, from, all), (0, combi_1.optPrio)(result));
16166
+ const foo = (0, combi_1.seq)((0, combi_1.opt)((0, combi_1.seq)("BY", expressions_1.AssociationName)), (0, combi_1.alt)(fields, from, all), (0, combi_1.optPrio)(result));
16167
+ const entity = (0, combi_1.seq)("ENTITY", expressions_1.NamespaceSimpleName, (0, combi_1.plus)(foo));
16165
16168
  const s = (0, combi_1.seq)("ENTITIES OF", expressions_1.NamespaceSimpleName, (0, combi_1.opt)("IN LOCAL MODE"), (0, combi_1.plus)(entity), (0, combi_1.optPrio)((0, combi_1.seq)("LINK", expressions_1.Target)), (0, combi_1.optPrio)((0, combi_1.per)(failed, reported)));
16166
16169
  const byall = (0, combi_1.seq)("BY", expressions_1.AssociationName, all);
16167
16170
  const by = (0, combi_1.seq)("BY", expressions_1.AssociationName, fields);
@@ -17604,11 +17607,13 @@ class Submit {
17604
17607
  const cover = (0, combi_1.seq)("SAP COVER PAGE", expressions_1.Source);
17605
17608
  const copies = (0, combi_1.seq)("COPIES", expressions_1.Source);
17606
17609
  const datasetExpiration = (0, combi_1.seq)("DATASET EXPIRATION", expressions_1.Source);
17610
+ const coverText = (0, combi_1.seq)("COVER TEXT", expressions_1.Source);
17611
+ const listName = (0, combi_1.seq)("LIST NAME", expressions_1.Source);
17607
17612
  const keep = (0, combi_1.seq)("KEEP IN SPOOL", expressions_1.Source);
17608
17613
  const imm = (0, combi_1.seq)("IMMEDIATELY", expressions_1.Source);
17609
17614
  const dest = (0, combi_1.seq)("DESTINATION", expressions_1.Source);
17610
17615
  const language = (0, combi_1.seq)("LANGUAGE", expressions_1.Source);
17611
- const perm = (0, combi_1.per)((0, combi_1.plus)(awith), selectionTable, (0, combi_1.plus)(awith), spool, lineSize, lineCount, archive, user, sset, ssetp, keep, cover, imm, layout, dest, language, free, newList, uss, copies, datasetExpiration, "TO SAP-SPOOL", "WITHOUT SPOOL DYNPRO", "VIA SELECTION-SCREEN", exporting, expressions_1.AndReturn, job);
17616
+ const perm = (0, combi_1.per)((0, combi_1.plus)(awith), selectionTable, (0, combi_1.plus)(awith), spool, lineSize, lineCount, archive, user, sset, ssetp, keep, cover, imm, layout, dest, coverText, listName, language, free, newList, uss, copies, datasetExpiration, "TO SAP-SPOOL", "WITHOUT SPOOL DYNPRO", "VIA SELECTION-SCREEN", exporting, expressions_1.AndReturn, job);
17612
17617
  const ret = (0, combi_1.seq)("SUBMIT", prog, (0, combi_1.opt)(perm));
17613
17618
  return (0, combi_1.verNot)(version_1.Version.Cloud, ret);
17614
17619
  }
@@ -21375,7 +21380,9 @@ class BuiltIn {
21375
21380
  // https://help.sap.com/doc/abapdocu_751_index_htm/7.51/en-us/abennews-610-system.htm
21376
21381
  const id3 = new tokens_1.Identifier(new position_1.Position(this.row++, 1), "sy-repid");
21377
21382
  const syrepid = new _typed_identifier_1.TypedIdentifier(id3, BuiltIn.filename, new basic_1.CharacterType(40, { qualifiedName: "sy-repid" }), ["read_only" /* IdentifierMeta.ReadOnly */, "built-in" /* IdentifierMeta.BuiltIn */]);
21378
- return [sy, syst, syrepid];
21383
+ const id4 = new tokens_1.Identifier(new position_1.Position(this.row++, 1), "syst-repid");
21384
+ const systrepid = new _typed_identifier_1.TypedIdentifier(id4, BuiltIn.filename, new basic_1.CharacterType(40, { qualifiedName: "syst-repid" }), ["read_only" /* IdentifierMeta.ReadOnly */, "built-in" /* IdentifierMeta.BuiltIn */]);
21385
+ return [sy, syst, syrepid, systrepid];
21379
21386
  }
21380
21387
  buildConstant(name, type, value) {
21381
21388
  const id = new tokens_1.Identifier(new position_1.Position(this.row++, 1), name);
@@ -24395,7 +24402,7 @@ class BasicTypes {
24395
24402
  const name = typename.concatTokens();
24396
24403
  const type = (_d = this.input.scope.getDDIC().lookupDDLS(name)) === null || _d === void 0 ? void 0 : _d.type;
24397
24404
  if (type) {
24398
- return new Types.TableType(basic_1.VoidType.get("RapTodo"), options);
24405
+ return new Types.TableType(basic_1.VoidType.get("RAP-TODO"), options);
24399
24406
  }
24400
24407
  else if (this.input.scope.getDDIC().inErrorNamespace(name)) {
24401
24408
  return new Types.UnknownType(`DDLS ${name} not found`);
@@ -30682,7 +30689,7 @@ class ClassImplementation {
30682
30689
  }
30683
30690
  else {
30684
30691
  // todo: instead of the void type, do proper typing, ie. only empty constructor method
30685
- input.scope.addIdentifier(new _typed_identifier_1.TypedIdentifier(new tokens_1.Identifier(new position_1.Position(1, 1), "super"), _builtin_1.BuiltIn.filename, basic_1.VoidType.get("noSuper")));
30692
+ input.scope.addIdentifier(new _typed_identifier_1.TypedIdentifier(new tokens_1.Identifier(new position_1.Position(1, 1), "super"), _builtin_1.BuiltIn.filename, basic_1.VoidType.get("noSuperClass")));
30686
30693
  }
30687
30694
  input.scope.addIdentifier(new _typed_identifier_1.TypedIdentifier(new tokens_1.Identifier(new position_1.Position(1, 1), "me"), _builtin_1.BuiltIn.filename, new basic_1.ObjectReferenceType(classDefinition)));
30688
30695
  helper.addAliasedAttributes(classDefinition); // todo, this is not correct, take care of instance vs static
@@ -41145,7 +41152,7 @@ const cds_integer_1 = __webpack_require__(/*! ./cds_integer */ "./node_modules/@
41145
41152
  class CDSArithmetics extends combi_1.Expression {
41146
41153
  getRunnable() {
41147
41154
  const name = (0, combi_1.seq)(_1.CDSName, (0, combi_1.optPrio)((0, combi_1.seq)(".", _1.CDSName)));
41148
- const val = (0, combi_1.altPrio)(cds_integer_1.CDSInteger, _1.CDSFunction, _1.CDSCase, _1.CDSCast, _1.CDSString, name);
41155
+ const val = (0, combi_1.altPrio)(cds_integer_1.CDSInteger, _1.CDSFunction, _1.CDSCase, _1.CDSCast, _1.CDSString, _1.CDSAggregate, name);
41149
41156
  const operator = (0, combi_1.altPrio)("+", "-", "*", "/");
41150
41157
  const operatorValue = (0, combi_1.seq)(operator, val);
41151
41158
  const paren = (0, combi_1.seq)("(", val, (0, combi_1.plusPrio)(operatorValue), ")");
@@ -41270,7 +41277,8 @@ const combi_1 = __webpack_require__(/*! ../../abap/2_statements/combi */ "./node
41270
41277
  class CDSCast extends combi_1.Expression {
41271
41278
  getRunnable() {
41272
41279
  const name = (0, combi_1.seq)(_1.CDSName, (0, combi_1.starPrio)((0, combi_1.seq)(".", _1.CDSName)));
41273
- return (0, combi_1.seq)("CAST", "(", (0, combi_1.altPrio)(_1.CDSFunction, _1.CDSCase, _1.CDSAggregate, _1.CDSArithmetics, CDSCast, _1.CDSString, name), "AS", _1.CDSType, (0, combi_1.optPrio)((0, combi_1.seq)("PRESERVING", "TYPE")), ")");
41280
+ const first = (0, combi_1.altPrio)(_1.CDSFunction, _1.CDSCase, _1.CDSAggregate, _1.CDSArithmetics, CDSCast, _1.CDSString, _1.CDSInteger, name);
41281
+ return (0, combi_1.seq)("CAST", "(", first, "AS", _1.CDSType, (0, combi_1.optPrio)((0, combi_1.seq)("PRESERVING", "TYPE")), ")");
41274
41282
  }
41275
41283
  }
41276
41284
  exports.CDSCast = CDSCast;
@@ -41586,7 +41594,7 @@ const combi_1 = __webpack_require__(/*! ../../abap/2_statements/combi */ "./node
41586
41594
  class CDSFunctionInput extends combi_1.Expression {
41587
41595
  getRunnable() {
41588
41596
  const qualified = (0, combi_1.seq)(_1.CDSName, (0, combi_1.opt)(_1.CDSParameters), (0, combi_1.starPrio)((0, combi_1.seq)(".", _1.CDSName, (0, combi_1.opt)(_1.CDSParameters))));
41589
- const input = (0, combi_1.altPrio)(_1.CDSCast, _1.CDSFunction, _1.CDSArithmetics, _1.CDSCase, _1.CDSString, qualified, _1.CDSInteger);
41597
+ const input = (0, combi_1.altPrio)(_1.CDSArithmetics, _1.CDSCast, _1.CDSFunction, _1.CDSCase, _1.CDSString, qualified, _1.CDSInteger);
41590
41598
  return input;
41591
41599
  }
41592
41600
  }
@@ -41678,7 +41686,7 @@ class CDSJoin extends combi_1.Expression {
41678
41686
  getRunnable() {
41679
41687
  const cond = (0, combi_1.seq)(_1.CDSSource, "ON", cds_condition_1.CDSCondition);
41680
41688
  const foo = (0, combi_1.altPrio)((0, combi_1.seq)("(", cond, ")"), cond);
41681
- return (0, combi_1.seq)((0, combi_1.optPrio)((0, combi_1.altPrio)("LEFT OUTER TO ONE", "LEFT OUTER", "INNER", "CROSS")), "JOIN", foo);
41689
+ return (0, combi_1.seq)((0, combi_1.optPrio)((0, combi_1.altPrio)("LEFT OUTER TO ONE", "LEFT OUTER", "INNER", "CROSS", "RIGHT OUTER")), "JOIN", foo);
41682
41690
  }
41683
41691
  }
41684
41692
  exports.CDSJoin = CDSJoin;
@@ -54549,7 +54557,7 @@ class Registry {
54549
54557
  }
54550
54558
  static abaplintVersion() {
54551
54559
  // magic, see build script "version.sh"
54552
- return "2.113.219";
54560
+ return "2.113.221";
54553
54561
  }
54554
54562
  getDDICReferences() {
54555
54563
  return this.ddicReferences;
@@ -55856,6 +55864,7 @@ ENDINTERFACE.`,
55856
55864
  }
55857
55865
  issues.push(...this.checkTypes(stru, file));
55858
55866
  issues.push(...this.checkMethods(stru, file));
55867
+ issues.push(...this.checkEvents(stru, file));
55859
55868
  return issues;
55860
55869
  }
55861
55870
  check(fields, column, file) {
@@ -55915,6 +55924,26 @@ ENDINTERFACE.`,
55915
55924
  }
55916
55925
  return issues;
55917
55926
  }
55927
+ checkEvents(stru, file) {
55928
+ const issues = [];
55929
+ const events = stru.findAllStatements(Statements.Events);
55930
+ for (const e of events) {
55931
+ const fields = [];
55932
+ const params = e.findAllExpressions(Expressions.MethodParam);
55933
+ let column = 0;
55934
+ for (const p of params) {
55935
+ const children = p.getChildren();
55936
+ const name = children[children.length - 2];
55937
+ fields.push({
55938
+ nameEnd: name.getLastToken().getEnd(),
55939
+ after: p.findFirstExpression(Expressions.TypeParam).getFirstToken().getStart()
55940
+ });
55941
+ column = Math.max(column, name.getFirstToken().getEnd().getCol() + 1);
55942
+ }
55943
+ issues.push(...this.check(fields, column, file));
55944
+ }
55945
+ return issues;
55946
+ }
55918
55947
  checkTypes(stru, file) {
55919
55948
  const issues = [];
55920
55949
  const types = stru.findAllStructuresRecursive(Structures.Types);
@@ -58216,6 +58245,7 @@ class CloudTypes {
58216
58245
  || obj instanceof Objects.ApplicationLogObject
58217
58246
  || obj instanceof Objects.CommunicationScenario
58218
58247
  || obj instanceof Objects.DataControl
58248
+ || obj instanceof Objects.Namespace
58219
58249
  || obj instanceof Objects.KnowledgeTransferDocument
58220
58250
  || obj instanceof Objects.DataDefinition
58221
58251
  || obj instanceof Objects.DataElement
@@ -64689,20 +64719,51 @@ WRITE 'world'.`,
64689
64719
  ////////////////
64690
64720
  analyzeIf(file, node) {
64691
64721
  var _a;
64692
- if (node.getChildren().length !== 4) {
64722
+ const ifBody = node.findDirectStructure(Structures.Body);
64723
+ const elseIfBodies = node.findDirectStructures(Structures.ElseIf) || [];
64724
+ const elseBody = (_a = node.findDirectStructure(Structures.Else)) === null || _a === void 0 ? void 0 : _a.findDirectStructure(Structures.Body);
64725
+ if (elseBody === undefined) {
64693
64726
  return [];
64694
64727
  }
64695
- const ifBody = node.findDirectStructure(Structures.Body);
64696
- if (node.findDirectStructure(Structures.ElseIf)) {
64728
+ const ifFirst = ifBody === null || ifBody === void 0 ? void 0 : ifBody.getFirstChild();
64729
+ const elseFirst = elseBody === null || elseBody === void 0 ? void 0 : elseBody.getFirstChild();
64730
+ const ifLast = ifBody === null || ifBody === void 0 ? void 0 : ifBody.getLastChild();
64731
+ const elseLast = elseBody === null || elseBody === void 0 ? void 0 : elseBody.getLastChild();
64732
+ if (elseIfBodies.length > 0) {
64733
+ let firstMatch = true;
64734
+ let lastMatch = true;
64735
+ for (const elseif of elseIfBodies) {
64736
+ const elseifBody = elseif.findDirectStructure(Structures.Body);
64737
+ const elseifFirst = elseifBody === null || elseifBody === void 0 ? void 0 : elseifBody.getFirstChild();
64738
+ const elseifLast = elseifBody === null || elseifBody === void 0 ? void 0 : elseifBody.getLastChild();
64739
+ if (ifFirst === undefined
64740
+ || ifLast === undefined
64741
+ || elseLast === undefined
64742
+ || elseFirst === undefined) {
64743
+ return [];
64744
+ }
64745
+ if (elseifFirst === undefined
64746
+ || ifFirst.concatTokens() !== elseifFirst.concatTokens()
64747
+ || elseFirst.concatTokens() !== elseifFirst.concatTokens()) {
64748
+ firstMatch = false;
64749
+ }
64750
+ if (elseifLast === undefined
64751
+ || ifLast.concatTokens() !== elseifLast.concatTokens()
64752
+ || elseLast.concatTokens() !== elseifLast.concatTokens()) {
64753
+ lastMatch = false;
64754
+ }
64755
+ }
64756
+ if (firstMatch === true || lastMatch === true) {
64757
+ const message = "Identical contents";
64758
+ const issue = issue_1.Issue.atToken(file, node.getFirstToken(), message, this.getMetadata().key, this.conf.severity);
64759
+ return [issue];
64760
+ }
64697
64761
  return [];
64698
64762
  }
64699
- const elseBody = (_a = node.findDirectStructure(Structures.Else)) === null || _a === void 0 ? void 0 : _a.findDirectStructure(Structures.Body);
64700
- if (elseBody === undefined || ifBody === undefined) {
64763
+ else if (elseBody === undefined || ifBody === undefined) {
64701
64764
  return [];
64702
64765
  }
64703
64766
  {
64704
- const ifFirst = ifBody.getFirstChild();
64705
- const elseFirst = elseBody.getFirstChild();
64706
64767
  if (ifFirst === undefined || elseFirst === undefined || this.isChained(ifFirst)) {
64707
64768
  return [];
64708
64769
  }
@@ -64713,8 +64774,6 @@ WRITE 'world'.`,
64713
64774
  }
64714
64775
  }
64715
64776
  {
64716
- const ifLast = ifBody.getLastChild();
64717
- const elseLast = elseBody.getLastChild();
64718
64777
  if (ifLast === undefined || elseLast === undefined || this.isChained(ifLast)) {
64719
64778
  return [];
64720
64779
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abaplint/cli",
3
- "version": "2.113.219",
3
+ "version": "2.113.221",
4
4
  "description": "abaplint - Command Line Interface",
5
5
  "funding": "https://github.com/sponsors/larshp",
6
6
  "bin": {
@@ -38,7 +38,7 @@
38
38
  },
39
39
  "homepage": "https://abaplint.org",
40
40
  "devDependencies": {
41
- "@abaplint/core": "^2.113.219",
41
+ "@abaplint/core": "^2.113.221",
42
42
  "@types/chai": "^4.3.20",
43
43
  "@types/minimist": "^1.2.5",
44
44
  "@types/mocha": "^10.0.10",