@abaplint/cli 2.119.56 → 2.119.58

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 +171 -59
  2. package/package.json +2 -2
package/build/cli.js CHANGED
@@ -1811,6 +1811,7 @@ exports.verNotLang = verNotLang;
1811
1811
  exports.failCombinator = failCombinator;
1812
1812
  exports.failStar = failStar;
1813
1813
  exports.stopBefore = stopBefore;
1814
+ exports.stopBefore1 = stopBefore1;
1814
1815
  const Tokens = __importStar(__webpack_require__(/*! ../1_lexer/tokens */ "../core/build/src/abap/1_lexer/tokens/index.js"));
1815
1816
  const nodes_1 = __webpack_require__(/*! ../nodes */ "../core/build/src/abap/nodes/index.js");
1816
1817
  const version_1 = __webpack_require__(/*! ../../version */ "../core/build/src/version.js");
@@ -2791,6 +2792,29 @@ class StopBefore2 {
2791
2792
  function stopBefore(t1, t2) {
2792
2793
  return new StopBefore2(t1, t2);
2793
2794
  }
2795
+ class StopBefore1 {
2796
+ constructor(words) { this.words = words.map(w => w.toUpperCase()); }
2797
+ listKeywords() { return []; }
2798
+ getUsing() { return []; }
2799
+ run(r) {
2800
+ var _a;
2801
+ const result = [];
2802
+ for (const input of r) {
2803
+ const next = (_a = input.peek()) === null || _a === void 0 ? void 0 : _a.getUpperStr();
2804
+ if (next !== undefined && this.words.includes(next)) {
2805
+ continue;
2806
+ }
2807
+ result.push(input);
2808
+ }
2809
+ return result;
2810
+ }
2811
+ railroad() { return "Railroad.Terminal('stopBefore(" + this.words.join("|") + ")')"; }
2812
+ toStr() { return "stopBefore(" + this.words.join(",") + ")"; }
2813
+ first() { return [""]; }
2814
+ }
2815
+ function stopBefore1(...words) {
2816
+ return new StopBefore1(words);
2817
+ }
2794
2818
  //# sourceMappingURL=combi.js.map
2795
2819
 
2796
2820
  /***/ },
@@ -3820,8 +3844,8 @@ const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_st
3820
3844
  const _1 = __webpack_require__(/*! . */ "../core/build/src/abap/2_statements/expressions/index.js");
3821
3845
  class ComponentChainSimple extends combi_1.Expression {
3822
3846
  getRunnable() {
3823
- const chain = (0, combi_1.seq)(_1.ComponentName, (0, combi_1.starPrio)((0, combi_1.seq)(_1.ArrowOrDash, _1.ComponentName)));
3824
- const ret = (0, combi_1.seq)(chain, (0, combi_1.optPrio)(_1.FieldOffset), (0, combi_1.optPrio)(_1.FieldLength));
3847
+ const chain = (0, combi_1.starPrio)((0, combi_1.altPrio)(_1.Dereference, (0, combi_1.seq)(_1.ArrowOrDash, _1.ComponentName)));
3848
+ const ret = (0, combi_1.seq)(_1.ComponentName, chain, (0, combi_1.optPrio)(_1.FieldOffset), (0, combi_1.optPrio)(_1.FieldLength));
3825
3849
  return ret;
3826
3850
  }
3827
3851
  }
@@ -6763,7 +6787,7 @@ const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_st
6763
6787
  const _1 = __webpack_require__(/*! . */ "../core/build/src/abap/2_statements/expressions/index.js");
6764
6788
  class ParameterListS extends combi_1.Expression {
6765
6789
  getRunnable() {
6766
- return (0, combi_1.plus)(_1.ParameterS);
6790
+ return (0, combi_1.plusPrio)(_1.ParameterS);
6767
6791
  }
6768
6792
  }
6769
6793
  exports.ParameterListS = ParameterListS;
@@ -10854,10 +10878,10 @@ class TypeTableKey extends combi_1.Expression {
10854
10878
  const uniqueness = (0, combi_1.alt)("NON-UNIQUE", "UNIQUE");
10855
10879
  const defaultKey = "DEFAULT KEY";
10856
10880
  const emptyKey = (0, combi_1.ver)(version_1.Release.v740sp02, "EMPTY KEY", { also: combi_1.AlsoIn.OpenABAP });
10857
- const components = (0, combi_1.plus)((0, combi_1.alt)((0, combi_1.seq)("WITH", (0, combi_1.failStar)()), _1.FieldSub));
10881
+ const components = (0, combi_1.plusPrio)((0, combi_1.seq)((0, combi_1.stopBefore1)("WITH", "INITIAL", "WITHOUT"), (0, combi_1.stopBefore)("READ", "-"), _1.FieldSub));
10858
10882
  const further = (0, combi_1.seq)((0, combi_1.alt)("WITHOUT", "WITH"), "FURTHER SECONDARY KEYS");
10859
10883
  const alias = (0, combi_1.seq)("ALIAS", _1.Field);
10860
- const key = (0, combi_1.seq)("WITH", (0, combi_1.opt)(uniqueness), (0, combi_1.altPrio)(defaultKey, emptyKey, (0, combi_1.seq)((0, combi_1.opt)((0, combi_1.alt)("SORTED", "HASHED")), "KEY", (0, combi_1.alt)((0, combi_1.seq)(_1.Field, (0, combi_1.opt)(alias), "COMPONENTS", components), components))), (0, combi_1.optPrio)(further), (0, combi_1.optPrio)("READ-ONLY"));
10884
+ const key = (0, combi_1.seq)("WITH", (0, combi_1.optPrio)(uniqueness), (0, combi_1.altPrio)(defaultKey, emptyKey, (0, combi_1.seq)((0, combi_1.opt)((0, combi_1.alt)("SORTED", "HASHED")), "KEY", (0, combi_1.altPrio)((0, combi_1.seq)(_1.Field, (0, combi_1.opt)(alias), "COMPONENTS", components), components))), (0, combi_1.optPrio)(further), (0, combi_1.optPrio)("READ-ONLY"));
10861
10885
  return key;
10862
10886
  }
10863
10887
  }
