@abaplint/cli 2.113.127 → 2.113.129

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 +380 -344
  2. package/package.json +5 -5
package/build/cli.js CHANGED
@@ -4375,7 +4375,7 @@ class Color extends combi_1.Expression {
4375
4375
  const eq = (0, combi_1.seq)("=", source_1.Source);
4376
4376
  const integers = (0, combi_1.altPrio)("1", "2", "3", "4", "5", "6", "7");
4377
4377
  const texts = (0, combi_1.altPrio)("COL_BACKGROUND", "COL_HEADING", "COL_NORMAL", "COL_TOTAL", "COL_KEY", "COL_POSITIVE", "COL_NEGATIVE", "COL_GROUP");
4378
- const value = (0, combi_1.alt)(eq, (0, combi_1.altPrio)("ON", "OFF", (0, combi_1.altPrio)(integers, texts)));
4378
+ const value = (0, combi_1.alt)(eq, (0, combi_1.altPrio)("ON", "OFF", "COLOR OFF", (0, combi_1.altPrio)(integers, texts)));
4379
4379
  const toggle = (0, combi_1.altPrio)("ON", "OFF");
4380
4380
  return (0, combi_1.seq)("COLOR", (0, combi_1.opt)((0, combi_1.seq)(value, (0, combi_1.opt)(toggle))));
4381
4381
  }
@@ -11819,8 +11819,8 @@ const expressions_1 = __webpack_require__(/*! ../expressions */ "./node_modules/
11819
11819
  class DataBegin {
11820
11820
  getMatcher() {
11821
11821
  const occurs = (0, combi_1.seq)("OCCURS", expressions_1.Integer);
11822
- const common = (0, combi_1.altPrio)((0, combi_1.seq)("COMMON PART", expressions_1.DefinitionName), "COMMON PART");
11823
- const structure = (0, combi_1.seq)("BEGIN OF", (0, combi_1.altPrio)(common, (0, combi_1.seq)(expressions_1.DefinitionName, (0, combi_1.opt)("READ-ONLY"), (0, combi_1.opt)(occurs))));
11822
+ const common = (0, combi_1.seq)("COMMON PART", (0, combi_1.optPrio)(expressions_1.DefinitionName));
11823
+ const structure = (0, combi_1.seq)("BEGIN OF", (0, combi_1.altPrio)(common, (0, combi_1.seq)(expressions_1.DefinitionName, (0, combi_1.optPrio)("READ-ONLY"), (0, combi_1.optPrio)(occurs))));
11824
11824
  return (0, combi_1.seq)("DATA", structure);
11825
11825
  }
11826
11826
  }
@@ -19343,7 +19343,7 @@ const Structures = __webpack_require__(/*! ./ */ "./node_modules/@abaplint/core/
19343
19343
  const _combi_1 = __webpack_require__(/*! ./_combi */ "./node_modules/@abaplint/core/build/src/abap/3_structures/structures/_combi.js");
19344
19344
  class DynproLogic {
19345
19345
  getMatcher() {
19346
- return (0, _combi_1.seq)((0, _combi_1.sub)(Structures.ProcessBeforeOutput), (0, _combi_1.sub)(Structures.ProcessAfterInput), (0, _combi_1.opt)((0, _combi_1.sub)(Structures.ProcessOnValueRequest)), (0, _combi_1.opt)((0, _combi_1.sub)(Structures.ProcessOnHelpRequest)));
19346
+ return (0, _combi_1.seq)((0, _combi_1.sub)(Structures.ProcessBeforeOutput), (0, _combi_1.sub)(Structures.ProcessAfterInput), (0, _combi_1.opt)((0, _combi_1.sub)(Structures.ProcessOnHelpRequest)), (0, _combi_1.opt)((0, _combi_1.sub)(Structures.ProcessOnValueRequest)), (0, _combi_1.opt)((0, _combi_1.sub)(Structures.ProcessOnHelpRequest)));
19347
19347
  }
19348
19348
  }
19349
19349
  exports.DynproLogic = DynproLogic;
@@ -19366,7 +19366,7 @@ const _combi_1 = __webpack_require__(/*! ./_combi */ "./node_modules/@abaplint/c
19366
19366
  const chain_1 = __webpack_require__(/*! ./chain */ "./node_modules/@abaplint/core/build/src/abap/3_structures/structures/chain.js");
19367
19367
  class DynproLoop {
19368
19368
  getMatcher() {
19369
- return (0, _combi_1.beginEnd)((0, _combi_1.sta)(Statements.DynproLoop), (0, _combi_1.star)((0, _combi_1.alt)((0, _combi_1.sta)(Statements.Module), (0, _combi_1.sub)(chain_1.Chain))), (0, _combi_1.sta)(Statements.EndLoop));
19369
+ return (0, _combi_1.beginEnd)((0, _combi_1.sta)(Statements.DynproLoop), (0, _combi_1.star)((0, _combi_1.alt)((0, _combi_1.sta)(Statements.Module), (0, _combi_1.sta)(Statements.Field), (0, _combi_1.sub)(chain_1.Chain))), (0, _combi_1.sta)(Statements.EndLoop));
19370
19370
  }
19371
19371
  }
19372
19372
  exports.DynproLoop = DynproLoop;
@@ -23722,6 +23722,9 @@ class TypeUtils {
23722
23722
  else if ((target instanceof basic_1.StringType || target instanceof basic_1.CharacterType)
23723
23723
  && source instanceof basic_1.StructureType
23724
23724
  && this.isCharLike(source)) {
23725
+ if (this.structureContainsString(source) === true) {
23726
+ return false;
23727
+ }
23725
23728
  return true;
23726
23729
  }
23727
23730
  else if (source instanceof basic_1.StructureType) {
@@ -24740,8 +24743,7 @@ class AttributeChain {
24740
24743
  input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), "Not an object reference(AttributeChain)"));
24741
24744
  return void_type_1.VoidType.get(_syntax_input_1.CheckSyntaxKey);
24742
24745
  }
24743
- const children = node.getChildren().slice();
24744
- const first = children[0];
24746
+ const first = node.getChildren()[0];
24745
24747
  if (!(first.get() instanceof expressions_1.AttributeName)) {
24746
24748
  input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), "AttributeChain, unexpected first child"));