@@ -10926,7 +10950,7 @@ const _1 = __webpack_require__(/*! . */ "../core/build/src/abap/2_statements/exp
10926
10950
  const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
10927
10951
  class ValueBody extends combi_1.Expression {
10928
10952
  getRunnable() {
10929
- const strucOrTab = (0, combi_1.seq)((0, combi_1.optPrio)(_1.Let), (0, combi_1.optPrio)(_1.ValueBase), (0, combi_1.star)(_1.For), (0, combi_1.plusPrio)((0, combi_1.altPrio)(_1.FieldAssignment, _1.ValueBodyLine)));
10953
+ const strucOrTab = (0, combi_1.seq)((0, combi_1.optPrio)(_1.Let), (0, combi_1.optPrio)(_1.ValueBase), (0, combi_1.starPrio)(_1.For), (0, combi_1.plusPrio)((0, combi_1.altPrio)(_1.FieldAssignment, _1.ValueBodyLine)));
10930
10954
  const tabdef = (0, combi_1.ver)(version_1.Release.v740sp08, (0, combi_1.altPrio)("OPTIONAL", (0, combi_1.seq)("DEFAULT", _1.Source)), { also: combi_1.AlsoIn.OpenABAP });
10931
10955
  return (0, combi_1.optPrio)((0, combi_1.altPrio)(strucOrTab, (0, combi_1.seq)(_1.Source, (0, combi_1.optPrio)(tabdef))));
10932
10956
  }
@@ -24724,16 +24748,20 @@ class BuiltIn {
24724
24748
  return def.predicate;
24725
24749
  }
24726
24750
  getTypes() {
24727
- const ret = this.buildSY();
24728
- {
24729
- const id = new tokens_1.Identifier(new position_1.Position(1, 1), "abap_bool");
24730
- ret.push(new _typed_identifier_1.TypedIdentifier(id, BuiltIn.filename, new basic_1.CharacterType(1, { qualifiedName: "ABAP_BOOL", ddicName: "ABAP_BOOL" })));
24731
- }
24732
- {
24733
- const id = new tokens_1.Identifier(new position_1.Position(1, 1), "cursor");
24734
- ret.push(new _typed_identifier_1.TypedIdentifier(id, BuiltIn.filename, basic_1.IntegerType.get({ qualifiedName: "CURSOR", ddicName: "CURSOR" })));
24751
+ // the identifiers are identical for every object, share them to reduce memory usage
24752
+ if (BuiltIn.typesCache === undefined) {
24753
+ const ret = this.buildSY();
24754
+ {
24755
+ const id = new tokens_1.Identifier(new position_1.Position(1, 1), "abap_bool");
24756
+ ret.push(new _typed_identifier_1.TypedIdentifier(id, BuiltIn.filename, new basic_1.CharacterType(1, { qualifiedName: "ABAP_BOOL", ddicName: "ABAP_BOOL" })));
24757
+ }
24758
+ {
24759
+ const id = new tokens_1.Identifier(new position_1.Position(1, 1), "cursor");
24760
+ ret.push(new _typed_identifier_1.TypedIdentifier(id, BuiltIn.filename, basic_1.IntegerType.get({ qualifiedName: "CURSOR", ddicName: "CURSOR" })));
24761
+ }
24762
+ BuiltIn.typesCache = ret;
24735
24763
  }
24736
- return ret;
24764
+ return BuiltIn.typesCache;
24737
24765
  }
24738
24766
  get(extras) {
24739
24767
  const ret = [];
@@ -24766,10 +24794,17 @@ class BuiltIn {
24766
24794
  BuiltIn.getCache.push(this.buildConstant("space", new basic_1.CharacterType(1, { derivedFromConstant: true }), "' '"));
24767
24795
  }
24768
24796
  ret.push(...BuiltIn.getCache);
24769
- for (const e of extras) {
24770
- const id = new tokens_1.Identifier(new position_1.Position(this.row++, 1), e);
24771
- ret.push(new _typed_identifier_1.TypedIdentifier(id, BuiltIn.filename, basic_1.VoidType.get(e), ["read_only" /* IdentifierMeta.ReadOnly */, "built-in" /* IdentifierMeta.BuiltIn */], "'?'"));
24797
+ // the extras are identical for every object, share them to reduce memory usage
24798
+ const key = extras.join("|");
24799
+ if (key !== BuiltIn.extrasCacheKey) {
24800
+ BuiltIn.extrasCacheKey = key;
24801
+ BuiltIn.extrasCache = [];
24802
+ for (const e of extras) {
24803
+ const id = new tokens_1.Identifier(new position_1.Position(this.row++, 1), e);
24804
+ BuiltIn.extrasCache.push(new _typed_identifier_1.TypedIdentifier(id, BuiltIn.filename, basic_1.VoidType.get(e), ["read_only" /* IdentifierMeta.ReadOnly */, "built-in" /* IdentifierMeta.BuiltIn */], "'?'"));
24805
+ }
24772
24806
  }
24807
+ ret.push(...BuiltIn.extrasCache);
24773
24808
  return ret;
24774
24809
  }
24775
24810
  /////////////////////////////
@@ -24978,6 +25013,9 @@ exports.BuiltIn = BuiltIn;
24978
25013
  BuiltIn.filename = "_builtin.prog.abap";
24979
25014
  BuiltIn.counter = 1;
24980
25015
  BuiltIn.getCache = [];
25016
+ BuiltIn.typesCache = undefined;
25017
+ BuiltIn.extrasCacheKey = undefined;
25018
+ BuiltIn.extrasCache = [];
24981
25019
  // todo: "pcre" vs "regex", only one of these parameters are allowed
24982
25020
  // todo: "pcre", only possible from 755
24983
25021
  BuiltIn.methods = {
@@ -29267,6 +29305,15 @@ class ComponentChain {
29267
29305
  if (i === 0 && child.concatTokens().toUpperCase() === "TABLE_LINE") {
29268
29306
  continue;
29269
29307
  }
29308
+ else if (child.get() instanceof Expressions.Dereference) {
29309
+ if (!(context instanceof basic_1.DataReference)) {
29310
+ const message = "Not a data reference, cannot be dereferenced";
29311
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, child.getFirstToken(), message));
29312
+ return void_type_1.VoidType.get(_syntax_input_1.CheckSyntaxKey);
29313
+ }
29314
+ context = context.getType();
29315
+ continue;
29316
+ }
29270
29317
  else if (child.get() instanceof Expressions.ArrowOrDash) {
29271
29318
  const concat = child.concatTokens();
29272
29319
  if (concat === "-") {
@@ -47834,15 +47881,21 @@ exports.CrossIncludeMacros = CrossIncludeMacros;
47834
47881
 
47835
47882
  Object.defineProperty(exports, "__esModule", ({ value: true }));
47836
47883
  exports.AbstractNode = void 0;
47884
+ // shared constant, so nodes without children don't waste memory on empty arrays
47885
+ const EMPTY = Object.freeze([]);
47837
47886
  class AbstractNode {
47838
47887
  constructor() {
47839
- this.children = [];
47888
+ this.children = EMPTY;
47840
47889
  }
47841
47890
  addChild(n) {
47891
+ if (this.children === EMPTY) {
47892
+ this.children = [];
47893
+ }
47842
47894
  this.children.push(n);
47843
47895
  }
47844
47896
  setChildren(children) {
47845
- this.children = children;
47897
+ // copy, input arrays are built via push() and carry over-allocated backing stores
47898
+ this.children = children.slice();
47846
47899
  }
47847
47900
  getChildren() {
47848
47901
  return this.children;
@@ -48198,17 +48251,13 @@ const string_template_middle_1 = __webpack_require__(/*! ../1_lexer/tokens/strin
48198
48251
  const string_template_end_1 = __webpack_require__(/*! ../1_lexer/tokens/string_template_end */ "../core/build/src/abap/1_lexer/tokens/string_template_end.js");
48199
48252
  const string_template_begin_1 = __webpack_require__(/*! ../1_lexer/tokens/string_template_begin */ "../core/build/src/abap/1_lexer/tokens/string_template_begin.js");
48200
48253
  const string_template_1 = __webpack_require__(/*! ../1_lexer/tokens/string_template */ "../core/build/src/abap/1_lexer/tokens/string_template.js");
48254
+ const EMPTY_PRAGMAS = Object.freeze([]);
48201
48255
  class StatementNode extends _abstract_node_1.AbstractNode {
48202
48256
  constructor(statement, colon, pragmas) {
48203
48257
  super();
48204
48258
  this.statement = statement;
48205
48259
  this.colon = colon;
48206
- if (pragmas) {
48207
- this.pragmas = pragmas;
48208
- }
48209
- else {
48210
- this.pragmas = [];
48211
- }
48260
+ this.pragmas = pragmas !== null && pragmas !== void 0 ? pragmas : EMPTY_PRAGMAS;
48212
48261
  }
48213
48262
  get() {
48214
48263
  return this.statement;
@@ -48223,7 +48272,7 @@ class StatementNode extends _abstract_node_1.AbstractNode {
48223
48272
  if (children.length === 0) {
48224
48273
  throw new Error("statement: zero children");
48225
48274
  }
48226
- this.children = children;
48275
+ super.setChildren(children);
48227
48276
  return this;
48228
48277
  }
48229
48278
  getStart() {
@@ -48804,6 +48853,7 @@ exports.StructureNode = StructureNode;
48804
48853
 
48805
48854
  Object.defineProperty(exports, "__esModule", ({ value: true }));
48806
48855
  exports.TokenNode = void 0;
48856
+ const EMPTY_CHILDREN = Object.freeze([]);
48807
48857
  class TokenNode {
48808
48858
  constructor(token) {
48809
48859
  this.token = token;
@@ -48815,7 +48865,7 @@ class TokenNode {
48815
48865
  throw new Error("TokenNode, Method not implemented.");
48816
48866
  }
48817
48867
  getChildren() {
48818
- return [];
48868
+ return EMPTY_CHILDREN;
48819
48869
  }
48820
48870
  concatTokens() {
48821
48871
  return this.token.getStr();
@@ -52664,8 +52714,9 @@ var Mode;
52664
52714
  (function (Mode) {
52665
52715
  Mode[Mode["Default"] = 0] = "Default";
52666
52716
  Mode[Mode["String"] = 1] = "String";
52667
- Mode[Mode["SingleLineComment"] = 2] = "SingleLineComment";
52668
- Mode[Mode["MultiLineComment"] = 3] = "MultiLineComment";
52717
+ Mode[Mode["DoubleQuoteString"] = 2] = "DoubleQuoteString";
52718
+ Mode[Mode["SingleLineComment"] = 3] = "SingleLineComment";
52719
+ Mode[Mode["MultiLineComment"] = 4] = "MultiLineComment";
52669
52720
  })(Mode || (Mode = {}));
52670
52721
  class Result {
52671
52722
  constructor() {
@@ -52725,6 +52776,23 @@ class CDSLexer {
52725
52776
  }
52726
52777
  continue;
52727
52778
  }
52779
+ // double-quote string handling
52780
+ if (mode === Mode.DoubleQuoteString) {
52781
+ build += next;
52782
+ if (next === "\\" && nextNext === "\"") {
52783
+ build += stream.takeNext();
52784
+ col++;
52785
+ }
52786
+ else if (next === "\"" && nextNext === "\"") {
52787
+ build += stream.takeNext();
52788
+ col++;
52789
+ }
52790
+ else if (next === "\"") {
52791
+ build = result.add(build, row, col, mode);
52792
+ mode = Mode.Default;
52793
+ }
52794
+ continue;
52795
+ }
52728
52796
  // single line comment handling
52729
52797
  if (mode === Mode.SingleLineComment) {
52730
52798
  if (next === "\n") {
@@ -52771,6 +52839,11 @@ class CDSLexer {
52771
52839
  mode = Mode.String;
52772
52840
  build += next;
52773
52841
  break;
52842
+ case "\"":
52843
+ build = result.add(build, row, col, mode);
52844
+ mode = Mode.DoubleQuoteString;
52845
+ build += next;
52846
+ break;
52774
52847
  case " ":
52775
52848
  case "\t":
52776
52849
  build = result.add(build, row, col, mode);
@@ -53185,7 +53258,9 @@ class CDSAs extends combi_1.Expression {
53185
53258
  getRunnable() {
53186
53259
  const redirected = (0, combi_1.seq)(": REDIRECTED TO", (0, combi_1.optPrio)((0, combi_1.altPrio)("PARENT", "COMPOSITION CHILD")), _1.CDSName);
53187
53260
  const colonType = (0, combi_1.seq)(":", (0, combi_1.altPrio)(_1.CDSType, _1.CDSName, "LOCALIZED"));
53188
- return (0, combi_1.seq)("AS", _1.CDSName, (0, combi_1.optPrio)((0, combi_1.altPrio)(redirected, colonType)));
53261
+ const ident = (0, combi_1.regex)(/^\w+$/);
53262
+ const namespacedAlias = (0, combi_1.seq)(ident, "/", ident, "/", ident);
53263
+ return (0, combi_1.seq)("AS", (0, combi_1.altPrio)(namespacedAlias, _1.CDSName), (0, combi_1.optPrio)((0, combi_1.altPrio)(redirected, colonType)));
53189
53264
  }
53190
53265
  }
53191
53266
  exports.CDSAs = CDSAs;
@@ -53219,8 +53294,9 @@ class CDSAssociation extends combi_1.Expression {
53219
53294
  // Numeric OF form: "association of [0..1] to Target on ..."
53220
53295
  const ofNumericForm = (0, combi_1.seq)("ASSOCIATION", "OF", numericCardinality, "TO", _1.CDSRelation, "ON", _1.CDSCondition);
53221
53296
  // "association [0..1] to Target as _Alias on condition" — standard form
53297
+ const parentForm = (0, combi_1.seq)("ASSOCIATION", "TO", "PARENT", _1.CDSRelation);
53222
53298
  const standardForm = (0, combi_1.seq)("ASSOCIATION", (0, combi_1.optPrio)(cds_cardinality_1.CDSCardinality), "TO", (0, combi_1.opt)((0, combi_1.altPrio)(textCardinality, "PARENT")), _1.CDSRelation, "ON", _1.CDSCondition, (0, combi_1.opt)((0, combi_1.seq)("WITH", "DEFAULT", "FILTER", _1.CDSCondition)));
53223
- return (0, combi_1.altPrio)(ofTextForm, ofNumericForm, standardForm);
53299
+ return (0, combi_1.altPrio)(ofTextForm, ofNumericForm, standardForm, parentForm);
53224
53300
  }
53225
53301
  }
53226
53302
  exports.CDSAssociation = CDSAssociation;
@@ -53477,11 +53553,9 @@ class CDSDefineHierarchy extends combi_1.Expression {
53477
53553
  const directory = (0, combi_1.seq)("DIRECTORY", _1.CDSName, "FILTER", "BY", _1.CDSCondition);
53478
53554
  // DATE PERIOD: period from <field> to <field> [valid from :p to :p]
53479
53555
  const datePeriod = (0, combi_1.seq)("PERIOD", "FROM", _1.CDSName, "TO", _1.CDSName, (0, combi_1.opt)((0, combi_1.seq)("VALID", "FROM", _1.CDSPrefixedName, "TO", _1.CDSPrefixedName)));
53480
- // DEPTH accepts an integer literal or a parameter reference (:param)
53481
- const depthValue = (0, combi_1.altPrio)(_1.CDSInteger, _1.CDSPrefixedName);
53482
- // LOAD mode: BULK, INCREMENTAL, or a parameter reference ($parameters.p_load)
53556
+ const depthValue = (0, combi_1.altPrio)(_1.CDSString, _1.CDSInteger, _1.CDSPrefixedName);
53483
53557
  const loadMode = (0, combi_1.altPrio)("BULK", "INCREMENTAL", _1.CDSPrefixedName);
53484
- const hierarchyBody = (0, combi_1.seq)("SOURCE", _1.CDSName, (0, combi_1.opt)(_1.CDSParametersSelect), "CHILD", "TO", "PARENT", "ASSOCIATION", _1.CDSName, (0, combi_1.opt)(directory), (0, combi_1.opt)(datePeriod), (0, combi_1.opt)((0, combi_1.seq)("START", "WHERE", _1.CDSCondition)), (0, combi_1.opt)(siblingsOrder), (0, combi_1.opt)((0, combi_1.seq)("LOAD", loadMode)), (0, combi_1.opt)((0, combi_1.seq)("NODETYPE", _1.CDSName)), (0, combi_1.opt)((0, combi_1.seq)("DEPTH", depthValue)), (0, combi_1.opt)((0, combi_1.seq)("MULTIPLE", "PARENTS", (0, combi_1.altPrio)("NOT ALLOWED", "ALLOWED", (0, combi_1.seq)("LEAVES", (0, combi_1.optPrio)("ONLY"))))), (0, combi_1.opt)((0, combi_1.seq)("ORPHANS", (0, combi_1.altPrio)("IGNORE", "ROOT", "ERROR"))), (0, combi_1.opt)((0, combi_1.seq)("CYCLES", (0, combi_1.altPrio)("BREAKUP", "ERROR"))), (0, combi_1.opt)((0, combi_1.seq)("GENERATE", "SPANTREE")), (0, combi_1.opt)((0, combi_1.seq)("CACHE", (0, combi_1.altPrio)("ON", "OFF", "FORCE"))));
53558
+ const hierarchyBody = (0, combi_1.seq)("SOURCE", _1.CDSName, (0, combi_1.opt)(_1.CDSParametersSelect), "CHILD", "TO", "PARENT", "ASSOCIATION", _1.CDSName, (0, combi_1.opt)(directory), (0, combi_1.opt)(datePeriod), (0, combi_1.opt)((0, combi_1.seq)("START", "WHERE", _1.CDSCondition)), (0, combi_1.opt)(siblingsOrder), (0, combi_1.opt)((0, combi_1.seq)("LOAD", loadMode)), (0, combi_1.opt)((0, combi_1.seq)("DEPTH", depthValue)), (0, combi_1.opt)((0, combi_1.seq)("NODETYPE", _1.CDSName)), (0, combi_1.opt)((0, combi_1.seq)("MULTIPLE", "PARENTS", (0, combi_1.altPrio)("NOT ALLOWED", "ALLOWED", (0, combi_1.seq)("LEAVES", (0, combi_1.optPrio)("ONLY"))))), (0, combi_1.opt)((0, combi_1.seq)("ORPHANS", (0, combi_1.altPrio)("IGNORE", "ROOT", "ERROR"))), (0, combi_1.opt)((0, combi_1.seq)("CYCLES", (0, combi_1.altPrio)("BREAKUP", "ERROR"))), (0, combi_1.opt)((0, combi_1.seq)("GENERATE", "SPANTREE")), (0, combi_1.opt)((0, combi_1.seq)("CACHE", (0, combi_1.altPrio)("ON", "OFF", "FORCE"))));
53485
53559
  return (0, combi_1.seq)((0, combi_1.star)(_1.CDSAnnotation), "DEFINE", "HIERARCHY", _1.CDSName, (0, combi_1.opt)(_1.CDSWithParameters), "AS", "PARENT", "CHILD", "HIERARCHY", "(", hierarchyBody, ")", "{", (0, combi_1.seq)(field, (0, combi_1.star)((0, combi_1.seq)(",", field))), "}", (0, combi_1.opt)(";"));
53486
53560
  }
53487
53561
  }
@@ -53529,10 +53603,10 @@ const _1 = __webpack_require__(/*! . */ "../core/build/src/cds/expressions/index
53529
53603
  const combi_1 = __webpack_require__(/*! ../../abap/2_statements/combi */ "../core/build/src/abap/2_statements/combi.js");
53530
53604
  class CDSDefineTableEntity extends combi_1.Expression {
53531
53605
  getRunnable() {
53532
- const nullability = (0, combi_1.optPrio)((0, combi_1.alt)("NOT NULL", "NULL"));
53533
- const field = (0, combi_1.seq)((0, combi_1.star)(_1.CDSAnnotation), (0, combi_1.optPrio)((0, combi_1.str)("KEY")), _1.CDSName, ":", _1.CDSType, nullability, ";");
53534
- const assocOrComp = (0, combi_1.seq)((0, combi_1.star)(_1.CDSAnnotation), _1.CDSName, ":", (0, combi_1.alt)(_1.CDSComposition, _1.CDSAssociation), ";");
53535
- const inlineBody = (0, combi_1.plus)((0, combi_1.alt)(field, assocOrComp));
53606
+ // Inline `{ ... }` body: one or more table-field entries. Each entry is
53607
+ // wrapped in a CDSTableField node so downstream tooling can pair each
53608
+ // field name with its own annotations.
53609
+ const inlineBody = (0, combi_1.plus)(_1.CDSTableField);
53536
53610
  const elementList = (0, combi_1.seq)(_1.CDSElement, (0, combi_1.star)((0, combi_1.seq)(",", _1.CDSElement)), (0, combi_1.opt)(","));
53537
53611
  const elements = (0, combi_1.seq)((0, combi_1.str)("{"), (0, combi_1.altPrio)("*", elementList), (0, combi_1.str)("}"));
53538
53612
  const selectBody = (0, combi_1.seq)("AS", "SELECT", "FROM", _1.CDSSource, (0, combi_1.star)(_1.CDSJoin), (0, combi_1.star)((0, combi_1.altPrio)(_1.CDSComposition, _1.CDSAssociation)), (0, combi_1.opt)(elements), (0, combi_1.optPrio)(_1.CDSWhere));
@@ -53587,8 +53661,10 @@ const cds_with_parameters_1 = __webpack_require__(/*! ./cds_with_parameters */ "
53587
53661
  class CDSDefineView extends combi_1.Expression {
53588
53662
  getRunnable() {
53589
53663
  const columnAlias = (0, combi_1.seq)("(", cds_name_1.CDSName, (0, combi_1.star)((0, combi_1.seq)(",", cds_name_1.CDSName)), ")");
53590
- return (0, combi_1.seq)((0, combi_1.star)(_1.CDSAnnotation), (0, combi_1.opt)("DEFINE"), (0, combi_1.opt)("ROOT"), (0, combi_1.opt)("WRITABLE"), "VIEW", (0, combi_1.ver)(__1.Release.v755, (0, combi_1.opt)("ENTITY")), cds_name_1.CDSName, (0, combi_1.opt)(columnAlias), (0, combi_1.opt)(cds_with_parameters_1.CDSWithParameters), "AS", cds_select_1.CDSSelect, (0, combi_1.opt)((0, combi_1.seq)("WITH", "HIERARCHY", cds_name_1.CDSName)), // post-select WITH HIERARCHY clause
53591
- (0, combi_1.opt)(";"));
53664
+ const parenSelect = (0, combi_1.seq)("(", cds_select_1.CDSSelect, ")");
53665
+ const unionBranch = (0, combi_1.altPrio)(parenSelect, cds_select_1.CDSSelect);
53666
+ const topLevelSelect = (0, combi_1.altPrio)((0, combi_1.seq)(parenSelect, (0, combi_1.star)((0, combi_1.altPrio)((0, combi_1.seq)("UNION", (0, combi_1.opt)("ALL"), unionBranch), (0, combi_1.seq)("EXCEPT", unionBranch), (0, combi_1.seq)("INTERSECT", unionBranch)))), cds_select_1.CDSSelect);
53667
+ return (0, combi_1.seq)((0, combi_1.star)(_1.CDSAnnotation), (0, combi_1.opt)("DEFINE"), (0, combi_1.opt)("ROOT"), (0, combi_1.opt)("WRITABLE"), "VIEW", (0, combi_1.ver)(__1.Release.v755, (0, combi_1.opt)("ENTITY")), cds_name_1.CDSName, (0, combi_1.opt)(columnAlias), (0, combi_1.opt)(cds_with_parameters_1.CDSWithParameters), "AS", topLevelSelect, (0, combi_1.opt)((0, combi_1.seq)("WITH", "HIERARCHY", cds_name_1.CDSName)), (0, combi_1.opt)(";"));
53592
53668
  }
53593
53669
  }
53594
53670
  exports.CDSDefineView = CDSDefineView;
@@ -53615,9 +53691,13 @@ class CDSElement extends combi_1.Expression {
53615
53691
  const redirected = (0, combi_1.seq)(": REDIRECTED TO", (0, combi_1.optPrio)((0, combi_1.altPrio)("PARENT", "COMPOSITION CHILD")), _1.CDSName);
53616
53692
  const colonThing = (0, combi_1.seq)(":", (0, combi_1.altPrio)(_1.CDSType, _1.CDSName, "LOCALIZED"));
53617
53693
  const extensionWildcard = (0, combi_1.seq)("$extension", ".", "*");
53618
- const includeElement = (0, combi_1.seq)("INCLUDE", _1.CDSPrefixedName);
53694
+ const excludingNames = (0, combi_1.seq)(_1.CDSName, (0, combi_1.starPrio)((0, combi_1.seq)(",", _1.CDSName)));
53695
+ const excluding = (0, combi_1.seq)("EXCLUDING", "{", excludingNames, "}");
53696
+ const includeElement = (0, combi_1.seq)("INCLUDE", _1.CDSPrefixedName, (0, combi_1.optPrio)(excluding), (0, combi_1.optPrio)("SIGNATURE ONLY"));
53619
53697
  const typedVirtual = (0, combi_1.seq)("VIRTUAL", _1.CDSName, ":", _1.CDSType);
53620
- const body = (0, combi_1.altPrio)(extensionWildcard, includeElement, _1.CDSArithmetics, _1.CDSAggregate, _1.CDSString, _1.CDSArithParen, _1.CDSFunction, cds_cast_1.CDSCast, _1.CDSCase, (0, combi_1.seq)("(", _1.CDSCase, ")"), (0, combi_1.seq)(_1.CDSPrefixedName, (0, combi_1.optPrio)(cds_as_1.CDSAs), (0, combi_1.optPrio)((0, combi_1.altPrio)(redirected, colonThing))), _1.CDSInteger);
53698
+ const pathSegment = (0, combi_1.seq)(".", (0, combi_1.altPrio)(_1.CDSString, _1.CDSName, "*"), (0, combi_1.optPrio)((0, combi_1.altPrio)(_1.CDSParametersSelect, _1.CDSParameters)));
53699
+ const funcWithPath = (0, combi_1.seq)(_1.CDSFunction, (0, combi_1.plusPrio)(pathSegment));
53700
+ const body = (0, combi_1.altPrio)(extensionWildcard, includeElement, _1.CDSArithmetics, _1.CDSAggregate, _1.CDSString, _1.CDSArithParen, funcWithPath, _1.CDSFunction, cds_cast_1.CDSCast, _1.CDSCase, (0, combi_1.seq)("(", _1.CDSCase, ")"), (0, combi_1.seq)(_1.CDSPrefixedName, (0, combi_1.optPrio)(cds_as_1.CDSAs), (0, combi_1.optPrio)((0, combi_1.altPrio)(redirected, colonThing))), _1.CDSInteger);
53621
53701
  const elementBody = (0, combi_1.altPrio)(typedVirtual, (0, combi_1.seq)((0, combi_1.altPrio)("KEY", "VIRTUAL"), body), body);
53622
53702
  return (0, combi_1.seq)((0, combi_1.starPrio)(_1.CDSAnnotation), elementBody, (0, combi_1.optPrio)(cds_as_1.CDSAs));
53623
53703
  }
@@ -53644,7 +53724,9 @@ class CDSExtendView extends combi_1.Expression {
53644
53724
  const namedot = (0, combi_1.seq)(_1.CDSName, (0, combi_1.optPrio)((0, combi_1.seq)(".", _1.CDSName)), (0, combi_1.optPrio)(_1.CDSAs));
53645
53725
  const valueNested = (0, combi_1.seq)("{", namedot, (0, combi_1.star)((0, combi_1.seq)(",", namedot)), "}");
53646
53726
  const redefineAssoc = (0, combi_1.seq)("REDEFINE", "ASSOCIATION", _1.CDSPrefixedName, (0, combi_1.optPrio)((0, combi_1.seq)("[", _1.CDSCondition, "]")), (0, combi_1.opt)(_1.CDSAs), "REDIRECTED", "TO", (0, combi_1.optPrio)((0, combi_1.altPrio)((0, combi_1.seq)("COMPOSITION", "CHILD"), "PARENT")), _1.CDSName);
53647
- const extendView = (0, combi_1.seq)((0, combi_1.star)(_1.CDSAnnotation), (0, combi_1.str)("EXTEND VIEW"), (0, combi_1.opt)((0, combi_1.str)("ENTITY")), _1.CDSName, (0, combi_1.str)("WITH"), (0, combi_1.opt)(_1.CDSName), (0, combi_1.star)(redefineAssoc), valueNested, (0, combi_1.opt)(";"));
53727
+ const elementList = (0, combi_1.seq)(_1.CDSElement, (0, combi_1.star)((0, combi_1.seq)(",", _1.CDSElement)), (0, combi_1.opt)(","));
53728
+ const elementNested = (0, combi_1.seq)("{", (0, combi_1.altPrio)("*", elementList), "}");
53729
+ const extendView = (0, combi_1.seq)((0, combi_1.star)(_1.CDSAnnotation), (0, combi_1.str)("EXTEND VIEW"), (0, combi_1.opt)((0, combi_1.str)("ENTITY")), _1.CDSName, (0, combi_1.str)("WITH"), (0, combi_1.opt)(_1.CDSName), (0, combi_1.star)(redefineAssoc), (0, combi_1.star)(_1.CDSAssociation), (0, combi_1.altPrio)(elementNested, valueNested), (0, combi_1.opt)(";"));
53648
53730
  const field = (0, combi_1.seq)((0, combi_1.star)(_1.CDSAnnotation), (0, combi_1.optPrio)((0, combi_1.str)("KEY")), _1.CDSName, ":", _1.CDSType, ";");
53649
53731
  const assocOrComp = (0, combi_1.seq)((0, combi_1.star)(_1.CDSAnnotation), _1.CDSName, ":", (0, combi_1.alt)(_1.CDSComposition, _1.CDSAssociation), ";");
53650
53732
  const entityBody = (0, combi_1.seq)("{", (0, combi_1.plus)((0, combi_1.alt)(field, assocOrComp)), "}");
@@ -53934,7 +54016,9 @@ class CDSParametersSelect extends combi_1.Expression {
53934
54016
  getRunnable() {
53935
54017
  const name = (0, combi_1.seq)(_1.CDSName, (0, combi_1.opt)((0, combi_1.seq)(".", _1.CDSName)));
53936
54018
  const value = (0, combi_1.alt)(_1.CDSInteger, name, _1.CDSString);
53937
- const nameValue = (0, combi_1.seq)(name, ":", value);
54019
+ const colonPair = (0, combi_1.seq)(name, ":", value, (0, combi_1.optPrio)("DEFAULT"));
54020
+ const arrowPair = (0, combi_1.seq)(name, "=", ">", value);
54021
+ const nameValue = (0, combi_1.altPrio)(colonPair, arrowPair);
53938
54022
  return (0, combi_1.seq)("(", nameValue, (0, combi_1.star)((0, combi_1.seq)(",", nameValue)), ")");
53939
54023
  }
53940
54024
  }
@@ -53968,13 +54052,13 @@ class CDSPrefixedName extends combi_1.Expression {
53968
54052
  const cardinalityJoin = (0, combi_1.seq)("[", cardSpec, ":", joinType, "]");
53969
54053
  const cardinalityJoinWhere = (0, combi_1.seq)("[", cardSpec, ":", joinType, "WHERE", cds_condition_1.CDSCondition, "]");
53970
54054
  const joinWhere = (0, combi_1.seq)("[", joinType, "WHERE", cds_condition_1.CDSCondition, "]");
53971
- const textCard = (0, combi_1.altPrio)("TO EXACT ONE", "TO ONE", "TO MANY");
54055
+ const textCard = (0, combi_1.altPrio)("MANY TO EXACT ONE", "MANY TO ONE", "ONE TO MANY", "ONE TO ONE", "TO EXACT ONE", "TO ONE", "TO MANY");
53972
54056
  const textCardFilter = (0, combi_1.seq)("[", textCard, (0, combi_1.optPrio)((0, combi_1.seq)(":", (0, combi_1.altPrio)((0, combi_1.seq)(joinType, "WHERE", cds_condition_1.CDSCondition), joinType, cds_condition_1.CDSCondition))), "]");
53973
54057
  const cardNum = (0, combi_1.altPrio)(cds_integer_1.CDSInteger, "*");
53974
54058
  const rangeCard = (0, combi_1.seq)(cds_integer_1.CDSInteger, ".", ".", cardNum);
53975
54059
  const rangeCardFilter = (0, combi_1.seq)("[", rangeCard, ":", cds_condition_1.CDSCondition, "]");
53976
54060
  const pathFilter = (0, combi_1.altPrio)(cardinalityJoinWhere, joinWhere, cardinalityJoin, joinRedirect, textCardFilter, rangeCardFilter, (0, combi_1.seq)("[", cardSpec, ":", cds_condition_1.CDSCondition, "]"), (0, combi_1.seq)("[", cds_condition_1.CDSCondition, "]"));
53977
- const segment = (0, combi_1.seq)(".", (0, combi_1.altPrio)(cds_string_1.CDSString, cds_name_1.CDSName), (0, combi_1.optPrio)((0, combi_1.altPrio)(cds_parameters_select_1.CDSParametersSelect, cds_parameters_1.CDSParameters)), (0, combi_1.optPrio)(pathFilter));
54061
+ const segment = (0, combi_1.seq)(".", (0, combi_1.altPrio)(cds_string_1.CDSString, cds_name_1.CDSName, "*"), (0, combi_1.optPrio)((0, combi_1.altPrio)(cds_parameters_select_1.CDSParametersSelect, cds_parameters_1.CDSParameters)), (0, combi_1.optPrio)(pathFilter));
53978
54062
  return (0, combi_1.seq)(cds_name_1.CDSName, (0, combi_1.optPrio)((0, combi_1.altPrio)(cds_parameters_1.CDSParameters, cds_parameters_select_1.CDSParametersSelect)), (0, combi_1.optPrio)(pathFilter), (0, combi_1.star)(segment));
53979
54063
  }
53980
54064
  }
@@ -54019,7 +54103,7 @@ const combi_1 = __webpack_require__(/*! ../../abap/2_statements/combi */ "../cor
54019
54103
  class CDSRelation extends combi_1.Expression {
54020
54104
  getRunnable() {
54021
54105
  const pre = (0, combi_1.seq)("/", (0, combi_1.regex)(/^[\w_]+$/), "/");
54022
- return (0, combi_1.seq)((0, combi_1.opt)(pre), (0, combi_1.regex)(/^[\w_]+$/), (0, combi_1.opt)(_1.CDSAs));
54106
+ return (0, combi_1.seq)((0, combi_1.opt)(pre), (0, combi_1.regex)(/^[\w_]+$/), (0, combi_1.opt)(_1.CDSParametersSelect), (0, combi_1.opt)(_1.CDSAs));
54023
54107
  }
54024
54108
  }
54025
54109
  exports.CDSRelation = CDSRelation;
@@ -54047,11 +54131,12 @@ class CDSSelect extends combi_1.Expression {
54047
54131
  const distinct = (0, combi_1.str)("DISTINCT");
54048
54132
  const elementList = (0, combi_1.seq)(_1.CDSElement, (0, combi_1.star)((0, combi_1.seq)(",", _1.CDSElement)), (0, combi_1.opt)(","));
54049
54133
  const elements = (0, combi_1.seq)((0, combi_1.str)("{"), (0, combi_1.altPrio)("*", elementList), (0, combi_1.str)("}"));
54050
- const aspectBinding = (0, combi_1.seq)(_1.CDSPrefixedName, "=", ">", _1.CDSPrefixedName);
54051
- const bindAspect = (0, combi_1.seq)("BIND", "ASPECT", _1.CDSName, "(", aspectBinding, (0, combi_1.starPrio)((0, combi_1.seq)(",", aspectBinding)), ")");
54134
+ const aspectValue = (0, combi_1.altPrio)(_1.CDSString, _1.CDSPrefixedName);
54135
+ const aspectBinding = (0, combi_1.seq)(_1.CDSPrefixedName, "=", ">", aspectValue);
54136
+ const bindAspect = (0, combi_1.seq)("BIND", "ASPECT", _1.CDSName, "(", aspectBinding, (0, combi_1.starPrio)((0, combi_1.seq)(",", aspectBinding)), ")", (0, combi_1.optPrio)((0, combi_1.seq)("AS", _1.CDSName)));
54052
54137
  const parenSelect = (0, combi_1.seq)("(", CDSSelect, ")");
54053
54138
  const unionBranch = (0, combi_1.altPrio)(parenSelect, CDSSelect);
54054
- return (0, combi_1.seq)("SELECT", (0, combi_1.optPrio)(distinct), (0, combi_1.opt)((0, combi_1.altPrio)("*", fields)), "FROM", _1.CDSSource, (0, combi_1.star)(cds_join_1.CDSJoin), (0, combi_1.star)((0, combi_1.altPrio)(_1.CDSComposition, cds_association_1.CDSAssociation)), (0, combi_1.optPrio)(bindAspect), (0, combi_1.opt)(elements), (0, combi_1.optPrio)(_1.CDSWhere), (0, combi_1.optPrio)(_1.CDSGroupBy), (0, combi_1.optPrio)(_1.CDSHaving), (0, combi_1.optPrio)((0, combi_1.altPrio)((0, combi_1.seq)("UNION", (0, combi_1.optPrio)("ALL"), unionBranch), (0, combi_1.seq)("EXCEPT", unionBranch), (0, combi_1.seq)("INTERSECT", unionBranch))));
54139
+ return (0, combi_1.seq)("SELECT", (0, combi_1.optPrio)(distinct), (0, combi_1.opt)((0, combi_1.altPrio)("*", fields)), "FROM", _1.CDSSource, (0, combi_1.star)(cds_join_1.CDSJoin), (0, combi_1.star)((0, combi_1.altPrio)(_1.CDSComposition, cds_association_1.CDSAssociation)), (0, combi_1.starPrio)(bindAspect), (0, combi_1.opt)(elements), (0, combi_1.optPrio)(_1.CDSWhere), (0, combi_1.optPrio)(_1.CDSGroupBy), (0, combi_1.optPrio)(_1.CDSHaving), (0, combi_1.optPrio)((0, combi_1.altPrio)((0, combi_1.seq)("UNION", (0, combi_1.optPrio)("ALL"), unionBranch), (0, combi_1.seq)("EXCEPT", unionBranch), (0, combi_1.seq)("INTERSECT", unionBranch))));
54055
54140
  }
54056
54141
  }
54057
54142
  exports.CDSSelect = CDSSelect;
@@ -54074,10 +54159,7 @@ const combi_1 = __webpack_require__(/*! ../../abap/2_statements/combi */ "../cor
54074
54159
  class CDSSource extends combi_1.Expression {
54075
54160
  getRunnable() {
54076
54161
  const staticFilter = (0, combi_1.seq)("[", _1.CDSCondition, "]");
54077
- // Dotted path: T._Assoc association path as FROM source
54078
- const dottedName = (0, combi_1.seq)(_1.CDSName, ".", _1.CDSName);
54079
- const namedSource = (0, combi_1.altPrio)(dottedName, _1.CDSName);
54080
- const singleSource = (0, combi_1.seq)(namedSource, (0, combi_1.optPrio)(_1.CDSParametersSelect), (0, combi_1.optPrio)(staticFilter), (0, combi_1.opt)((0, combi_1.altPrio)(_1.CDSAs, _1.CDSName)));
54162
+ const singleSource = (0, combi_1.seq)(_1.CDSPrefixedName, (0, combi_1.optPrio)(_1.CDSParametersSelect), (0, combi_1.optPrio)(staticFilter), (0, combi_1.opt)((0, combi_1.altPrio)(_1.CDSAs, _1.CDSName)));
54081
54163
  const funcSingleSource = (0, combi_1.seq)(_1.CDSFunction, (0, combi_1.opt)((0, combi_1.altPrio)(_1.CDSAs, _1.CDSName)));
54082
54164
  const parenSource = (0, combi_1.seq)("(", (0, combi_1.altPrio)(CDSSource, singleSource), (0, combi_1.star)(_1.CDSJoin), ")");
54083
54165
  return (0, combi_1.altPrio)(parenSource, funcSingleSource, singleSource);
@@ -54101,8 +54183,8 @@ exports.CDSString = void 0;
54101
54183
  const combi_1 = __webpack_require__(/*! ../../abap/2_statements/combi */ "../core/build/src/abap/2_statements/combi.js");
54102
54184
  class CDSString extends combi_1.Expression {
54103
54185
  getRunnable() {
54104
- const reg = (0, combi_1.regex)(/^'(?:[^'\\]|''|\\'|\\\\|\\(?!'))*'$/);
54105
- const abapTypeName = (0, combi_1.regex)(/^(?:int[1-9]|int8|sstring|char|numc|dats|datn|tims|timn|utcl|utclong|fltp|decfloat\d+|dec|string|rawstring|rstr|raw|xstring|clnt|lang|unit|cuky|curr|quan|geom_ewkb|d34n|d16n|d34d|d16d|d34s|d16s|d34r|d16r|d|t|p|n|c|x|f)$/i);
54186
+ const reg = (0, combi_1.regex)(/^(?:'(?:[^'\\]|''|\\'|\\\\|\\(?!'))*'|"(?:[^"\\]|""|\\"|\\\\|\\(?!"))*")$/);
54187
+ const abapTypeName = (0, combi_1.regex)(/^(?:int[1-9]|int8|sstring|sstr|char|numc|dats|datn|tims|timn|utcl|utclong|fltp|decfloat\d+|dec|string|rawstring|rstr|raw|xstring|clnt|lang|unit|cuky|curr|quan|geom_ewkb|d34n|d16n|d34d|d16d|d34s|d16s|d34r|d16r|d|t|p|n|c|x|f)$/i);
54106
54188
  const abap = (0, combi_1.seq)("abap", ".", abapTypeName, (0, combi_1.optPrio)((0, combi_1.seq)("(", (0, combi_1.regex)(/^\d+$/), ")")), reg);
54107
54189
  return (0, combi_1.altPrio)(abap, reg);
54108
54190
  }
@@ -54112,6 +54194,35 @@ exports.CDSString = CDSString;
54112
54194
 
54113
54195
  /***/ },
54114
54196
 
54197
+ /***/ "../core/build/src/cds/expressions/cds_table_field.js"
54198
+ /*!************************************************************!*\
54199
+ !*** ../core/build/src/cds/expressions/cds_table_field.js ***!
54200
+ \************************************************************/
54201
+ (__unused_webpack_module, exports, __webpack_require__) {
54202
+
54203
+ "use strict";
54204
+
54205
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
54206
+ exports.CDSTableField = void 0;
54207
+ const _1 = __webpack_require__(/*! . */ "../core/build/src/cds/expressions/index.js");
54208
+ const combi_1 = __webpack_require__(/*! ../../abap/2_statements/combi */ "../core/build/src/abap/2_statements/combi.js");
54209
+ // A single field or association/composition inside a `define table entity { ... }`
54210
+ // inline body. Wraps annotations + name + type together so tooling can iterate
54211
+ // per-field with associated field-level annotations (matches the CDSElement
54212
+ // shape used for select-list elements).
54213
+ class CDSTableField extends combi_1.Expression {
54214
+ getRunnable() {
54215
+ const nullability = (0, combi_1.optPrio)((0, combi_1.alt)("NOT NULL", "NULL"));
54216
+ const field = (0, combi_1.seq)((0, combi_1.optPrio)((0, combi_1.str)("KEY")), _1.CDSName, ":", _1.CDSType, nullability);
54217
+ const assocOrComp = (0, combi_1.seq)(_1.CDSName, ":", (0, combi_1.alt)(_1.CDSComposition, _1.CDSAssociation));
54218
+ return (0, combi_1.seq)((0, combi_1.star)(_1.CDSAnnotation), (0, combi_1.alt)(field, assocOrComp), ";");
54219
+ }
54220
+ }
54221
+ exports.CDSTableField = CDSTableField;
54222
+ //# sourceMappingURL=cds_table_field.js.map
54223
+
54224
+ /***/ },
54225
+
54115
54226
  /***/ "../core/build/src/cds/expressions/cds_type.js"
54116
54227
  /*!*****************************************************!*\
54117
54228
  !*** ../core/build/src/cds/expressions/cds_type.js ***!
@@ -54243,6 +54354,7 @@ __exportStar(__webpack_require__(/*! ./cds_relation */ "../core/build/src/cds/ex
54243
54354
  __exportStar(__webpack_require__(/*! ./cds_select */ "../core/build/src/cds/expressions/cds_select.js"), exports);
54244
54355
  __exportStar(__webpack_require__(/*! ./cds_source */ "../core/build/src/cds/expressions/cds_source.js"), exports);
54245
54356
  __exportStar(__webpack_require__(/*! ./cds_string */ "../core/build/src/cds/expressions/cds_string.js"), exports);
54357
+ __exportStar(__webpack_require__(/*! ./cds_table_field */ "../core/build/src/cds/expressions/cds_table_field.js"), exports);
54246
54358
  __exportStar(__webpack_require__(/*! ./cds_type */ "../core/build/src/cds/expressions/cds_type.js"), exports);
54247
54359
  __exportStar(__webpack_require__(/*! ./cds_where */ "../core/build/src/cds/expressions/cds_where.js"), exports);
54248
54360
  __exportStar(__webpack_require__(/*! ./cds_with_parameters */ "../core/build/src/cds/expressions/cds_with_parameters.js"), exports);
@@ -68572,7 +68684,7 @@ class Registry {
68572
68684
  }
68573
68685
  static abaplintVersion() {
68574
68686
  // magic, see build script "version.js"
68575
- return "2.119.56";
68687
+ return "2.119.58";
68576
68688
  }
68577
68689
  getDDICReferences() {
68578
68690
  return this.ddicReferences;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abaplint/cli",
3
- "version": "2.119.56",
3
+ "version": "2.119.58",
4
4
  "description": "abaplint - Command Line Interface",
5
5
  "funding": "https://github.com/sponsors/larshp",
6
6
  "bin": {
@@ -39,7 +39,7 @@
39
39
  },
40
40
  "homepage": "https://abaplint.org",
41
41
  "devDependencies": {
42
- "@abaplint/core": "^2.119.56",
42
+ "@abaplint/core": "^2.119.58",
43
43
  "@types/chai": "^4.3.20",
44
44
  "@types/minimist": "^1.2.5",
45
45
  "@types/mocha": "^10.0.10",