24747
24749
  return void_type_1.VoidType.get(_syntax_input_1.CheckSyntaxKey);
@@ -26528,23 +26530,25 @@ class MethodCallChain {
26528
26530
  static runSyntax(node, input, targetType) {
26529
26531
  var _a, _b;
26530
26532
  const helper = new _object_oriented_1.ObjectOriented(input.scope);
26531
- const children = node.getChildren().slice();
26532
- const first = children.shift();
26533
+ const children = node.getChildren();
26534
+ const first = children[0];
26533
26535
  if (first === undefined) {
26534
26536
  const message = "MethodCallChain, first child expected";
26535
26537
  input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
26536
26538
  return basic_1.VoidType.get(_syntax_input_1.CheckSyntaxKey);
26537
26539
  }
26540
+ let currentIndex = 1;
26538
26541
  let context = this.findTop(first, input, targetType);
26539
26542
  if (first.get() instanceof Expressions.MethodCall) {
26540
- children.unshift(first);
26543
+ currentIndex--;
26541
26544
  }
26542
26545
  let previous = undefined;
26543
- while (children.length > 0) {
26544
- const current = children.shift();
26546
+ while (currentIndex <= children.length) {
26547
+ const current = children[currentIndex];
26545
26548
  if (current === undefined) {
26546
26549
  break;
26547
26550
  }
26551
+ currentIndex++;
26548
26552
  if (current instanceof nodes_1.ExpressionNode && current.get() instanceof Expressions.MethodCall) {
26549
26553
  // for built-in methods set className to undefined
26550
26554
  const className = context instanceof basic_1.ObjectReferenceType ? context.getIdentifierName() : undefined;
@@ -28095,46 +28099,49 @@ class Source {
28095
28099
  let hexExpected = false;
28096
28100
  let hexNext = false;
28097
28101
  while (children.length >= 0) {
28098
- if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.MethodCallChain) {
28099
- context = method_call_chain_1.MethodCallChain.runSyntax(first, input, targetType);
28100
- if (context === undefined) {
28101
- const message = "Method has no RETURNING value";
28102
- input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
28103
- return basic_1.VoidType.get(_syntax_input_1.CheckSyntaxKey);
28102
+ if (first instanceof nodes_1.ExpressionNode) {
28103
+ const get = first.get();
28104
+ if (get instanceof Expressions.MethodCallChain) {
28105
+ context = method_call_chain_1.MethodCallChain.runSyntax(first, input, targetType);
28106
+ if (context === undefined) {
28107
+ const message = "Method has no RETURNING value";
28108
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
28109
+ return basic_1.VoidType.get(_syntax_input_1.CheckSyntaxKey);
28110
+ }
28104
28111
  }
28105
- }
28106
- else if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.FieldChain) {
28107
- context = field_chain_1.FieldChain.runSyntax(first, input, type);
28108
- }
28109
- else if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.StringTemplate) {
28110
- context = string_template_1.StringTemplate.runSyntax(first, input);
28111
- }
28112
- else if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.Source) {
28113
- const found = Source.runSyntax(first, input);
28114
- context = this.infer(context, found);
28115
- }
28116
- else if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.Constant) {
28117
- const found = constant_1.Constant.runSyntax(first);
28118
- context = this.infer(context, found);
28119
- }
28120
- else if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.Dereference) {
28121
- context = dereference_1.Dereference.runSyntax(first, context, input);
28122
- }
28123
- else if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.ComponentChain) {
28124
- context = component_chain_1.ComponentChain.runSyntax(context, first, input);
28125
- }
28126
- else if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.ArithOperator) {
28127
- if (first.concatTokens() === "**") {
28128
- context = new basic_1.FloatType();
28112
+ else if (get instanceof Expressions.FieldChain) {
28113
+ context = field_chain_1.FieldChain.runSyntax(first, input, type);
28129
28114
  }
28130
- const operator = first.concatTokens().toUpperCase();
28131
- if (operator === "BIT-OR" || operator === "BIT-AND" || operator === "BIT-XOR") {
28132
- hexExpected = true;
28133
- hexNext = true;
28115
+ else if (get instanceof Expressions.StringTemplate) {
28116
+ context = string_template_1.StringTemplate.runSyntax(first, input);
28117
+ }
28118
+ else if (get instanceof Expressions.Source) {
28119
+ const found = Source.runSyntax(first, input);
28120
+ context = this.infer(context, found);
28121
+ }
28122
+ else if (get instanceof Expressions.Constant) {
28123
+ const found = constant_1.Constant.runSyntax(first);
28124
+ context = this.infer(context, found);
28125
+ }
28126
+ else if (get instanceof Expressions.Dereference) {
28127
+ context = dereference_1.Dereference.runSyntax(first, context, input);
28128
+ }
28129
+ else if (get instanceof Expressions.ComponentChain) {
28130
+ context = component_chain_1.ComponentChain.runSyntax(context, first, input);
28131
+ }
28132
+ else if (get instanceof Expressions.ArithOperator) {
28133
+ if (first.concatTokens() === "**") {
28134
+ context = new basic_1.FloatType();
28135
+ }
28136
+ const operator = first.concatTokens().toUpperCase();
28137
+ if (operator === "BIT-OR" || operator === "BIT-AND" || operator === "BIT-XOR") {
28138
+ hexExpected = true;
28139
+ hexNext = true;
28140
+ }
28141
+ }
28142
+ else if (get instanceof Expressions.AttributeChain) {
28143
+ context = attribute_chain_1.AttributeChain.runSyntax(context, first, input, type);
28134
28144
  }
28135
- }
28136
- else if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.AttributeChain) {
28137
- context = attribute_chain_1.AttributeChain.runSyntax(context, first, input, type);
28138
28145
  }
28139
28146
  if (hexExpected === true) {
28140
28147
  if (!(context instanceof basic_1.VoidType)
@@ -28179,7 +28186,7 @@ class Source {
28179
28186
  }
28180
28187
  static addIfInferred(node, input, inferredType) {
28181
28188
  const basic = new basic_types_1.BasicTypes(input);
28182
- const typeExpression = node.findFirstExpression(Expressions.TypeNameOrInfer);
28189
+ const typeExpression = node.findDirectExpression(Expressions.TypeNameOrInfer);
28183
28190
  const typeToken = typeExpression === null || typeExpression === void 0 ? void 0 : typeExpression.getFirstToken();
28184
28191
  const typeName = typeToken === null || typeToken === void 0 ? void 0 : typeToken.getStr();
28185
28192
  if (typeName === "#" && inferredType && typeToken) {
@@ -28203,7 +28210,7 @@ class Source {
28203
28210
  }
28204
28211
  static determineType(node, input, targetType) {
28205
28212
  const basic = new basic_types_1.BasicTypes(input);
28206
- const typeExpression = node.findFirstExpression(Expressions.TypeNameOrInfer);
28213
+ const typeExpression = node.findDirectExpression(Expressions.TypeNameOrInfer);
28207
28214
  const typeToken = typeExpression === null || typeExpression === void 0 ? void 0 : typeExpression.getFirstToken();
28208
28215
  const typeName = typeToken === null || typeToken === void 0 ? void 0 : typeToken.getStr();
28209
28216
  if (typeExpression === undefined) {
@@ -28740,8 +28747,8 @@ class Target {
28740
28747
  return found.getType();
28741
28748
  }
28742
28749
  }
28743
- const children = node.getChildren().slice();
28744
- const first = children.shift();
28750
+ const children = node.getChildren();
28751
+ const first = children[0];
28745
28752
  if (first === undefined || !(first instanceof nodes_1.ExpressionNode)) {
28746
28753
  return undefined;
28747
28754
  }
@@ -28751,11 +28758,13 @@ class Target {
28751
28758
  input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
28752
28759
  return basic_1.VoidType.get(_syntax_input_1.CheckSyntaxKey);
28753
28760
  }
28754
- while (children.length > 0) {
28755
- const current = children.shift();
28761
+ let currentIndex = 1;
28762
+ while (currentIndex <= children.length) {
28763
+ const current = children[currentIndex];
28756
28764
  if (current === undefined) {
28757
28765
  break;
28758
28766
  }
28767
+ currentIndex++;
28759
28768
  if (current.get() instanceof tokens_1.Dash) {
28760
28769
  if (context instanceof unknown_type_1.UnknownType) {
28761
28770
  const message = "Not a structure, type unknown, target";
@@ -34893,18 +34902,26 @@ exports.Constants = Constants;
34893
34902
 
34894
34903
  Object.defineProperty(exports, "__esModule", ({ value: true }));
34895
34904
  exports.Data = void 0;
34896
- const Expressions = __webpack_require__(/*! ../../2_statements/expressions */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js");
34897
- const Statements = __webpack_require__(/*! ../../2_statements/statements */ "./node_modules/@abaplint/core/build/src/abap/2_statements/statements/index.js");
34898
- const Structures = __webpack_require__(/*! ../../3_structures/structures */ "./node_modules/@abaplint/core/build/src/abap/3_structures/structures/index.js");
34905
+ const _syntax_input_1 = __webpack_require__(/*! ../_syntax_input */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/_syntax_input.js");
34906
+ const data_1 = __webpack_require__(/*! ../statements/data */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/statements/data.js");
34907
+ const _reference_1 = __webpack_require__(/*! ../_reference */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/_reference.js");
34899
34908
  const nodes_1 = __webpack_require__(/*! ../../nodes */ "./node_modules/@abaplint/core/build/src/abap/nodes/index.js");
34909
+ const type_1 = __webpack_require__(/*! ../statements/type */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/statements/type.js");
34900
34910
  const _typed_identifier_1 = __webpack_require__(/*! ../../types/_typed_identifier */ "./node_modules/@abaplint/core/build/src/abap/types/_typed_identifier.js");
34911
+ const types_1 = __webpack_require__(/*! ./types */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/structures/types.js");
34901
34912
  const Basic = __webpack_require__(/*! ../../types/basic */ "./node_modules/@abaplint/core/build/src/abap/types/basic/index.js");
34902
- const data_1 = __webpack_require__(/*! ../statements/data */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/statements/data.js");
34903
- const _reference_1 = __webpack_require__(/*! ../_reference */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/_reference.js");
34904
- const _syntax_input_1 = __webpack_require__(/*! ../_syntax_input */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/_syntax_input.js");
34913
+ const Expressions = __webpack_require__(/*! ../../2_statements/expressions */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js");
34914
+ const Statements = __webpack_require__(/*! ../../2_statements/statements */ "./node_modules/@abaplint/core/build/src/abap/2_statements/statements/index.js");
34915
+ const Structures = __webpack_require__(/*! ../../3_structures/structures */ "./node_modules/@abaplint/core/build/src/abap/3_structures/structures/index.js");
34905
34916
  class Data {
34906
- runSyntax(node, input) {
34907
- var _a;
34917
+ static runSyntax(node, input) {
34918
+ var _a, _b;
34919
+ const fouth = (_a = node.getFirstChild()) === null || _a === void 0 ? void 0 : _a.getChildren()[3];
34920
+ const isCommonPart = fouth instanceof nodes_1.TokenNode && fouth.concatTokens() === "COMMON";
34921
+ if (isCommonPart) {
34922
+ this.runCommonPartSyntax(node, input);
34923
+ return undefined;
34924
+ }
34908
34925
  const name = node.findFirstExpression(Expressions.DefinitionName).getFirstToken();
34909
34926
  let table = false;
34910
34927
  const values = {};
@@ -34921,7 +34938,7 @@ class Data {
34921
34938
  }
34922
34939
  }
34923
34940
  else if (c instanceof nodes_1.StructureNode && ctyp instanceof Structures.Data) {
34924
- const found = new Data().runSyntax(c, input);
34941
+ const found = Data.runSyntax(c, input);
34925
34942
  if (found) {
34926
34943
  components.push({ name: found.getName(), type: found.getType() });
34927
34944
  }
@@ -34933,7 +34950,7 @@ class Data {
34933
34950
  }
34934
34951
  else if (c instanceof nodes_1.StatementNode && ctyp instanceof Statements.IncludeType) {
34935
34952
  // INCLUDES
34936
- const typeToken = (_a = c.findFirstExpression(Expressions.TypeName)) === null || _a === void 0 ? void 0 : _a.getFirstToken();
34953
+ const typeToken = (_b = c.findFirstExpression(Expressions.TypeName)) === null || _b === void 0 ? void 0 : _b.getFirstToken();
34937
34954
  const typeName = typeToken === null || typeToken === void 0 ? void 0 : typeToken.getStr();
34938
34955
  let foundId = input.scope.findType(typeName);
34939
34956
  if (foundId === undefined) {
@@ -34985,6 +35002,35 @@ class Data {
34985
35002
  return new _typed_identifier_1.TypedIdentifier(name, input.filename, new Basic.StructureType(components), undefined, val);
34986
35003
  }
34987
35004
  }
35005
+ static runCommonPartSyntax(node, input) {
35006
+ for (const c of node.getChildren()) {
35007
+ const ctyp = c.get();
35008
+ if (c instanceof nodes_1.StatementNode && ctyp instanceof Statements.Data) {
35009
+ const found = new data_1.Data().runSyntax(c, input);
35010
+ if (found) {
35011
+ input.scope.addIdentifier(found);
35012
+ }
35013
+ }
35014
+ else if (c instanceof nodes_1.StructureNode && ctyp instanceof Structures.Data) {
35015
+ const found = Data.runSyntax(c, input);
35016
+ if (found) {
35017
+ input.scope.addIdentifier(found);
35018
+ }
35019
+ }
35020
+ else if (c instanceof nodes_1.StatementNode && ctyp instanceof Statements.Type) {
35021
+ const found = new type_1.Type().runSyntax(c, input);
35022
+ if (found) {
35023
+ input.scope.addIdentifier(found);
35024
+ }
35025
+ }
35026
+ else if (c instanceof nodes_1.StructureNode && ctyp instanceof Structures.Types) {
35027
+ const found = new types_1.Types().runSyntax(c, input);
35028
+ if (found) {
35029
+ input.scope.addIdentifier(found);
35030
+ }
35031
+ }
35032
+ }
35033
+ }
34988
35034
  }
34989
35035
  exports.Data = Data;
34990
35036
  //# sourceMappingURL=data.js.map
@@ -35666,7 +35712,7 @@ class SyntaxLogic {
35666
35712
  return true;
35667
35713
  }
35668
35714
  else if (stru instanceof Structures.Data) {
35669
- this.scope.addIdentifier(new data_1.Data().runSyntax(node, input));
35715
+ this.scope.addIdentifier(data_1.Data.runSyntax(node, input));
35670
35716
  return true;
35671
35717
  }
35672
35718
  else if (stru instanceof Structures.Statics) {
@@ -39245,7 +39291,7 @@ class Attributes {
39245
39291
  const ctyp = c.get();
39246
39292
  if (c instanceof nodes_1.StructureNode) {
39247
39293
  if (ctyp instanceof Structures.Data) {
39248
- const found = new data_2.Data().runSyntax(c, input);
39294
+ const found = data_2.Data.runSyntax(c, input);
39249
39295
  if (found !== undefined) {
39250
39296
  const attr = new class_attribute_1.ClassAttribute(found, visibility, found.getMeta(), found.getValue());
39251
39297
  this.instance.push(attr);
@@ -54308,7 +54354,7 @@ class Registry {
54308
54354
  }
54309
54355
  static abaplintVersion() {
54310
54356
  // magic, see build script "version.sh"
54311
- return "2.113.127";
54357
+ return "2.113.129";
54312
54358
  }
54313
54359
  getDDICReferences() {
54314
54360
  return this.ddicReferences;
@@ -60635,7 +60681,8 @@ ${indentation}${uniqueName1}-attr3 = 'IF_T100_DYN_MSG~MSGV3'.
60635
60681
  ${indentation}${uniqueName1}-attr4 = 'IF_T100_DYN_MSG~MSGV4'.\n`;
60636
60682
  }
60637
60683
  abap += `${indentation}DATA ${uniqueName2} TYPE REF TO ${className}.
60638
- ${indentation}CREATE OBJECT ${uniqueName2} EXPORTING textid = ${uniqueName1}.\n`;
60684
+ ${indentation}CREATE OBJECT ${uniqueName2}.
60685
+ ${indentation}${uniqueName2}->if_t100_message~t100key = ${uniqueName1}.\n`;
60639
60686
  if (withs.length > 0) {
60640
60687
  abap += `${indentation}${uniqueName2}->if_t100_dyn_msg~msgty = 'E'.\n`;
60641
60688
  }
@@ -77950,73 +77997,278 @@ function unescape(str) {
77950
77997
 
77951
77998
  /***/ }),
77952
77999
 
77953
- /***/ "./node_modules/balanced-match/index.js":
77954
- /*!**********************************************!*\
77955
- !*** ./node_modules/balanced-match/index.js ***!
77956
- \**********************************************/
77957
- /***/ ((module) => {
78000
+ /***/ "./node_modules/@isaacs/balanced-match/dist/commonjs/index.js":
78001
+ /*!********************************************************************!*\
78002
+ !*** ./node_modules/@isaacs/balanced-match/dist/commonjs/index.js ***!
78003
+ \********************************************************************/
78004
+ /***/ ((__unused_webpack_module, exports) => {
77958
78005
 
77959
78006
  "use strict";
77960
78007
 
77961
- module.exports = balanced;
77962
- function balanced(a, b, str) {
77963
- if (a instanceof RegExp) a = maybeMatch(a, str);
77964
- if (b instanceof RegExp) b = maybeMatch(b, str);
77965
-
77966
- var r = range(a, b, str);
77967
-
77968
- return r && {
77969
- start: r[0],
77970
- end: r[1],
77971
- pre: str.slice(0, r[0]),
77972
- body: str.slice(r[0] + a.length, r[1]),
77973
- post: str.slice(r[1] + b.length)
77974
- };
77975
- }
78008
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
78009
+ exports.range = exports.balanced = void 0;
78010
+ const balanced = (a, b, str) => {
78011
+ const ma = a instanceof RegExp ? maybeMatch(a, str) : a;
78012
+ const mb = b instanceof RegExp ? maybeMatch(b, str) : b;
78013
+ const r = ma !== null && mb != null && (0, exports.range)(ma, mb, str);
78014
+ return (r && {
78015
+ start: r[0],
78016
+ end: r[1],
78017
+ pre: str.slice(0, r[0]),
78018
+ body: str.slice(r[0] + ma.length, r[1]),
78019
+ post: str.slice(r[1] + mb.length),
78020
+ });
78021
+ };
78022
+ exports.balanced = balanced;
78023
+ const maybeMatch = (reg, str) => {
78024
+ const m = str.match(reg);
78025
+ return m ? m[0] : null;
78026
+ };
78027
+ const range = (a, b, str) => {
78028
+ let begs, beg, left, right = undefined, result;
78029
+ let ai = str.indexOf(a);
78030
+ let bi = str.indexOf(b, ai + 1);
78031
+ let i = ai;
78032
+ if (ai >= 0 && bi > 0) {
78033
+ if (a === b) {
78034
+ return [ai, bi];
78035
+ }
78036
+ begs = [];
78037
+ left = str.length;
78038
+ while (i >= 0 && !result) {
78039
+ if (i === ai) {
78040
+ begs.push(i);
78041
+ ai = str.indexOf(a, i + 1);
78042
+ }
78043
+ else if (begs.length === 1) {
78044
+ const r = begs.pop();
78045
+ if (r !== undefined)
78046
+ result = [r, bi];
78047
+ }
78048
+ else {
78049
+ beg = begs.pop();
78050
+ if (beg !== undefined && beg < left) {
78051
+ left = beg;
78052
+ right = bi;
78053
+ }
78054
+ bi = str.indexOf(b, i + 1);
78055
+ }
78056
+ i = ai < bi && ai >= 0 ? ai : bi;
78057
+ }
78058
+ if (begs.length && right !== undefined) {
78059
+ result = [left, right];
78060
+ }
78061
+ }
78062
+ return result;
78063
+ };
78064
+ exports.range = range;
78065
+ //# sourceMappingURL=index.js.map
77976
78066
 
77977
- function maybeMatch(reg, str) {
77978
- var m = str.match(reg);
77979
- return m ? m[0] : null;
77980
- }
78067
+ /***/ }),
77981
78068
 
77982
- balanced.range = range;
77983
- function range(a, b, str) {
77984
- var begs, beg, left, right, result;
77985
- var ai = str.indexOf(a);
77986
- var bi = str.indexOf(b, ai + 1);
77987
- var i = ai;
78069
+ /***/ "./node_modules/@isaacs/brace-expansion/dist/commonjs/index.js":
78070
+ /*!*********************************************************************!*\
78071
+ !*** ./node_modules/@isaacs/brace-expansion/dist/commonjs/index.js ***!
78072
+ \*********************************************************************/
78073
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
77988
78074
 
77989
- if (ai >= 0 && bi > 0) {
77990
- begs = [];
77991
- left = str.length;
78075
+ "use strict";
77992
78076
 
77993
- while (i >= 0 && !result) {
77994
- if (i == ai) {
77995
- begs.push(i);
77996
- ai = str.indexOf(a, i + 1);
77997
- } else if (begs.length == 1) {
77998
- result = [ begs.pop(), bi ];
77999
- } else {
78000
- beg = begs.pop();
78001
- if (beg < left) {
78002
- left = beg;
78003
- right = bi;
78077
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
78078
+ exports.expand = expand;
78079
+ const balanced_match_1 = __webpack_require__(/*! @isaacs/balanced-match */ "./node_modules/@isaacs/balanced-match/dist/commonjs/index.js");
78080
+ const escSlash = '\0SLASH' + Math.random() + '\0';
78081
+ const escOpen = '\0OPEN' + Math.random() + '\0';
78082
+ const escClose = '\0CLOSE' + Math.random() + '\0';
78083
+ const escComma = '\0COMMA' + Math.random() + '\0';
78084
+ const escPeriod = '\0PERIOD' + Math.random() + '\0';
78085
+ const escSlashPattern = new RegExp(escSlash, 'g');
78086
+ const escOpenPattern = new RegExp(escOpen, 'g');
78087
+ const escClosePattern = new RegExp(escClose, 'g');
78088
+ const escCommaPattern = new RegExp(escComma, 'g');
78089
+ const escPeriodPattern = new RegExp(escPeriod, 'g');
78090
+ const slashPattern = /\\\\/g;
78091
+ const openPattern = /\\{/g;
78092
+ const closePattern = /\\}/g;
78093
+ const commaPattern = /\\,/g;
78094
+ const periodPattern = /\\./g;
78095
+ function numeric(str) {
78096
+ return !isNaN(str) ? parseInt(str, 10) : str.charCodeAt(0);
78097
+ }
78098
+ function escapeBraces(str) {
78099
+ return str
78100
+ .replace(slashPattern, escSlash)
78101
+ .replace(openPattern, escOpen)
78102
+ .replace(closePattern, escClose)
78103
+ .replace(commaPattern, escComma)
78104
+ .replace(periodPattern, escPeriod);
78105
+ }
78106
+ function unescapeBraces(str) {
78107
+ return str
78108
+ .replace(escSlashPattern, '\\')
78109
+ .replace(escOpenPattern, '{')
78110
+ .replace(escClosePattern, '}')
78111
+ .replace(escCommaPattern, ',')
78112
+ .replace(escPeriodPattern, '.');
78113
+ }
78114
+ /**
78115
+ * Basically just str.split(","), but handling cases
78116
+ * where we have nested braced sections, which should be
78117
+ * treated as individual members, like {a,{b,c},d}
78118
+ */
78119
+ function parseCommaParts(str) {
78120
+ if (!str) {
78121
+ return [''];
78122
+ }
78123
+ const parts = [];
78124
+ const m = (0, balanced_match_1.balanced)('{', '}', str);
78125
+ if (!m) {
78126
+ return str.split(',');
78127
+ }
78128
+ const { pre, body, post } = m;
78129
+ const p = pre.split(',');
78130
+ p[p.length - 1] += '{' + body + '}';
78131
+ const postParts = parseCommaParts(post);
78132
+ if (post.length) {
78133
+ ;
78134
+ p[p.length - 1] += postParts.shift();
78135
+ p.push.apply(p, postParts);
78136
+ }
78137
+ parts.push.apply(parts, p);
78138
+ return parts;
78139
+ }
78140
+ function expand(str) {
78141
+ if (!str) {
78142
+ return [];
78143
+ }
78144
+ // I don't know why Bash 4.3 does this, but it does.
78145
+ // Anything starting with {} will have the first two bytes preserved
78146
+ // but *only* at the top level, so {},a}b will not expand to anything,
78147
+ // but a{},b}c will be expanded to [a}c,abc].
78148
+ // One could argue that this is a bug in Bash, but since the goal of
78149
+ // this module is to match Bash's rules, we escape a leading {}
78150
+ if (str.slice(0, 2) === '{}') {
78151
+ str = '\\{\\}' + str.slice(2);
78152
+ }
78153
+ return expand_(escapeBraces(str), true).map(unescapeBraces);
78154
+ }
78155
+ function embrace(str) {
78156
+ return '{' + str + '}';
78157
+ }
78158
+ function isPadded(el) {
78159
+ return /^-?0\d/.test(el);
78160
+ }
78161
+ function lte(i, y) {
78162
+ return i <= y;
78163
+ }
78164
+ function gte(i, y) {
78165
+ return i >= y;
78166
+ }
78167
+ function expand_(str, isTop) {
78168
+ /** @type {string[]} */
78169
+ const expansions = [];
78170
+ const m = (0, balanced_match_1.balanced)('{', '}', str);
78171
+ if (!m)
78172
+ return [str];
78173
+ // no need to expand pre, since it is guaranteed to be free of brace-sets
78174
+ const pre = m.pre;
78175
+ const post = m.post.length ? expand_(m.post, false) : [''];
78176
+ if (/\$$/.test(m.pre)) {
78177
+ for (let k = 0; k < post.length; k++) {
78178
+ const expansion = pre + '{' + m.body + '}' + post[k];
78179
+ expansions.push(expansion);
78004
78180
  }
78005
-
78006
- bi = str.indexOf(b, i + 1);
78007
- }
78008
-
78009
- i = ai < bi && ai >= 0 ? ai : bi;
78010
78181
  }
78011
-
78012
- if (begs.length) {
78013
- result = [ left, right ];
78182
+ else {
78183
+ const isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body);
78184
+ const isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body);
78185
+ const isSequence = isNumericSequence || isAlphaSequence;
78186
+ const isOptions = m.body.indexOf(',') >= 0;
78187
+ if (!isSequence && !isOptions) {
78188
+ // {a},b}
78189
+ if (m.post.match(/,(?!,).*\}/)) {
78190
+ str = m.pre + '{' + m.body + escClose + m.post;
78191
+ return expand_(str);
78192
+ }
78193
+ return [str];
78194
+ }
78195
+ let n;
78196
+ if (isSequence) {
78197
+ n = m.body.split(/\.\./);
78198
+ }
78199
+ else {
78200
+ n = parseCommaParts(m.body);
78201
+ if (n.length === 1 && n[0] !== undefined) {
78202
+ // x{{a,b}}y ==> x{a}y x{b}y
78203
+ n = expand_(n[0], false).map(embrace);
78204
+ //XXX is this necessary? Can't seem to hit it in tests.
78205
+ /* c8 ignore start */
78206
+ if (n.length === 1) {
78207
+ return post.map(p => m.pre + n[0] + p);
78208
+ }
78209
+ /* c8 ignore stop */
78210
+ }
78211
+ }
78212
+ // at this point, n is the parts, and we know it's not a comma set
78213
+ // with a single entry.
78214
+ let N;
78215
+ if (isSequence && n[0] !== undefined && n[1] !== undefined) {
78216
+ const x = numeric(n[0]);
78217
+ const y = numeric(n[1]);
78218
+ const width = Math.max(n[0].length, n[1].length);
78219
+ let incr = n.length === 3 && n[2] !== undefined ? Math.abs(numeric(n[2])) : 1;
78220
+ let test = lte;
78221
+ const reverse = y < x;
78222
+ if (reverse) {
78223
+ incr *= -1;
78224
+ test = gte;
78225
+ }
78226
+ const pad = n.some(isPadded);
78227
+ N = [];
78228
+ for (let i = x; test(i, y); i += incr) {
78229
+ let c;
78230
+ if (isAlphaSequence) {
78231
+ c = String.fromCharCode(i);
78232
+ if (c === '\\') {
78233
+ c = '';
78234
+ }
78235
+ }
78236
+ else {
78237
+ c = String(i);
78238
+ if (pad) {
78239
+ const need = width - c.length;
78240
+ if (need > 0) {
78241
+ const z = new Array(need + 1).join('0');
78242
+ if (i < 0) {
78243
+ c = '-' + z + c.slice(1);
78244
+ }
78245
+ else {
78246
+ c = z + c;
78247
+ }
78248
+ }
78249
+ }
78250
+ }
78251
+ N.push(c);
78252
+ }
78253
+ }
78254
+ else {
78255
+ N = [];
78256
+ for (let j = 0; j < n.length; j++) {
78257
+ N.push.apply(N, expand_(n[j], false));
78258
+ }
78259
+ }
78260
+ for (let j = 0; j < N.length; j++) {
78261
+ for (let k = 0; k < post.length; k++) {
78262
+ const expansion = pre + N[j] + post[k];
78263
+ if (!isTop || isSequence || expansion) {
78264
+ expansions.push(expansion);
78265
+ }
78266
+ }
78267
+ }
78014
78268
  }
78015
- }
78016
-
78017
- return result;
78269
+ return expansions;
78018
78270
  }
78019
-
78271
+ //# sourceMappingURL=index.js.map
78020
78272
 
78021
78273
  /***/ }),
78022
78274
 
@@ -80197,219 +80449,6 @@ class GlobStream extends GlobUtil {
80197
80449
  exports.GlobStream = GlobStream;
80198
80450
  //# sourceMappingURL=walker.js.map
80199
80451
 
80200
- /***/ }),
80201
-
80202
- /***/ "./node_modules/glob/node_modules/brace-expansion/index.js":
80203
- /*!*****************************************************************!*\
80204
- !*** ./node_modules/glob/node_modules/brace-expansion/index.js ***!
80205
- \*****************************************************************/
80206
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
80207
-
80208
- var balanced = __webpack_require__(/*! balanced-match */ "./node_modules/balanced-match/index.js");
80209
-
80210
- module.exports = expandTop;
80211
-
80212
- var escSlash = '\0SLASH'+Math.random()+'\0';
80213
- var escOpen = '\0OPEN'+Math.random()+'\0';
80214
- var escClose = '\0CLOSE'+Math.random()+'\0';
80215
- var escComma = '\0COMMA'+Math.random()+'\0';
80216
- var escPeriod = '\0PERIOD'+Math.random()+'\0';
80217
-
80218
- function numeric(str) {
80219
- return parseInt(str, 10) == str
80220
- ? parseInt(str, 10)
80221
- : str.charCodeAt(0);
80222
- }
80223
-
80224
- function escapeBraces(str) {
80225
- return str.split('\\\\').join(escSlash)
80226
- .split('\\{').join(escOpen)
80227
- .split('\\}').join(escClose)
80228
- .split('\\,').join(escComma)
80229
- .split('\\.').join(escPeriod);
80230
- }
80231
-
80232
- function unescapeBraces(str) {
80233
- return str.split(escSlash).join('\\')
80234
- .split(escOpen).join('{')
80235
- .split(escClose).join('}')
80236
- .split(escComma).join(',')
80237
- .split(escPeriod).join('.');
80238
- }
80239
-
80240
-
80241
- // Basically just str.split(","), but handling cases
80242
- // where we have nested braced sections, which should be
80243
- // treated as individual members, like {a,{b,c},d}
80244
- function parseCommaParts(str) {
80245
- if (!str)
80246
- return [''];
80247
-
80248
- var parts = [];
80249
- var m = balanced('{', '}', str);
80250
-
80251
- if (!m)
80252
- return str.split(',');
80253
-
80254
- var pre = m.pre;
80255
- var body = m.body;
80256
- var post = m.post;
80257
- var p = pre.split(',');
80258
-
80259
- p[p.length-1] += '{' + body + '}';
80260
- var postParts = parseCommaParts(post);
80261
- if (post.length) {
80262
- p[p.length-1] += postParts.shift();
80263
- p.push.apply(p, postParts);
80264
- }
80265
-
80266
- parts.push.apply(parts, p);
80267
-
80268
- return parts;
80269
- }
80270
-
80271
- function expandTop(str) {
80272
- if (!str)
80273
- return [];
80274
-
80275
- // I don't know why Bash 4.3 does this, but it does.
80276
- // Anything starting with {} will have the first two bytes preserved
80277
- // but *only* at the top level, so {},a}b will not expand to anything,
80278
- // but a{},b}c will be expanded to [a}c,abc].
80279
- // One could argue that this is a bug in Bash, but since the goal of
80280
- // this module is to match Bash's rules, we escape a leading {}
80281
- if (str.substr(0, 2) === '{}') {
80282
- str = '\\{\\}' + str.substr(2);
80283
- }
80284
-
80285
- return expand(escapeBraces(str), true).map(unescapeBraces);
80286
- }
80287
-
80288
- function embrace(str) {
80289
- return '{' + str + '}';
80290
- }
80291
- function isPadded(el) {
80292
- return /^-?0\d/.test(el);
80293
- }
80294
-
80295
- function lte(i, y) {
80296
- return i <= y;
80297
- }
80298
- function gte(i, y) {
80299
- return i >= y;
80300
- }
80301
-
80302
- function expand(str, isTop) {
80303
- var expansions = [];
80304
-
80305
- var m = balanced('{', '}', str);
80306
- if (!m) return [str];
80307
-
80308
- // no need to expand pre, since it is guaranteed to be free of brace-sets
80309
- var pre = m.pre;
80310
- var post = m.post.length
80311
- ? expand(m.post, false)
80312
- : [''];
80313
-
80314
- if (/\$$/.test(m.pre)) {
80315
- for (var k = 0; k < post.length; k++) {
80316
- var expansion = pre+ '{' + m.body + '}' + post[k];
80317
- expansions.push(expansion);
80318
- }
80319
- } else {
80320
- var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body);
80321
- var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body);
80322
- var isSequence = isNumericSequence || isAlphaSequence;
80323
- var isOptions = m.body.indexOf(',') >= 0;
80324
- if (!isSequence && !isOptions) {
80325
- // {a},b}
80326
- if (m.post.match(/,.*\}/)) {
80327
- str = m.pre + '{' + m.body + escClose + m.post;
80328
- return expand(str);
80329
- }
80330
- return [str];
80331
- }
80332
-
80333
- var n;
80334
- if (isSequence) {
80335
- n = m.body.split(/\.\./);
80336
- } else {
80337
- n = parseCommaParts(m.body);
80338
- if (n.length === 1) {
80339
- // x{{a,b}}y ==> x{a}y x{b}y
80340
- n = expand(n[0], false).map(embrace);
80341
- if (n.length === 1) {
80342
- return post.map(function(p) {
80343
- return m.pre + n[0] + p;
80344
- });
80345
- }
80346
- }
80347
- }
80348
-
80349
- // at this point, n is the parts, and we know it's not a comma set
80350
- // with a single entry.
80351
- var N;
80352
-
80353
- if (isSequence) {
80354
- var x = numeric(n[0]);
80355
- var y = numeric(n[1]);
80356
- var width = Math.max(n[0].length, n[1].length)
80357
- var incr = n.length == 3
80358
- ? Math.abs(numeric(n[2]))
80359
- : 1;
80360
- var test = lte;
80361
- var reverse = y < x;
80362
- if (reverse) {
80363
- incr *= -1;
80364
- test = gte;
80365
- }
80366
- var pad = n.some(isPadded);
80367
-
80368
- N = [];
80369
-
80370
- for (var i = x; test(i, y); i += incr) {
80371
- var c;
80372
- if (isAlphaSequence) {
80373
- c = String.fromCharCode(i);
80374
- if (c === '\\')
80375
- c = '';
80376
- } else {
80377
- c = String(i);
80378
- if (pad) {
80379
- var need = width - c.length;
80380
- if (need > 0) {
80381
- var z = new Array(need + 1).join('0');
80382
- if (i < 0)
80383
- c = '-' + z + c.slice(1);
80384
- else
80385
- c = z + c;
80386
- }
80387
- }
80388
- }
80389
- N.push(c);
80390
- }
80391
- } else {
80392
- N = [];
80393
-
80394
- for (var j = 0; j < n.length; j++) {
80395
- N.push.apply(N, expand(n[j], false));
80396
- }
80397
- }
80398
-
80399
- for (var j = 0; j < N.length; j++) {
80400
- for (var k = 0; k < post.length; k++) {
80401
- var expansion = pre + N[j] + post[k];
80402
- if (!isTop || isSequence || expansion)
80403
- expansions.push(expansion);
80404
- }
80405
- }
80406
- }
80407
-
80408
- return expansions;
80409
- }
80410
-
80411
-
80412
-
80413
80452
  /***/ }),
80414
80453
 
80415
80454
  /***/ "./node_modules/glob/node_modules/lru-cache/dist/commonjs/index.js":
@@ -82810,16 +82849,13 @@ exports.escape = escape;
82810
82849
  /*!*************************************************************************!*\
82811
82850
  !*** ./node_modules/glob/node_modules/minimatch/dist/commonjs/index.js ***!
82812
82851
  \*************************************************************************/
82813
- /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
82852
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
82814
82853
 
82815
82854
  "use strict";
82816
82855
 
82817
- var __importDefault = (this && this.__importDefault) || function (mod) {
82818
- return (mod && mod.__esModule) ? mod : { "default": mod };
82819
- };
82820
82856
  Object.defineProperty(exports, "__esModule", ({ value: true }));
82821
82857
  exports.unescape = exports.escape = exports.AST = exports.Minimatch = exports.match = exports.makeRe = exports.braceExpand = exports.defaults = exports.filter = exports.GLOBSTAR = exports.sep = exports.minimatch = void 0;
82822
- const brace_expansion_1 = __importDefault(__webpack_require__(/*! brace-expansion */ "./node_modules/glob/node_modules/brace-expansion/index.js"));
82858
+ const brace_expansion_1 = __webpack_require__(/*! @isaacs/brace-expansion */ "./node_modules/@isaacs/brace-expansion/dist/commonjs/index.js");
82823
82859
  const assert_valid_pattern_js_1 = __webpack_require__(/*! ./assert-valid-pattern.js */ "./node_modules/glob/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js");
82824
82860
  const ast_js_1 = __webpack_require__(/*! ./ast.js */ "./node_modules/glob/node_modules/minimatch/dist/commonjs/ast.js");
82825
82861
  const escape_js_1 = __webpack_require__(/*! ./escape.js */ "./node_modules/glob/node_modules/minimatch/dist/commonjs/escape.js");
@@ -82972,7 +83008,7 @@ const braceExpand = (pattern, options = {}) => {
82972
83008
  // shortcut. no need to expand.
82973
83009
  return [pattern];
82974
83010
  }
82975
- return (0, brace_expansion_1.default)(pattern);
83011
+ return (0, brace_expansion_1.expand)(pattern);
82976
83012
  };
82977
83013
  exports.braceExpand = braceExpand;
82978
83014
  exports.minimatch.braceExpand = exports.braceExpand;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abaplint/cli",
3
- "version": "2.113.127",
3
+ "version": "2.113.129",
4
4
  "description": "abaplint - Command Line Interface",
5
5
  "funding": "https://github.com/sponsors/larshp",
6
6
  "bin": {
@@ -38,17 +38,17 @@
38
38
  },
39
39
  "homepage": "https://abaplint.org",
40
40
  "devDependencies": {
41
- "@abaplint/core": "^2.113.127",
41
+ "@abaplint/core": "^2.113.129",
42
42
  "@types/chai": "^4.3.20",
43
43
  "@types/minimist": "^1.2.5",
44
44
  "@types/mocha": "^10.0.10",
45
- "@types/node": "^24.0.0",
45
+ "@types/node": "^24.0.3",
46
46
  "@types/progress": "^2.0.7",
47
47
  "chai": "^4.5.0",
48
48
  "p-limit": "^3.1.0",
49
49
  "chalk": "^5.4.1",
50
- "eslint": "^9.28.0",
51
- "glob": "^11.0.2",
50
+ "eslint": "^9.29.0",
51
+ "glob": "^11.0.3",
52
52
  "json5": "^2.2.3",
53
53
  "memfs": "^4.17.2",
54
54
  "minimist": "^1.2.8",