@abaplint/transpiler-cli 2.13.59 → 2.13.60

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/build/bundle.js CHANGED
@@ -9527,7 +9527,7 @@ const sql_field_1 = __webpack_require__(/*! ./sql_field */ "./node_modules/@abap
9527
9527
  const sql_grouping_sets_1 = __webpack_require__(/*! ./sql_grouping_sets */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_grouping_sets.js");
9528
9528
  class SQLGroupBy extends combi_1.Expression {
9529
9529
  getRunnable() {
9530
- const fieldName = (0, combi_1.alt)(sql_field_name_1.SQLFieldName, dynamic_1.Dynamic);
9530
+ const fieldName = (0, combi_1.seq)((0, combi_1.stopBefore)("ORDER", "BY"), (0, combi_1.alt)(sql_field_name_1.SQLFieldName, dynamic_1.Dynamic));
9531
9531
  const expr = (0, combi_1.ver)(version_1.Release.v740sp02, sql_field_1.SQLField, { also: combi_1.AlsoIn.OpenABAP });
9532
9532
  const newGroup = (0, combi_1.ver)(version_1.Release.v740sp02, (0, combi_1.seq)("GROUP BY", expr, (0, combi_1.altPrio)((0, combi_1.plus)((0, combi_1.seq)(",", expr)), (0, combi_1.optPrio)((0, combi_1.plus)(fieldName)))), { also: combi_1.AlsoIn.OpenABAP });
9533
9533
  const old = (0, combi_1.seq)((0, combi_1.plus)((0, combi_1.seq)(fieldName, ",")), fieldName);
@@ -13129,7 +13129,7 @@ class ClassDefinition {
13129
13129
  const risk = (0, combi_1.seq)("RISK LEVEL", level);
13130
13130
  const time = (0, combi_1.altPrio)("LONG", "MEDIUM", "SHORT");
13131
13131
  const duration = (0, combi_1.seq)("DURATION", time);
13132
- const blah = (0, combi_1.per)(expressions_1.ClassGlobal, expressions_1.ClassFinal, "ABSTRACT", (0, combi_1.seq)("INHERITING FROM", expressions_1.SuperClassName), create, "FOR TESTING", risk, "SHARED MEMORY ENABLED", duration, (0, combi_1.ver)(version_1.Release.v754, (0, combi_1.seq)("FOR BEHAVIOR OF", expressions_1.BehaviorDefinitionName), { also: combi_1.AlsoIn.OpenABAP }), expressions_1.ClassFriends);
13132
+ const blah = (0, combi_1.per)(expressions_1.ClassGlobal, expressions_1.ClassFinal, "ABSTRACT", (0, combi_1.seq)("INHERITING FROM", expressions_1.SuperClassName), create, "FOR TESTING", risk, "SHARED MEMORY ENABLED", duration, (0, combi_1.ver)(version_1.Release.v754, (0, combi_1.seq)("FOR BEHAVIOR OF", expressions_1.BehaviorDefinitionName), { also: combi_1.AlsoIn.OpenABAP }), (0, combi_1.ver)(version_1.Release.v758, (0, combi_1.seq)("FOR EVENTS OF", expressions_1.BehaviorDefinitionName)), expressions_1.ClassFriends);
13133
13133
  const def = (0, combi_1.seq)("DEFINITION", (0, combi_1.optPrio)(blah));
13134
13134
  return (0, combi_1.seq)("CLASS", expressions_1.ClassName, def);
13135
13135
  }
@@ -17098,6 +17098,7 @@ exports.MethodDef = void 0;
17098
17098
  const version_1 = __webpack_require__(/*! ../../../version */ "./node_modules/@abaplint/core/build/src/version.js");
17099
17099
  const combi_1 = __webpack_require__(/*! ../combi */ "./node_modules/@abaplint/core/build/src/abap/2_statements/combi.js");
17100
17100
  const expressions_1 = __webpack_require__(/*! ../expressions */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js");
17101
+ const tokens_1 = __webpack_require__(/*! ../../1_lexer/tokens */ "./node_modules/@abaplint/core/build/src/abap/1_lexer/tokens/index.js");
17101
17102
  class MethodDef {
17102
17103
  getMatcher() {
17103
17104
  const def = (0, combi_1.ver)(version_1.Release.v740sp08, (0, combi_1.seq)("DEFAULT", (0, combi_1.altPrio)("FAIL", "IGNORE")), { also: combi_1.AlsoIn.OpenABAP });
@@ -17111,6 +17112,9 @@ class MethodDef {
17111
17112
  const modify = (0, combi_1.alt)((0, combi_1.seq)("FOR ACTION", expressions_1.TypeName, (0, combi_1.optPrio)(result)), (0, combi_1.seq)("FOR CREATE", (0, combi_1.alt)(expressions_1.TypeName, expressions_1.EntityAssociation)), (0, combi_1.seq)("FOR DELETE", expressions_1.TypeName), (0, combi_1.seq)("FOR UPDATE", expressions_1.TypeName));
17112
17113
  const forRead = (0, combi_1.seq)("FOR READ", (0, combi_1.alt)(expressions_1.TypeName, expressions_1.EntityAssociation), (0, combi_1.optPrio)(full), result, (0, combi_1.optPrio)(link));
17113
17114
  const forfunction = (0, combi_1.seq)("FOR FUNCTION", expressions_1.TypeName, result);
17115
+ const entityEventReference = (0, combi_1.seq)("REFERENCE", (0, combi_1.tok)(tokens_1.ParenLeft), expressions_1.MethodParamName, (0, combi_1.tok)(tokens_1.ParenRightW));
17116
+ const entityEventParameter = (0, combi_1.seq)((0, combi_1.altPrio)(entityEventReference, expressions_1.MethodParamName), "FOR", expressions_1.TypeName);
17117
+ const entityEvent = (0, combi_1.seq)((0, combi_1.optPrio)("FINAL"), "FOR ENTITY EVENT", (0, combi_1.optPrio)("IMPORTING"), (0, combi_1.plus)(entityEventParameter));
17114
17118
  const behavior = (0, combi_1.altPrio)("DDL OBJECT OPTIONS CDS SESSION CLIENT REQUIRED", // todo, this is only from version something
17115
17119
  (0, combi_1.seq)("TABLE FUNCTION", expressions_1.NamespaceSimpleName), // todo, this is only from version something
17116
17120
  (0, combi_1.seq)("VALIDATE ON SAVE IMPORTING", expressions_1.MethodParamName, "FOR", expressions_1.TypeName), (0, combi_1.seq)("MODIFY", (0, combi_1.opt)("IMPORTING"), (0, combi_1.plus)((0, combi_1.seq)(expressions_1.MethodParamName, modify))), (0, combi_1.seq)("PRECHECK IMPORTING", expressions_1.MethodParamName, modify), (0, combi_1.seq)("DETERMINATION", expressions_1.TypeName, "IMPORTING", expressions_1.MethodParamName, "FOR", expressions_1.TypeName), (0, combi_1.seq)("VALIDATION", expressions_1.TypeName, "IMPORTING", expressions_1.MethodParamName, "FOR", expressions_1.TypeName), (0, combi_1.seq)("NUMBERING IMPORTING", expressions_1.MethodParamName, modify), (0, combi_1.seq)("READ IMPORTING", expressions_1.MethodParamName, (0, combi_1.altPrio)(forRead, forfunction)), (0, combi_1.seq)("FEATURES IMPORTING", expressions_1.MethodParamName, "REQUEST", expressions_1.NamespaceSimpleName, "FOR", expressions_1.NamespaceSimpleName, result), (0, combi_1.seq)("BEHAVIOR IMPORTING", expressions_1.MethodParamName, "FOR CREATE", expressions_1.TypeName, expressions_1.MethodParamName, "FOR UPDATE", expressions_1.TypeName, expressions_1.MethodParamName, "FOR DELETE", expressions_1.TypeName), (0, combi_1.seq)("BEHAVIOR IMPORTING", expressions_1.MethodParamName, "FOR READ", expressions_1.TypeName, result), (0, combi_1.seq)("BEHAVIOR IMPORTING", expressions_1.MethodParamName, "FOR UPDATE", expressions_1.TypeName), (0, combi_1.seq)((0, combi_1.alt)("BEHAVIOR", "LOCK"), "IMPORTING", expressions_1.MethodParamName, "FOR LOCK", expressions_1.TypeName), (0, combi_1.seq)("DETERMINE", (0, combi_1.alt)("ON MODIFY", "ON SAVE"), "IMPORTING", expressions_1.MethodParamName, "FOR", expressions_1.TypeName), (0, combi_1.seq)("GLOBAL AUTHORIZATION IMPORTING REQUEST", expressions_1.MethodParamName, "FOR", expressions_1.TypeName, result), (0, combi_1.seq)("GLOBAL FEATURES IMPORTING REQUEST", expressions_1.MethodParamName, "FOR", expressions_1.TypeName, result), (0, combi_1.seq)((0, combi_1.seq)((0, combi_1.opt)("INSTANCE"), "AUTHORIZATION IMPORTING"), expressions_1.MethodParamName, "REQUEST", expressions_1.MethodParamName, "FOR", expressions_1.TypeName, result), (0, combi_1.seq)("INSTANCE FEATURES IMPORTING", expressions_1.MethodParamName, "REQUEST", expressions_1.MethodParamName, "FOR", expressions_1.TypeName, result));
@@ -17118,7 +17122,9 @@ class MethodDef {
17118
17122
  // AMDP OPTIONS clause blocked in KeyUser
17119
17123
  const amdp = (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.seq)("AMDP OPTIONS", (0, combi_1.optPrio)("READ-ONLY"), "CDS SESSION CLIENT", (0, combi_1.alt)("CURRENT", "DEPENDENT"), (0, combi_1.optPrio)(expressions_1.MethodDefImporting), (0, combi_1.optPrio)(expressions_1.MethodDefExporting), (0, combi_1.optPrio)(expressions_1.MethodDefRaising)));
17120
17124
  // FOR DDL OBJECT / FOR TABLE FUNCTION / FOR SCALAR FUNCTION blocked in KeyUser
17121
- const ret = (0, combi_1.seq)((0, combi_1.altPrio)("CLASS-METHODS", "METHODS"), expressions_1.MethodName, (0, combi_1.alt)((0, combi_1.seq)((0, combi_1.optPrio)(expressions_1.Abstract), (0, combi_1.optPrio)(def), expressions_1.EventHandler), parameters, testing, (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.seq)("FOR", behavior)), amdp, "NOT AT END OF MODE", (0, combi_1.optPrio)(expressions_1.Redefinition)));
17125
+ const regular = (0, combi_1.seq)((0, combi_1.altPrio)("CLASS-METHODS", "METHODS"), expressions_1.MethodName, (0, combi_1.alt)((0, combi_1.seq)((0, combi_1.optPrio)(expressions_1.Abstract), (0, combi_1.optPrio)(def), expressions_1.EventHandler), parameters, testing, (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.seq)("FOR", behavior)), amdp, "NOT AT END OF MODE", (0, combi_1.optPrio)(expressions_1.Redefinition)));
17126
+ // RAP event handlers are instance methods; CLASS-METHODS is not allowed.
17127
+ const ret = (0, combi_1.alt)((0, combi_1.seq)("METHODS", expressions_1.MethodName, (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, entityEvent)), regular);
17122
17128
  return ret;
17123
17129
  }
17124
17130
  }
@@ -28021,6 +28027,12 @@ class TypeUtils {
28021
28027
  if (source2 instanceof basic_1.HexType && this.isCalculated(node2) && source1 instanceof basic_1.IntegerType) {
28022
28028
  return false;
28023
28029
  }
28030
+ if (source1 instanceof basic_1.DateType && this.isCalculated(node2) && source2 instanceof basic_1.IntegerType) {
28031
+ return false;
28032
+ }
28033
+ if (source2 instanceof basic_1.DateType && this.isCalculated(node1) && source1 instanceof basic_1.IntegerType) {
28034
+ return false;
28035
+ }
28024
28036
  return true;
28025
28037
  }
28026
28038
  structureContainsString(structure) {
@@ -29539,6 +29551,51 @@ exports.BasicTypes = BasicTypes;
29539
29551
 
29540
29552
  /***/ },
29541
29553
 
29554
+ /***/ "./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/_check_database_fields.js"
29555
+ /*!***************************************************************************************************!*\
29556
+ !*** ./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/_check_database_fields.js ***!
29557
+ \***************************************************************************************************/
29558
+ (__unused_webpack_module, exports, __webpack_require__) {
29559
+
29560
+ "use strict";
29561
+
29562
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
29563
+ exports.checkDatabaseFields = checkDatabaseFields;
29564
+ const basic_1 = __webpack_require__(/*! ../../types/basic */ "./node_modules/@abaplint/core/build/src/abap/types/basic/index.js");
29565
+ const _syntax_input_1 = __webpack_require__(/*! ../_syntax_input */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/_syntax_input.js");
29566
+ function checkDatabaseFields(fields, dbSources, input, token) {
29567
+ if (dbSources.length > 1) {
29568
+ return;
29569
+ }
29570
+ const first = dbSources[0];
29571
+ if (first === undefined) {
29572
+ // then its voided
29573
+ return;
29574
+ }
29575
+ const type = first.parseType(input.scope.getRegistry());
29576
+ if (type instanceof basic_1.VoidType || type instanceof basic_1.UnknownType) {
29577
+ return;
29578
+ }
29579
+ if (!(type instanceof basic_1.StructureType)) {
29580
+ const message = "checkFields, expected structure, " + type.constructor.name;
29581
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, token, message));
29582
+ return;
29583
+ }
29584
+ for (const field of fields) {
29585
+ if (field === "*") {
29586
+ continue;
29587
+ }
29588
+ if (/^[A-Z_]\w*$/i.test(field) && type.getComponentByName(field) === undefined) {
29589
+ const message = `checkFields, field ${field} not found`;
29590
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, token, message));
29591
+ return;
29592
+ }
29593
+ }
29594
+ }
29595
+ //# sourceMappingURL=_check_database_fields.js.map
29596
+
29597
+ /***/ },
29598
+
29542
29599
  /***/ "./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/_check_offset_length.js"
29543
29600
  /*!*************************************************************************************************!*\
29544
29601
  !*** ./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/_check_offset_length.js ***!
@@ -30018,6 +30075,7 @@ const source_1 = __webpack_require__(/*! ./source */ "./node_modules/@abaplint/c
30018
30075
  const method_call_chain_1 = __webpack_require__(/*! ./method_call_chain */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/method_call_chain.js");
30019
30076
  const source_field_symbol_1 = __webpack_require__(/*! ./source_field_symbol */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/source_field_symbol.js");
30020
30077
  const _syntax_input_1 = __webpack_require__(/*! ../_syntax_input */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/_syntax_input.js");
30078
+ const basic_1 = __webpack_require__(/*! ../../types/basic */ "./node_modules/@abaplint/core/build/src/abap/types/basic/index.js");
30021
30079
  const _type_utils_1 = __webpack_require__(/*! ../_type_utils */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/_type_utils.js");
30022
30080
  class Compare {
30023
30081
  static runSyntax(node, input) {
@@ -30035,7 +30093,15 @@ class Compare {
30035
30093
  if (node.findDirectExpression(Expressions.CompareOperator)
30036
30094
  && new _type_utils_1.TypeUtils(input.scope).isCompareable(sourceTypes[0], sourceTypes[1], sources[0], sources[1]) === false
30037
30095
  && sourceTypes.length === 2) {
30038
- const message = "Incompatible types for comparison";
30096
+ let message = "Incompatible types for comparison";
30097
+ if ((sourceTypes[0] instanceof basic_1.DateType
30098
+ && sourceTypes[1] instanceof basic_1.IntegerType
30099
+ && sources[1].findFirstExpression(Expressions.ArithOperator))
30100
+ || (sourceTypes[1] instanceof basic_1.DateType
30101
+ && sourceTypes[0] instanceof basic_1.IntegerType
30102
+ && sources[0].findFirstExpression(Expressions.ArithOperator))) {
30103
+ message = "Date cannot be compared with arithmetic result of type Integer";
30104
+ }
30039
30105
  input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
30040
30106
  }
30041
30107
  }
@@ -34179,6 +34245,7 @@ const dynamic_1 = __webpack_require__(/*! ./dynamic */ "./node_modules/@abaplint
34179
34245
  const _reference_1 = __webpack_require__(/*! ../_reference */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/_reference.js");
34180
34246
  const _syntax_input_1 = __webpack_require__(/*! ../_syntax_input */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/_syntax_input.js");
34181
34247
  const version_1 = __webpack_require__(/*! ../../../version */ "./node_modules/@abaplint/core/build/src/version.js");
34248
+ const _check_database_fields_1 = __webpack_require__(/*! ./_check_database_fields */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/_check_database_fields.js");
34182
34249
  const isSimple = /^\w+$/;
34183
34250
  class Select {
34184
34251
  static runSyntax(node, input, skipImplicitInto = false, selectLoop = false) {
@@ -34203,8 +34270,8 @@ class Select {
34203
34270
  input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
34204
34271
  return;
34205
34272
  }
34206
- this.checkFields(fields, dbSources, input, node);
34207
- const intoExpression = this.handleInto(node, input, fields, dbSources);
34273
+ (0, _check_database_fields_1.checkDatabaseFields)(fields.map(field => field.code), dbSources, input, node.getFirstToken());
34274
+ const intoExpression = this.handleInto(node, input, fields, dbSources, from);
34208
34275
  const fae = node.findDirectExpression(Expressions.SQLForAllEntries);
34209
34276
  if (fae) {
34210
34277
  input.scope.push(_scope_type_1.ScopeType.OpenSQL, "SELECT", token.getStart(), input.filename);
@@ -34365,12 +34432,12 @@ class Select {
34365
34432
  input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
34366
34433
  }
34367
34434
  }
34368
- static handleInto(node, input, fields, dbSources) {
34435
+ static handleInto(node, input, fields, dbSources, from) {
34369
34436
  const intoTable = node.findDirectExpression(Expressions.SQLIntoTable);
34370
34437
  if (intoTable) {
34371
34438
  const inline = intoTable.findFirstExpression(Expressions.InlineData);
34372
34439
  if (inline) {
34373
- inline_data_1.InlineData.runSyntax(inline, input, this.buildTableType(fields, dbSources, input.scope));
34440
+ inline_data_1.InlineData.runSyntax(inline, input, this.buildTableType(fields, dbSources, input.scope, from));
34374
34441
  }
34375
34442
  return intoTable;
34376
34443
  }
@@ -34430,35 +34497,6 @@ class Select {
34430
34497
  }
34431
34498
  return undefined;
34432
34499
  }
34433
- static checkFields(fields, dbSources, input, node) {
34434
- if (dbSources.length > 1) {
34435
- return;
34436
- }
34437
- const first = dbSources[0];
34438
- if (first === undefined) {
34439
- // then its voided
34440
- return;
34441
- }
34442
- const type = first.parseType(input.scope.getRegistry());
34443
- if (type instanceof basic_1.VoidType || type instanceof basic_1.UnknownType) {
34444
- return;
34445
- }
34446
- if (!(type instanceof basic_1.StructureType)) {
34447
- const message = "checkFields, expected structure, " + type.constructor.name;
34448
- input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
34449
- return;
34450
- }
34451
- for (const field of fields) {
34452
- if (field.code === "*") {
34453
- continue;
34454
- }
34455
- if (isSimple.test(field.code) && type.getComponentByName(field.code) === undefined) {
34456
- const message = `checkFields, field ${field.code} not found`;
34457
- input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
34458
- return;
34459
- }
34460
- }
34461
- }
34462
34500
  static countResultType(scope) {
34463
34501
  if ((0, version_1.releaseAtLeast)(scope.getRelease(), version_1.Release.v750)
34464
34502
  || scope.getOpenABAP()
@@ -34547,11 +34585,36 @@ class Select {
34547
34585
  return basic_1.VoidType.get("SELECT_todo13");
34548
34586
  }
34549
34587
  }
34550
- static buildTableType(fields, dbSources, scope) {
34551
- if (dbSources.length !== 1) {
34588
+ static buildTableType(fields, dbSources, scope, from) {
34589
+ var _a;
34590
+ const tableOptions = { withHeader: false, keyType: basic_1.TableKeyType.empty };
34591
+ if (dbSources.length > 1) {
34592
+ const sourceInfos = this.buildDatabaseSourceInfos(from, dbSources);
34593
+ if (fields.length === 1 && fields[0].code === "*") {
34594
+ const components = [];
34595
+ for (const info of sourceInfos) {
34596
+ const type = (_a = info.source) === null || _a === void 0 ? void 0 : _a.parseType(scope.getRegistry());
34597
+ if (!(type instanceof basic_1.StructureType)) {
34598
+ return basic_1.VoidType.get("SELECT_todo3");
34599
+ }
34600
+ components.push({ name: info.alias || info.name, type });
34601
+ }
34602
+ return new basic_1.TableType(new basic_1.StructureType(components), tableOptions, undefined);
34603
+ }
34604
+ const components = [];
34605
+ for (const field of fields) {
34606
+ const type = this.findFieldType(field.code, sourceInfos, scope);
34607
+ if (type === undefined) {
34608
+ return basic_1.VoidType.get("SELECT_todo3");
34609
+ }
34610
+ const name = field.as || field.code.split("~").pop();
34611
+ components.push({ name, type });
34612
+ }
34613
+ return new basic_1.TableType(new basic_1.StructureType(components), tableOptions, undefined);
34614
+ }
34615
+ else if (dbSources.length !== 1) {
34552
34616
  return basic_1.VoidType.get("SELECT_todo3");
34553
34617
  }
34554
- const tableOptions = { withHeader: false, keyType: basic_1.TableKeyType.empty };
34555
34618
  if (dbSources[0] === undefined) {
34556
34619
  // then its a voided table
34557
34620
  return new basic_1.TableType(basic_1.VoidType.get("SELECT_todo4"), tableOptions, undefined);
@@ -34577,6 +34640,39 @@ class Select {
34577
34640
  }
34578
34641
  return basic_1.VoidType.get("SELECT_todo7");
34579
34642
  }
34643
+ static buildDatabaseSourceInfos(from, dbSources) {
34644
+ const fromSources = from.findAllExpressions(Expressions.SQLFromSource);
34645
+ return dbSources.map((source, index) => {
34646
+ var _a, _b;
34647
+ const fromSource = fromSources[index];
34648
+ const name = ((_a = fromSource === null || fromSource === void 0 ? void 0 : fromSource.findFirstExpression(Expressions.DatabaseTable)) === null || _a === void 0 ? void 0 : _a.getFirstToken().getStr().replace(/^\*/, "").toUpperCase()) || "";
34649
+ const alias = ((_b = fromSource === null || fromSource === void 0 ? void 0 : fromSource.findDirectExpression(Expressions.SQLAsName)) === null || _b === void 0 ? void 0 : _b.concatTokens().toUpperCase()) || "";
34650
+ return { source, name, alias };
34651
+ });
34652
+ }
34653
+ static findFieldType(code, sourceInfos, scope) {
34654
+ var _a;
34655
+ const separator = code.indexOf("~");
34656
+ const qualifier = separator >= 0 ? code.substring(0, separator) : undefined;
34657
+ const fieldName = separator >= 0 ? code.substring(separator + 1) : code;
34658
+ const candidates = qualifier === undefined
34659
+ ? sourceInfos
34660
+ : sourceInfos.filter(info => info.alias === qualifier || info.name === qualifier);
34661
+ for (const candidate of candidates) {
34662
+ let type = (_a = candidate.source) === null || _a === void 0 ? void 0 : _a.parseType(scope.getRegistry());
34663
+ for (const component of fieldName.split("-")) {
34664
+ if (!(type instanceof basic_1.StructureType)) {
34665
+ type = undefined;
34666
+ break;
34667
+ }
34668
+ type = type.getComponentByName(component);
34669
+ }
34670
+ if (type) {
34671
+ return type;
34672
+ }
34673
+ }
34674
+ return undefined;
34675
+ }
34580
34676
  static findFields(node, input) {
34581
34677
  var _a, _b;
34582
34678
  let expr = undefined;
@@ -34590,7 +34686,7 @@ class Select {
34590
34686
  let code = field.concatTokens().toUpperCase();
34591
34687
  const as = ((_b = field.findDirectExpression(Expressions.SQLAsName)) === null || _b === void 0 ? void 0 : _b.concatTokens()) || "";
34592
34688
  if (as !== "") {
34593
- code = code.replace(" AS " + as, "");
34689
+ code = code.replace(" AS " + as.toUpperCase(), "");
34594
34690
  }
34595
34691
  ret.push({ code, as, expression: field });
34596
34692
  }
@@ -36346,6 +36442,7 @@ var __importStar = (this && this.__importStar) || (function () {
36346
36442
  })();
36347
36443
  Object.defineProperty(exports, "__esModule", ({ value: true }));
36348
36444
  exports.ValueBody = void 0;
36445
+ const nodes_1 = __webpack_require__(/*! ../../nodes */ "./node_modules/@abaplint/core/build/src/abap/nodes/index.js");
36349
36446
  const Expressions = __importStar(__webpack_require__(/*! ../../2_statements/expressions */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js"));
36350
36447
  const for_1 = __webpack_require__(/*! ./for */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/for.js");
36351
36448
  const source_1 = __webpack_require__(/*! ./source */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/source.js");
@@ -36355,7 +36452,7 @@ const basic_1 = __webpack_require__(/*! ../../types/basic */ "./node_modules/@ab
36355
36452
  const _syntax_input_1 = __webpack_require__(/*! ../_syntax_input */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/_syntax_input.js");
36356
36453
  class ValueBody {
36357
36454
  static runSyntax(node, input, targetType) {
36358
- var _a, _b;
36455
+ var _a, _b, _c;
36359
36456
  if (node === undefined) {
36360
36457
  return targetType;
36361
36458
  }
@@ -36372,26 +36469,45 @@ class ValueBody {
36372
36469
  }
36373
36470
  }
36374
36471
  const fields = new Set();
36375
- for (const s of node.findDirectExpressions(Expressions.FieldAssignment)) {
36376
- field_assignment_1.FieldAssignment.runSyntax(s, input, targetType);
36377
- if (node.findDirectExpression(Expressions.ValueBodyLine) === undefined) {
36378
- // todo: refine, still needs to be checked when there are table lines
36379
- const fieldname = (_a = s.findDirectExpression(Expressions.FieldSub)) === null || _a === void 0 ? void 0 : _a.concatTokens().toUpperCase();
36472
+ const hasTableLines = node.findDirectExpression(Expressions.ValueBodyLine) !== undefined;
36473
+ for (const child of node.getChildren()) {
36474
+ if (!(child instanceof nodes_1.ExpressionNode)) {
36475
+ continue;
36476
+ }
36477
+ else if (child.get() instanceof Expressions.FieldAssignment) {
36478
+ const fieldname = (_a = child.findDirectExpression(Expressions.FieldSub)) === null || _a === void 0 ? void 0 : _a.concatTokens().toUpperCase();
36479
+ if (fieldname && hasTableLines === false && fields.has(fieldname)) {
36480
+ const message = "Duplicate field assignment";
36481
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, child.getFirstToken(), message));
36482
+ return basic_1.VoidType.get(_syntax_input_1.CheckSyntaxKey);
36483
+ }
36380
36484
  if (fieldname) {
36381
- if (fields.has(fieldname)) {
36485
+ fields.add(fieldname);
36486
+ }
36487
+ }
36488
+ else if (child.get() instanceof Expressions.ValueBodyLine) {
36489
+ const rowFields = new Set(fields);
36490
+ for (const assignment of child.findDirectExpressions(Expressions.FieldAssignment)) {
36491
+ const fieldname = (_b = assignment.findDirectExpression(Expressions.FieldSub)) === null || _b === void 0 ? void 0 : _b.concatTokens().toUpperCase();
36492
+ if (fieldname && rowFields.has(fieldname)) {
36382
36493
  const message = "Duplicate field assignment";
36383
- input.issues.push((0, _syntax_input_1.syntaxIssue)(input, s.getFirstToken(), message));
36494
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, assignment.getFirstToken(), message));
36384
36495
  return basic_1.VoidType.get(_syntax_input_1.CheckSyntaxKey);
36385
36496
  }
36386
- fields.add(fieldname);
36497
+ if (fieldname) {
36498
+ rowFields.add(fieldname);
36499
+ }
36387
36500
  }
36388
36501
  }
36389
36502
  }
36503
+ for (const s of node.findDirectExpressions(Expressions.FieldAssignment)) {
36504
+ field_assignment_1.FieldAssignment.runSyntax(s, input, targetType);
36505
+ }
36390
36506
  let type = undefined; // todo, this is only correct if there is a single source in the body
36391
36507
  for (const s of node.findDirectExpressions(Expressions.Source)) {
36392
36508
  type = source_1.Source.runSyntax(s, input, type);
36393
36509
  }
36394
- for (const s of ((_b = node.findDirectExpression(Expressions.ValueBase)) === null || _b === void 0 ? void 0 : _b.findDirectExpressions(Expressions.Source)) || []) {
36510
+ for (const s of ((_c = node.findDirectExpression(Expressions.ValueBase)) === null || _c === void 0 ? void 0 : _c.findDirectExpressions(Expressions.Source)) || []) {
36395
36511
  type = source_1.Source.runSyntax(s, input, type);
36396
36512
  }
36397
36513
  for (const foo of node.findDirectExpressions(Expressions.ValueBodyLine)) {
@@ -38067,7 +38183,12 @@ const _syntax_input_1 = __webpack_require__(/*! ../_syntax_input */ "./node_modu
38067
38183
  const _type_utils_1 = __webpack_require__(/*! ../_type_utils */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/_type_utils.js");
38068
38184
  class Catch {
38069
38185
  runSyntax(node, input) {
38070
- var _a;
38186
+ var _a, _b, _c;
38187
+ const target = node.findDirectExpression(Expressions.Target);
38188
+ const inlineTarget = (_b = (_a = target === null || target === void 0 ? void 0 : target.findDirectExpression(Expressions.InlineData)) === null || _a === void 0 ? void 0 : _a.findFirstExpression(Expressions.TargetField)) === null || _b === void 0 ? void 0 : _b.getFirstToken();
38189
+ if (inlineTarget && inlineTarget.getStr().length > 30) {
38190
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, inlineTarget, "Inline exception name longer than 30 characters"));
38191
+ }
38071
38192
  const names = new Set();
38072
38193
  for (const c of node.findDirectExpressions(Expressions.ClassName)) {
38073
38194
  const token = c.getFirstToken();
@@ -38091,9 +38212,8 @@ class Catch {
38091
38212
  }
38092
38213
  names.add(className);
38093
38214
  }
38094
- const target = node.findDirectExpression(Expressions.Target);
38095
38215
  if (target === null || target === void 0 ? void 0 : target.findDirectExpression(Expressions.InlineData)) {
38096
- const token = (_a = target.findFirstExpression(Expressions.TargetField)) === null || _a === void 0 ? void 0 : _a.getFirstToken();
38216
+ const token = (_c = target.findFirstExpression(Expressions.TargetField)) === null || _c === void 0 ? void 0 : _c.getFirstToken();
38097
38217
  if (token) {
38098
38218
  const classNames = Array.from(names);
38099
38219
  const unknownClass = classNames.find(name => input.scope.findClassDefinition(name) === undefined);
@@ -39807,6 +39927,7 @@ const Expressions = __importStar(__webpack_require__(/*! ../../2_statements/expr
39807
39927
  const source_1 = __webpack_require__(/*! ../expressions/source */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/source.js");
39808
39928
  const dynamic_1 = __webpack_require__(/*! ../expressions/dynamic */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/dynamic.js");
39809
39929
  const database_table_1 = __webpack_require__(/*! ../expressions/database_table */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/database_table.js");
39930
+ const _check_database_fields_1 = __webpack_require__(/*! ../expressions/_check_database_fields */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/_check_database_fields.js");
39810
39931
  class DeleteDatabase {
39811
39932
  runSyntax(node, input) {
39812
39933
  for (const s of node.findAllExpressions(Expressions.Source)) {
@@ -39820,7 +39941,14 @@ class DeleteDatabase {
39820
39941
  }
39821
39942
  const dbtab = node.findFirstExpression(Expressions.DatabaseTable);
39822
39943
  if (dbtab !== undefined) {
39823
- database_table_1.DatabaseTable.runSyntax(dbtab, input);
39944
+ const dbSource = database_table_1.DatabaseTable.runSyntax(dbtab, input);
39945
+ const fields = node.findAllExpressions(Expressions.SQLCompare)
39946
+ .map(compare => { var _a; return (_a = compare.findDirectExpression(Expressions.SQLFieldName)) === null || _a === void 0 ? void 0 : _a.concatTokens().toUpperCase(); })
39947
+ .filter(field => field !== undefined);
39948
+ for (const orderBy of node.findAllExpressions(Expressions.SQLOrderBy)) {
39949
+ fields.push(...orderBy.findAllExpressions(Expressions.SQLFieldName).map(field => field.concatTokens().toUpperCase()));
39950
+ }
39951
+ (0, _check_database_fields_1.checkDatabaseFields)(fields, [dbSource], input, node.getFirstToken());
39824
39952
  }
39825
39953
  }
39826
39954
  }
@@ -46765,11 +46893,19 @@ const _typed_identifier_1 = __webpack_require__(/*! ../../types/_typed_identifie
46765
46893
  const identifier_1 = __webpack_require__(/*! ../../1_lexer/tokens/identifier */ "./node_modules/@abaplint/core/build/src/abap/1_lexer/tokens/identifier.js");
46766
46894
  const database_table_1 = __webpack_require__(/*! ../expressions/database_table */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/database_table.js");
46767
46895
  const dynamic_1 = __webpack_require__(/*! ../expressions/dynamic */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/dynamic.js");
46896
+ const _check_database_fields_1 = __webpack_require__(/*! ../expressions/_check_database_fields */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/_check_database_fields.js");
46768
46897
  class UpdateDatabase {
46769
46898
  runSyntax(node, input) {
46770
46899
  const dbtab = node.findFirstExpression(Expressions.DatabaseTable);
46771
46900
  if (dbtab !== undefined) {
46772
- database_table_1.DatabaseTable.runSyntax(dbtab, input);
46901
+ const dbSource = database_table_1.DatabaseTable.runSyntax(dbtab, input);
46902
+ const fields = node.findAllExpressions(Expressions.SQLFieldAndValue)
46903
+ .flatMap(fieldAndValue => fieldAndValue.findDirectExpressions(Expressions.SQLFieldName))
46904
+ .map(field => field.concatTokens().toUpperCase());
46905
+ fields.push(...node.findAllExpressions(Expressions.SQLCompare)
46906
+ .map(compare => { var _a; return (_a = compare.findDirectExpression(Expressions.SQLFieldName)) === null || _a === void 0 ? void 0 : _a.concatTokens().toUpperCase(); })
46907
+ .filter(field => field !== undefined));
46908
+ (0, _check_database_fields_1.checkDatabaseFields)(fields, [dbSource], input, node.getFirstToken());
46773
46909
  }
46774
46910
  const tableName = node.findDirectExpression(Expressions.DatabaseTable);
46775
46911
  const tokenName = tableName === null || tableName === void 0 ? void 0 : tableName.getFirstToken();
@@ -48043,6 +48179,7 @@ const include_type_1 = __webpack_require__(/*! ../statements/include_type */ "./
48043
48179
  const type_1 = __webpack_require__(/*! ../statements/type */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/statements/type.js");
48044
48180
  const Basic = __importStar(__webpack_require__(/*! ../../types/basic */ "./node_modules/@abaplint/core/build/src/abap/types/basic/index.js"));
48045
48181
  const _scope_type_1 = __webpack_require__(/*! ../_scope_type */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/_scope_type.js");
48182
+ const _syntax_input_1 = __webpack_require__(/*! ../_syntax_input */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/_syntax_input.js");
48046
48183
  class Types {
48047
48184
  runSyntax(node, input, qualifiedNamePrefix) {
48048
48185
  const name = node.findFirstExpression(Expressions.NamespaceSimpleName).getFirstToken();
@@ -48057,6 +48194,9 @@ class Types {
48057
48194
  if (ctyp instanceof Statements.Type) {
48058
48195
  const found = new type_1.Type().runSyntax(c, input, qualifiedNamePrefix + name.getStr() + "-");
48059
48196
  if (found) {
48197
+ if (found.getName().length > 30) {
48198
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, found.getToken(), "Structure field name longer than 30 characters"));
48199
+ }
48060
48200
  components.push({ name: found.getName(), type: found.getType() });
48061
48201
  }
48062
48202
  }
@@ -48073,6 +48213,9 @@ class Types {
48073
48213
  else if (c instanceof nodes_1.StructureNode && ctyp instanceof Structures.Types) {
48074
48214
  const found = new Types().runSyntax(c, input, qualifiedNamePrefix + name.getStr() + "-");
48075
48215
  if (found) {
48216
+ if (found.getName().length > 30) {
48217
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, found.getToken(), "Structure field name longer than 30 characters"));
48218
+ }
48076
48219
  components.push({ name: found.getName(), type: found.getType() });
48077
48220
  }
48078
48221
  }
@@ -52173,7 +52316,7 @@ class ClassDefinition extends _identifier_1.Identifier {
52173
52316
  this.checkEventNameConflicts(input);
52174
52317
  this.checkClassNameLength(input);
52175
52318
  this.checkMethodNameLength(input);
52176
- this.checkClassConstructorStatic(input);
52319
+ this.checkClassConstructor(input);
52177
52320
  }
52178
52321
  getFriends() {
52179
52322
  return this.friends;
@@ -52243,11 +52386,17 @@ class ClassDefinition extends _identifier_1.Identifier {
52243
52386
  }
52244
52387
  }
52245
52388
  }
52246
- checkClassConstructorStatic(input) {
52389
+ checkClassConstructor(input) {
52247
52390
  for (const m of this.methodDefs.getAll()) {
52248
- if (m.getName().toUpperCase() === "CLASS_CONSTRUCTOR" && m.isStatic() === false) {
52391
+ if (m.getName().toUpperCase() !== "CLASS_CONSTRUCTOR") {
52392
+ continue;
52393
+ }
52394
+ if (m.isStatic() === false) {
52249
52395
  input.issues.push((0, _syntax_input_1.syntaxIssue)(input, m.getToken(), "CLASS_CONSTRUCTOR must be static"));
52250
52396
  }
52397
+ else if (m.getVisibility() !== visibility_1.Visibility.Public) {
52398
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, m.getToken(), "CLASS_CONSTRUCTOR must be declared in the public section"));
52399
+ }
52251
52400
  }
52252
52401
  }
52253
52402
  checkInterfaceVisibility(input, node) {
@@ -53412,6 +53561,7 @@ const _object_oriented_1 = __webpack_require__(/*! ../5_syntax/_object_oriented
53412
53561
  const _reference_1 = __webpack_require__(/*! ../5_syntax/_reference */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/_reference.js");
53413
53562
  const identifier_1 = __webpack_require__(/*! ../1_lexer/tokens/identifier */ "./node_modules/@abaplint/core/build/src/abap/1_lexer/tokens/identifier.js");
53414
53563
  const _scope_type_1 = __webpack_require__(/*! ../5_syntax/_scope_type */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/_scope_type.js");
53564
+ const _syntax_input_1 = __webpack_require__(/*! ../5_syntax/_syntax_input */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/_syntax_input.js");
53415
53565
  // todo:
53416
53566
  // this.exceptions = [];
53417
53567
  // also consider RAISING vs EXCEPTIONS
@@ -53434,6 +53584,7 @@ class MethodParameters {
53434
53584
  input.scope.push(_scope_type_1.ScopeType.MethodDefinition, "method definition", node.getStart(), input.filename);
53435
53585
  try {
53436
53586
  this.parse(node, input, parentName, abstractMethod);
53587
+ this.checkNameLengths(input);
53437
53588
  this.checkDuplicateNames();
53438
53589
  }
53439
53590
  finally {
@@ -53585,6 +53736,13 @@ class MethodParameters {
53585
53736
  names.add(name);
53586
53737
  }
53587
53738
  }
53739
+ checkNameLengths(input) {
53740
+ for (const parameter of this.getAll()) {
53741
+ if (parameter.getName().length > 30) {
53742
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, parameter.getToken(), "Method parameter name longer than 30 characters"));
53743
+ }
53744
+ }
53745
+ }
53588
53746
  workaroundRAP(node, input, parentName) {
53589
53747
  const resultName = node.findExpressionAfterToken("RESULT");
53590
53748
  const concat = node.concatTokens().toUpperCase();
@@ -62875,6 +63033,7 @@ const _abstract_object_1 = __webpack_require__(/*! ./_abstract_object */ "./node
62875
63033
  const ddic_1 = __webpack_require__(/*! ../ddic */ "./node_modules/@abaplint/core/build/src/ddic.js");
62876
63034
  const Types = __importStar(__webpack_require__(/*! ../abap/types/basic */ "./node_modules/@abaplint/core/build/src/abap/types/basic/index.js"));
62877
63035
  const xml_utils_1 = __webpack_require__(/*! ../xml_utils */ "./node_modules/@abaplint/core/build/src/xml_utils.js");
63036
+ const domain_1 = __webpack_require__(/*! ./domain */ "./node_modules/@abaplint/core/build/src/objects/domain.js");
62878
63037
  class DataElement extends _abstract_object_1.AbstractObject {
62879
63038
  constructor() {
62880
63039
  super(...arguments);
@@ -62905,6 +63064,22 @@ class DataElement extends _abstract_object_1.AbstractObject {
62905
63064
  this.parse();
62906
63065
  return (_a = this.parsedXML) === null || _a === void 0 ? void 0 : _a.domname;
62907
63066
  }
63067
+ /** parseType() cannot distinguish DEC, CURR, and QUAN because they all become PackedType.
63068
+ * Return the original DDIC datatype instead, resolving domain-backed data elements when possible. */
63069
+ getDataType(reg) {
63070
+ var _a, _b;
63071
+ this.parse();
63072
+ if ((_a = this.parsedXML) === null || _a === void 0 ? void 0 : _a.datatype) {
63073
+ return this.parsedXML.datatype;
63074
+ }
63075
+ if (reg && ((_b = this.parsedXML) === null || _b === void 0 ? void 0 : _b.refkind) === "D" && this.parsedXML.domname) {
63076
+ const domain = reg.getObject("DOMA", this.parsedXML.domname);
63077
+ if (domain instanceof domain_1.Domain) {
63078
+ return domain.getDataType();
63079
+ }
63080
+ }
63081
+ return undefined;
63082
+ }
62908
63083
  getTexts() {
62909
63084
  var _a;
62910
63085
  this.parse();
@@ -63188,6 +63363,11 @@ class Domain extends _abstract_object_1.AbstractObject {
63188
63363
  var _a;
63189
63364
  return (_a = this.parsedXML) === null || _a === void 0 ? void 0 : _a.conversionExit;
63190
63365
  }
63366
+ getDataType() {
63367
+ var _a;
63368
+ this.parse();
63369
+ return (_a = this.parsedXML) === null || _a === void 0 ? void 0 : _a.datatype;
63370
+ }
63191
63371
  getAllowedNaming() {
63192
63372
  return {
63193
63373
  maxLength: 30,
@@ -70119,7 +70299,7 @@ class Registry {
70119
70299
  }
70120
70300
  static abaplintVersion() {
70121
70301
  // magic, see build script "version.js"
70122
- return "2.120.23";
70302
+ return "2.120.28";
70123
70303
  }
70124
70304
  getDDICReferences() {
70125
70305
  return this.ddicReferences;
@@ -72783,6 +72963,315 @@ exports.CDSAssociationName = CDSAssociationName;
72783
72963
 
72784
72964
  /***/ },
72785
72965
 
72966
+ /***/ "./node_modules/@abaplint/core/build/src/rules/cds_check_syntax.js"
72967
+ /*!*************************************************************************!*\
72968
+ !*** ./node_modules/@abaplint/core/build/src/rules/cds_check_syntax.js ***!
72969
+ \*************************************************************************/
72970
+ (__unused_webpack_module, exports, __webpack_require__) {
72971
+
72972
+ "use strict";
72973
+
72974
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
72975
+ exports.CDSCheckSyntax = exports.CDSCheckSyntaxConf = void 0;
72976
+ const nodes_1 = __webpack_require__(/*! ../abap/nodes */ "./node_modules/@abaplint/core/build/src/abap/nodes/index.js");
72977
+ const basic_1 = __webpack_require__(/*! ../abap/types/basic */ "./node_modules/@abaplint/core/build/src/abap/types/basic/index.js");
72978
+ const expressions_1 = __webpack_require__(/*! ../cds/expressions */ "./node_modules/@abaplint/core/build/src/cds/expressions/index.js");
72979
+ const ddic_1 = __webpack_require__(/*! ../ddic */ "./node_modules/@abaplint/core/build/src/ddic.js");
72980
+ const issue_1 = __webpack_require__(/*! ../issue */ "./node_modules/@abaplint/core/build/src/issue.js");
72981
+ const objects_1 = __webpack_require__(/*! ../objects */ "./node_modules/@abaplint/core/build/src/objects/index.js");
72982
+ const _basic_rule_config_1 = __webpack_require__(/*! ./_basic_rule_config */ "./node_modules/@abaplint/core/build/src/rules/_basic_rule_config.js");
72983
+ const _irule_1 = __webpack_require__(/*! ./_irule */ "./node_modules/@abaplint/core/build/src/rules/_irule.js");
72984
+ class CDSCheckSyntaxConf extends _basic_rule_config_1.BasicRuleConfig {
72985
+ }
72986
+ exports.CDSCheckSyntaxConf = CDSCheckSyntaxConf;
72987
+ const KNOWN_QUAN_DATA_ELEMENTS = ["MENGE_D"];
72988
+ const KNOWN_CURR_DATA_ELEMENTS = ["BWERT", "DZWERT"];
72989
+ class CDSCheckSyntax {
72990
+ constructor() {
72991
+ this.conf = new CDSCheckSyntaxConf();
72992
+ }
72993
+ getMetadata() {
72994
+ return {
72995
+ key: "cds_check_syntax",
72996
+ title: "CDS Check Syntax",
72997
+ shortDescription: "Checks CDS source, field, type, and semantic annotation references",
72998
+ extendedInformation: `Performs semantic checks which require other DDIC objects to be available.
72999
+
73000
+ Missing objects are only reported when their names match the configured errorNamespace.`,
73001
+ tags: [_irule_1.RuleTag.Syntax],
73002
+ };
73003
+ }
73004
+ getConfig() {
73005
+ return this.conf;
73006
+ }
73007
+ setConfig(conf) {
73008
+ this.conf = conf;
73009
+ }
73010
+ initialize(reg) {
73011
+ this.reg = reg;
73012
+ return this;
73013
+ }
73014
+ run(object) {
73015
+ if (!(object instanceof objects_1.DataDefinition)) {
73016
+ return [];
73017
+ }
73018
+ const tree = object.getTree();
73019
+ const file = object.findSourceFile();
73020
+ if (tree === undefined || file === undefined) {
73021
+ return [];
73022
+ }
73023
+ const issues = [];
73024
+ const ddic = new ddic_1.DDIC(this.reg);
73025
+ const sources = this.findSources(tree, ddic, issues, file);
73026
+ this.checkRelations(tree, ddic, issues, file);
73027
+ this.checkTypes(tree, ddic, issues, file);
73028
+ this.checkRootProjection(tree, ddic, issues, file);
73029
+ this.checkFieldAnnotations(tree, ddic, issues, file);
73030
+ this.checkFields(tree, sources, object, issues, file);
73031
+ return issues;
73032
+ }
73033
+ findSources(tree, ddic, issues, file) {
73034
+ var _a;
73035
+ const sources = [];
73036
+ for (const node of tree.findAllExpressionsRecursive(expressions_1.CDSSource)) {
73037
+ const prefixed = node.findDirectExpression(expressions_1.CDSPrefixedName);
73038
+ const entityNode = prefixed === null || prefixed === void 0 ? void 0 : prefixed.findDirectExpression(expressions_1.CDSName);
73039
+ if (entityNode === undefined) {
73040
+ continue;
73041
+ }
73042
+ const entity = this.name(entityNode);
73043
+ const asName = (_a = node.findDirectExpression(expressions_1.CDSAs)) === null || _a === void 0 ? void 0 : _a.findDirectExpression(expressions_1.CDSName);
73044
+ const bareAlias = node.findDirectExpression(expressions_1.CDSName);
73045
+ const alias = asName === undefined ? bareAlias : asName;
73046
+ const lookup = ddic.lookupTableOrView(entity);
73047
+ if (lookup.type instanceof basic_1.UnknownType && lookup.object === undefined && this.reg.inErrorNamespace(entity)) {
73048
+ issues.push(issue_1.Issue.atToken(file, entityNode.getFirstToken(), `CDS source "${entity}" not found`, this.getMetadata().key, this.conf.severity));
73049
+ }
73050
+ if (lookup.type instanceof basic_1.StructureType || lookup.type instanceof basic_1.UnknownType || lookup.type instanceof basic_1.VoidType) {
73051
+ const names = [entity.toUpperCase()];
73052
+ if (alias) {
73053
+ names.push(this.name(alias).toUpperCase());
73054
+ }
73055
+ sources.push({ entity, names, type: lookup.type });
73056
+ }
73057
+ }
73058
+ return sources;
73059
+ }
73060
+ checkRelations(tree, ddic, issues, file) {
73061
+ for (const relation of tree.findAllExpressionsRecursive(expressions_1.CDSRelation)) {
73062
+ const directTokens = relation.getDirectTokens();
73063
+ if (directTokens.length === 0) {
73064
+ continue;
73065
+ }
73066
+ const entity = directTokens.map(t => t.getStr()).join("");
73067
+ const lookup = ddic.lookupTableOrView(entity);
73068
+ if (lookup.type instanceof basic_1.UnknownType && lookup.object === undefined && this.reg.inErrorNamespace(entity)) {
73069
+ issues.push(issue_1.Issue.atToken(file, directTokens[0], `CDS source "${entity}" not found`, this.getMetadata().key, this.conf.severity));
73070
+ }
73071
+ }
73072
+ }
73073
+ checkTypes(tree, ddic, issues, file) {
73074
+ for (const typeNode of tree.findAllExpressionsRecursive(expressions_1.CDSType)) {
73075
+ const typeName = typeNode.findDirectExpressions(expressions_1.CDSName).map(n => this.name(n)).join(".");
73076
+ if (typeName === "" || typeName.toUpperCase().startsWith("ABAP.")) {
73077
+ continue;
73078
+ }
73079
+ const lookup = ddic.lookup(typeName);
73080
+ if (lookup.type instanceof basic_1.UnknownType && lookup.object === undefined && this.reg.inErrorNamespace(typeName)) {
73081
+ issues.push(issue_1.Issue.atToken(file, typeNode.getFirstToken(), `CDS type "${typeName}" not found`, this.getMetadata().key, this.conf.severity));
73082
+ }
73083
+ }
73084
+ }
73085
+ checkRootProjection(tree, ddic, issues, file) {
73086
+ var _a;
73087
+ const projection = tree.findFirstExpression(expressions_1.CDSDefineProjection);
73088
+ const rootToken = projection === null || projection === void 0 ? void 0 : projection.findDirectTokenByText("ROOT");
73089
+ if (projection === undefined || rootToken === undefined) {
73090
+ return;
73091
+ }
73092
+ const names = projection.findDirectExpressions(expressions_1.CDSName);
73093
+ const projectedEntityNode = names[1];
73094
+ if (projectedEntityNode === undefined) {
73095
+ return;
73096
+ }
73097
+ const projectedEntityName = this.name(projectedEntityNode);
73098
+ const projectedEntity = ddic.lookupTableOrView(projectedEntityName).object;
73099
+ if (projectedEntity instanceof objects_1.DataDefinition
73100
+ && ((_a = projectedEntity.getTree()) === null || _a === void 0 ? void 0 : _a.findDirectTokenByText("ROOT")) === undefined) {
73101
+ const message = `ROOT keyword not valid since ${projectedEntityName} is not a root property`;
73102
+ issues.push(issue_1.Issue.atToken(file, rootToken, message, this.getMetadata().key, this.conf.severity));
73103
+ }
73104
+ }
73105
+ checkFieldAnnotations(tree, ddic, issues, file) {
73106
+ const definition = tree.findFirstExpression(expressions_1.CDSDefineAbstract);
73107
+ if (definition === undefined) {
73108
+ return;
73109
+ }
73110
+ let definitionNameSeen = false;
73111
+ let fieldName;
73112
+ let annotations = [];
73113
+ const fields = [];
73114
+ for (const child of definition.getChildren()) {
73115
+ if (child instanceof nodes_1.TokenNode) {
73116
+ if (child.get().getStr() === ";") {
73117
+ fieldName = undefined;
73118
+ annotations = [];
73119
+ }
73120
+ continue;
73121
+ }
73122
+ else if (child.get() instanceof expressions_1.CDSAnnotation) {
73123
+ annotations.push(child);
73124
+ }
73125
+ else if (child.get() instanceof expressions_1.CDSName) {
73126
+ if (definitionNameSeen === false) {
73127
+ definitionNameSeen = true;
73128
+ annotations = [];
73129
+ }
73130
+ else {
73131
+ fieldName = child;
73132
+ }
73133
+ }
73134
+ else if (child.get() instanceof expressions_1.CDSType && fieldName !== undefined) {
73135
+ const semanticType = this.determineSemanticType(child, ddic);
73136
+ const normalizedAnnotations = annotations.map(a => a.concatTokens().replace(/\s/g, ""));
73137
+ fields.push({ name: this.name(fieldName), node: fieldName, annotations: normalizedAnnotations, semanticType });
73138
+ fieldName = undefined;
73139
+ annotations = [];
73140
+ }
73141
+ }
73142
+ const reportedCompanionFields = new Set();
73143
+ for (const field of fields) {
73144
+ if (field.semanticType === undefined) {
73145
+ continue;
73146
+ }
73147
+ const quantity = field.semanticType === "QUAN";
73148
+ const referenceAnnotation = quantity ? "@Semantics.quantity.unitOfMeasure" : "@Semantics.amount.currencyCode";
73149
+ const companionAnnotation = quantity ? "@Semantics.unitOfMeasure: true" : "@Semantics.currencyCode: true";
73150
+ const reference = this.findSemanticReference(field.annotations, field.semanticType);
73151
+ if (reference === undefined) {
73152
+ const kind = quantity ? "quantity" : "amount";
73153
+ const message = `CDS ${kind} field "${field.name}" requires ${referenceAnnotation}`;
73154
+ issues.push(issue_1.Issue.atToken(file, field.node.getFirstToken(), message, this.getMetadata().key, this.conf.severity));
73155
+ continue;
73156
+ }
73157
+ const companion = fields.find(f => f.name.toUpperCase() === reference.toUpperCase());
73158
+ if (companion === undefined) {
73159
+ const kind = quantity ? "unit" : "currency";
73160
+ const message = `CDS field "${field.name}" references missing ${kind} field "${reference}"`;
73161
+ issues.push(issue_1.Issue.atToken(file, field.node.getFirstToken(), message, this.getMetadata().key, this.conf.severity));
73162
+ continue;
73163
+ }
73164
+ const companionKey = field.semanticType + ":" + companion.name.toUpperCase();
73165
+ if (reportedCompanionFields.has(companionKey) === false
73166
+ && this.hasCompanionAnnotation(companion.annotations, field.semanticType) === false) {
73167
+ const message = `CDS field "${companion.name}" requires ${companionAnnotation}`;
73168
+ issues.push(issue_1.Issue.atToken(file, companion.node.getFirstToken(), message, this.getMetadata().key, this.conf.severity));
73169
+ reportedCompanionFields.add(companionKey);
73170
+ }
73171
+ }
73172
+ }
73173
+ determineSemanticType(typeNode, ddic) {
73174
+ var _a;
73175
+ const typeName = typeNode.findDirectExpressions(expressions_1.CDSName).map(n => this.name(n)).join(".");
73176
+ const upper = typeName.toUpperCase();
73177
+ if (upper === "ABAP.QUAN" || KNOWN_QUAN_DATA_ELEMENTS.includes(upper)) {
73178
+ return "QUAN";
73179
+ }
73180
+ else if (upper === "ABAP.CURR" || KNOWN_CURR_DATA_ELEMENTS.includes(upper)) {
73181
+ return "CURR";
73182
+ }
73183
+ const object = ddic.lookup(typeName).object;
73184
+ if (object instanceof objects_1.DataElement) {
73185
+ const dataType = (_a = object.getDataType(this.reg)) === null || _a === void 0 ? void 0 : _a.toUpperCase();
73186
+ if (dataType === "QUAN" || dataType === "CURR") {
73187
+ return dataType;
73188
+ }
73189
+ }
73190
+ return undefined;
73191
+ }
73192
+ findSemanticReference(annotations, type) {
73193
+ const expression = type === "QUAN"
73194
+ ? /(?:SEMANTICS\.QUANTITY|SEMANTICS:\{QUANTITY:\{)\.?UNITOFMEASURE:'([^']+)'/i
73195
+ : /(?:SEMANTICS\.AMOUNT|SEMANTICS:\{AMOUNT:\{)\.?CURRENCYCODE:'([^']+)'/i;
73196
+ for (const annotation of annotations) {
73197
+ const match = annotation.match(expression);
73198
+ if (match) {
73199
+ return match[1];
73200
+ }
73201
+ }
73202
+ return undefined;
73203
+ }
73204
+ hasCompanionAnnotation(annotations, type) {
73205
+ if (type === "QUAN") {
73206
+ return annotations.some(a => a.toUpperCase().includes("@SEMANTICS.UNITOFMEASURE:TRUE")
73207
+ || a.toUpperCase().includes("@SEMANTICS:{UNITOFMEASURE:TRUE"));
73208
+ }
73209
+ else {
73210
+ return annotations.some(a => a.toUpperCase().includes("@SEMANTICS.CURRENCYCODE:TRUE")
73211
+ || a.toUpperCase().includes("@SEMANTICS:{CURRENCYCODE:TRUE"));
73212
+ }
73213
+ }
73214
+ checkFields(tree, sources, object, issues, file) {
73215
+ var _a;
73216
+ const associationNames = new Set();
73217
+ for (const association of ((_a = object.getParsedData()) === null || _a === void 0 ? void 0 : _a.associations) || []) {
73218
+ associationNames.add(association.name.toUpperCase());
73219
+ if (association.as) {
73220
+ associationNames.add(association.as.toUpperCase());
73221
+ }
73222
+ }
73223
+ for (const element of tree.findAllExpressionsRecursive(expressions_1.CDSElement)) {
73224
+ const prefixed = element.findDirectExpression(expressions_1.CDSPrefixedName);
73225
+ if (prefixed === undefined) {
73226
+ continue;
73227
+ }
73228
+ const names = prefixed.findDirectExpressions(expressions_1.CDSName);
73229
+ if (names.length === 0) {
73230
+ continue;
73231
+ }
73232
+ const first = this.name(names[0]);
73233
+ if (first === "*" || first.startsWith("$") || first.startsWith("#") || associationNames.has(first.toUpperCase())) {
73234
+ continue;
73235
+ }
73236
+ if (names.length > 1) {
73237
+ const matchingSources = sources.filter(s => s.names.includes(first.toUpperCase()));
73238
+ if (matchingSources.length !== 1) {
73239
+ continue;
73240
+ }
73241
+ const source = matchingSources[0];
73242
+ const sourceType = source.type;
73243
+ if (!(sourceType instanceof basic_1.StructureType)) {
73244
+ continue;
73245
+ }
73246
+ const field = this.name(names[1]);
73247
+ if (field !== "*" && sourceType.getComponentByName(field) === undefined) {
73248
+ issues.push(issue_1.Issue.atToken(file, names[1].getFirstToken(), `CDS field "${field}" not found in "${source.entity}"`, this.getMetadata().key, this.conf.severity));
73249
+ }
73250
+ continue;
73251
+ }
73252
+ // Do not guess across joins or when a dependency is absent.
73253
+ if (sources.length !== 1) {
73254
+ continue;
73255
+ }
73256
+ const source = sources[0];
73257
+ const sourceType = source.type;
73258
+ if (!(sourceType instanceof basic_1.StructureType)) {
73259
+ continue;
73260
+ }
73261
+ if (sourceType.getComponentByName(first) === undefined) {
73262
+ issues.push(issue_1.Issue.atToken(file, names[0].getFirstToken(), `CDS field "${first}" not found in "${source.entity}"`, this.getMetadata().key, this.conf.severity));
73263
+ }
73264
+ }
73265
+ }
73266
+ name(node) {
73267
+ return node.concatTokens().replace(/ /g, "");
73268
+ }
73269
+ }
73270
+ exports.CDSCheckSyntax = CDSCheckSyntax;
73271
+ //# sourceMappingURL=cds_check_syntax.js.map
73272
+
73273
+ /***/ },
73274
+
72786
73275
  /***/ "./node_modules/@abaplint/core/build/src/rules/cds_comment_style.js"
72787
73276
  /*!**************************************************************************!*\
72788
73277
  !*** ./node_modules/@abaplint/core/build/src/rules/cds_comment_style.js ***!
@@ -83877,6 +84366,7 @@ __exportStar(__webpack_require__(/*! ./begin_single_include */ "./node_modules/@
83877
84366
  __exportStar(__webpack_require__(/*! ./call_transaction_authority_check */ "./node_modules/@abaplint/core/build/src/rules/call_transaction_authority_check.js"), exports);
83878
84367
  __exportStar(__webpack_require__(/*! ./catch_and_raise */ "./node_modules/@abaplint/core/build/src/rules/catch_and_raise.js"), exports);
83879
84368
  __exportStar(__webpack_require__(/*! ./cds_association_name */ "./node_modules/@abaplint/core/build/src/rules/cds_association_name.js"), exports);
84369
+ __exportStar(__webpack_require__(/*! ./cds_check_syntax */ "./node_modules/@abaplint/core/build/src/rules/cds_check_syntax.js"), exports);
83880
84370
  __exportStar(__webpack_require__(/*! ./cds_comment_style */ "./node_modules/@abaplint/core/build/src/rules/cds_comment_style.js"), exports);
83881
84371
  __exportStar(__webpack_require__(/*! ./cds_field_order */ "./node_modules/@abaplint/core/build/src/rules/cds_field_order.js"), exports);
83882
84372
  __exportStar(__webpack_require__(/*! ./cds_legacy_view */ "./node_modules/@abaplint/core/build/src/rules/cds_legacy_view.js"), exports);
@@ -105776,8 +106266,13 @@ class SQLCondTranspiler {
105776
106266
  sqlSource(source, traversal, filename, table) {
105777
106267
  let ret = "";
105778
106268
  const simple = source.findDirectExpression(abaplint.Expressions.SimpleSource3);
106269
+ const hostExpression = source.findDirectExpression(abaplint.Expressions.Source);
105779
106270
  const alias = source.findDirectExpression(abaplint.Expressions.SQLAliasField);
105780
- if (simple && simple.findDirectExpression(abaplint.Expressions.Constant) === undefined) {
106271
+ if (source.getFirstToken().getStr() === "@" && hostExpression) {
106272
+ const code = new source_1.SourceTranspiler(true).transpile(hostExpression, traversal).getCode();
106273
+ ret += "'\" + " + code + " + \"'";
106274
+ }
106275
+ else if (simple && simple.findDirectExpression(abaplint.Expressions.Constant) === undefined) {
105781
106276
  ret += "'\" + " + new simple_source3_1.SimpleSource3Transpiler(true).transpile(simple, traversal).getCode() + " + \"'";
105782
106277
  }
105783
106278
  else if (alias) {
@@ -109873,7 +110368,35 @@ class AuthorityCheckTranspiler {
109873
110368
  transpile(node, traversal) {
109874
110369
  const lookup = traversal.lookupClassOrInterface("KERNEL_AUTHORITY_CHECK", node.getFirstToken());
109875
110370
  const options = [];
109876
- // todo
110371
+ const object = node.findExpressionAfterToken("OBJECT");
110372
+ if (object) {
110373
+ options.push("object: " + traversal.traverse(object).getCode());
110374
+ }
110375
+ const user = node.findExpressionAfterToken("USER");
110376
+ if (user) {
110377
+ options.push("user: " + traversal.traverse(user).getCode());
110378
+ }
110379
+ const fields = [];
110380
+ const children = node.getChildren();
110381
+ for (let i = 0; i < children.length; i++) {
110382
+ if (children[i].concatTokens().toUpperCase() !== "ID") {
110383
+ continue;
110384
+ }
110385
+ const id = children[i + 1];
110386
+ const addition = children[i + 2]?.concatTokens().toUpperCase();
110387
+ if (id === undefined) {
110388
+ continue;
110389
+ }
110390
+ const field = ["id: " + traversal.traverse(id).getCode()];
110391
+ if (addition === "FIELD" && children[i + 3] !== undefined) {
110392
+ field.push("field: " + traversal.traverse(children[i + 3]).getCode());
110393
+ }
110394
+ else if (addition === "DUMMY") {
110395
+ field.push("dummy: true");
110396
+ }
110397
+ fields.push("{" + field.join(", ") + "}");
110398
+ }
110399
+ options.push("fields: [" + fields.join(", ") + "]");
109877
110400
  const call = `await ${lookup}.call({${options.join(",")}});`;
109878
110401
  return new chunk_1.Chunk().append(`if (${lookup} === undefined) throw new Error("AuthorityCheck, kernel class missing");\n${call}`, node, traversal);
109879
110402
  }
@@ -113787,6 +114310,7 @@ __exportStar(__webpack_require__(/*! ./generate_subroutine */ "./node_modules/@a
113787
114310
  __exportStar(__webpack_require__(/*! ./set_screen */ "./node_modules/@abaplint/transpiler/build/src/statements/set_screen.js"), exports);
113788
114311
  __exportStar(__webpack_require__(/*! ./set_titlebar */ "./node_modules/@abaplint/transpiler/build/src/statements/set_titlebar.js"), exports);
113789
114312
  __exportStar(__webpack_require__(/*! ./shift */ "./node_modules/@abaplint/transpiler/build/src/statements/shift.js"), exports);
114313
+ __exportStar(__webpack_require__(/*! ./skip */ "./node_modules/@abaplint/transpiler/build/src/statements/skip.js"), exports);
113790
114314
  __exportStar(__webpack_require__(/*! ./sort_dataset */ "./node_modules/@abaplint/transpiler/build/src/statements/sort_dataset.js"), exports);
113791
114315
  __exportStar(__webpack_require__(/*! ./sort */ "./node_modules/@abaplint/transpiler/build/src/statements/sort.js"), exports);
113792
114316
  __exportStar(__webpack_require__(/*! ./split */ "./node_modules/@abaplint/transpiler/build/src/statements/split.js"), exports);
@@ -116548,7 +117072,10 @@ class SelectTranspiler {
116548
117072
  else if (node.findFirstExpression(abaplint.Expressions.SQLIntoStructure)) {
116549
117073
  target = traversal.traverse(node.findFirstExpression(abaplint.Expressions.SQLIntoStructure)).getCode();
116550
117074
  }
116551
- let select = "SELECT ";
117075
+ const tokens = node.getTokens();
117076
+ const isDistinct = tokens[0]?.getStr().toUpperCase() === "SELECT"
117077
+ && tokens[1]?.getStr().toUpperCase() === "DISTINCT";
117078
+ let select = isDistinct ? "SELECT DISTINCT " : "SELECT ";
116552
117079
  const fieldList = node.findFirstExpression(abaplint.Expressions.SQLFieldList)
116553
117080
  || node.findFirstExpression(abaplint.Expressions.SQLFieldListLoop);
116554
117081
  if (fieldList === undefined) {
@@ -117207,6 +117734,68 @@ exports.ShiftTranspiler = ShiftTranspiler;
117207
117734
 
117208
117735
  /***/ },
117209
117736
 
117737
+ /***/ "./node_modules/@abaplint/transpiler/build/src/statements/skip.js"
117738
+ /*!************************************************************************!*\
117739
+ !*** ./node_modules/@abaplint/transpiler/build/src/statements/skip.js ***!
117740
+ \************************************************************************/
117741
+ (__unused_webpack_module, exports, __webpack_require__) {
117742
+
117743
+ "use strict";
117744
+
117745
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
117746
+ if (k2 === undefined) k2 = k;
117747
+ var desc = Object.getOwnPropertyDescriptor(m, k);
117748
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
117749
+ desc = { enumerable: true, get: function() { return m[k]; } };
117750
+ }
117751
+ Object.defineProperty(o, k2, desc);
117752
+ }) : (function(o, m, k, k2) {
117753
+ if (k2 === undefined) k2 = k;
117754
+ o[k2] = m[k];
117755
+ }));
117756
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
117757
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
117758
+ }) : function(o, v) {
117759
+ o["default"] = v;
117760
+ });
117761
+ var __importStar = (this && this.__importStar) || (function () {
117762
+ var ownKeys = function(o) {
117763
+ ownKeys = Object.getOwnPropertyNames || function (o) {
117764
+ var ar = [];
117765
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
117766
+ return ar;
117767
+ };
117768
+ return ownKeys(o);
117769
+ };
117770
+ return function (mod) {
117771
+ if (mod && mod.__esModule) return mod;
117772
+ var result = {};
117773
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
117774
+ __setModuleDefault(result, mod);
117775
+ return result;
117776
+ };
117777
+ })();
117778
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
117779
+ exports.SkipTranspiler = void 0;
117780
+ const abaplint = __importStar(__webpack_require__(/*! @abaplint/core */ "./node_modules/@abaplint/core/build/src/index.js"));
117781
+ const chunk_1 = __webpack_require__(/*! ../chunk */ "./node_modules/@abaplint/transpiler/build/src/chunk.js");
117782
+ class SkipTranspiler {
117783
+ transpile(node, traversal) {
117784
+ const source = node.findDirectExpression(abaplint.Expressions.Source);
117785
+ if (source === undefined) {
117786
+ return new chunk_1.Chunk().append("abap.statements.skip();", node, traversal);
117787
+ }
117788
+ const option = node.concatTokens().toUpperCase().includes("TO LINE") ? "toLine" : "lines";
117789
+ return new chunk_1.Chunk().append("abap.statements.skip({" + option + ": ", node, traversal)
117790
+ .appendChunk(traversal.traverse(source))
117791
+ .append("});", node.getLastToken(), traversal);
117792
+ }
117793
+ }
117794
+ exports.SkipTranspiler = SkipTranspiler;
117795
+ //# sourceMappingURL=skip.js.map
117796
+
117797
+ /***/ },
117798
+
117210
117799
  /***/ "./node_modules/@abaplint/transpiler/build/src/statements/sort.js"
117211
117800
  /*!************************************************************************!*\
117212
117801
  !*** ./node_modules/@abaplint/transpiler/build/src/statements/sort.js ***!
@@ -119460,6 +120049,7 @@ const traversal_1 = __webpack_require__(/*! ../traversal */ "./node_modules/@aba
119460
120049
  const chunk_1 = __webpack_require__(/*! ../chunk */ "./node_modules/@abaplint/transpiler/build/src/chunk.js");
119461
120050
  const transpile_types_1 = __webpack_require__(/*! ../transpile_types */ "./node_modules/@abaplint/transpiler/build/src/transpile_types.js");
119462
120051
  const unique_identifier_1 = __webpack_require__(/*! ../unique_identifier */ "./node_modules/@abaplint/transpiler/build/src/unique_identifier.js");
120052
+ const inline_1 = __webpack_require__(/*! ../inline */ "./node_modules/@abaplint/transpiler/build/src/inline.js");
119463
120053
  class FunctionModuleTranspiler {
119464
120054
  transpile(node, traversal) {
119465
120055
  const chunk = new chunk_1.Chunk();
@@ -119472,6 +120062,7 @@ class FunctionModuleTranspiler {
119472
120062
  }
119473
120063
  chunk.append(`async function ${traversal_1.Traversal.escapeNamespace(name)}(INPUT) {\n`, c, traversal);
119474
120064
  chunk.appendString(this.findSignature(traversal, name, c));
120065
+ chunk.appendString(inline_1.InlineDeclarations.buildDeclarations(node, traversal));
119475
120066
  }
119476
120067
  else if (c.get() instanceof abaplint.Statements.EndFunction) {
119477
120068
  chunk.append("}\n", c, traversal);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abaplint/transpiler-cli",
3
- "version": "2.13.59",
3
+ "version": "2.13.60",
4
4
  "description": "Transpiler - Command Line Interface",
5
5
  "funding": "https://github.com/sponsors/larshp",
6
6
  "bin": {
@@ -27,8 +27,8 @@
27
27
  "author": "abaplint",
28
28
  "license": "MIT",
29
29
  "devDependencies": {
30
- "@abaplint/core": "^2.120.23",
31
- "@abaplint/transpiler": "^2.13.59",
30
+ "@abaplint/core": "^2.120.28",
31
+ "@abaplint/transpiler": "^2.13.60",
32
32
  "@types/glob": "^8.1.0",
33
33
  "@types/node": "^24.13.3",
34
34
  "@types/progress": "^2.0.7",
package/schema.json CHANGED
@@ -76,6 +76,14 @@
76
76
  "output_folder": {
77
77
  "type": "string"
78
78
  },
79
+ "plugins": {
80
+ "description": "list of npm module names or paths, resolved from the current working directory, each module exports \"plugins\", an array of ITranspilerPlugin instances",
81
+ "items": {
82
+ "type": "string"
83
+ },
84
+ "type": "array",
85
+ "uniqueItems": true
86
+ },
79
87
  "write_source_map": {
80
88
  "type": "boolean"
81
89
  },
@@ -1 +0,0 @@
1
- {"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.es2021.d.ts","./node_modules/typescript/lib/lib.es2022.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.dom.asynciterable.d.ts","./node_modules/typescript/lib/lib.webworker.importscripts.d.ts","./node_modules/typescript/lib/lib.scripthost.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.es2021.promise.d.ts","./node_modules/typescript/lib/lib.es2021.string.d.ts","./node_modules/typescript/lib/lib.es2021.weakref.d.ts","./node_modules/typescript/lib/lib.es2021.intl.d.ts","./node_modules/typescript/lib/lib.es2022.array.d.ts","./node_modules/typescript/lib/lib.es2022.error.d.ts","./node_modules/typescript/lib/lib.es2022.intl.d.ts","./node_modules/typescript/lib/lib.es2022.object.d.ts","./node_modules/typescript/lib/lib.es2022.string.d.ts","./node_modules/typescript/lib/lib.es2022.regexp.d.ts","./node_modules/typescript/lib/lib.es2025.float16.d.ts","./node_modules/typescript/lib/lib.esnext.disposable.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/typescript/lib/lib.es2022.full.d.ts","./node_modules/vscode-languageserver-types/lib/umd/main.d.ts","./node_modules/@abaplint/core/build/abaplint.d.ts","./node_modules/source-map/source-map.d.ts","./node_modules/@abaplint/transpiler/build/src/chunk.d.ts","./node_modules/@abaplint/transpiler/build/src/unit_test.d.ts","./node_modules/@abaplint/transpiler/build/src/db/database_setup_result.d.ts","./node_modules/@abaplint/transpiler/build/src/types.d.ts","./node_modules/@abaplint/transpiler/build/src/validation.d.ts","./node_modules/@abaplint/transpiler/build/src/index.d.ts","./src/types.ts","./src/config.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/globals.typedarray.d.ts","./node_modules/@types/node/buffer.buffer.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/web-globals/abortcontroller.d.ts","./node_modules/@types/node/web-globals/crypto.d.ts","./node_modules/@types/node/web-globals/domexception.d.ts","./node_modules/@types/node/web-globals/events.d.ts","./node_modules/undici-types/utility.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client-stats.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-types/balanced-pool.d.ts","./node_modules/undici-types/h2c-client.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-call-history.d.ts","./node_modules/undici-types/mock-agent.d.ts","./node_modules/undici-types/mock-client.d.ts","./node_modules/undici-types/mock-pool.d.ts","./node_modules/undici-types/snapshot-agent.d.ts","./node_modules/undici-types/mock-errors.d.ts","./node_modules/undici-types/proxy-agent.d.ts","./node_modules/undici-types/env-http-proxy-agent.d.ts","./node_modules/undici-types/retry-handler.d.ts","./node_modules/undici-types/retry-agent.d.ts","./node_modules/undici-types/api.d.ts","./node_modules/undici-types/cache-interceptor.d.ts","./node_modules/undici-types/interceptors.d.ts","./node_modules/undici-types/util.d.ts","./node_modules/undici-types/cookies.d.ts","./node_modules/undici-types/patch.d.ts","./node_modules/undici-types/websocket.d.ts","./node_modules/undici-types/eventsource.d.ts","./node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/undici-types/content-type.d.ts","./node_modules/undici-types/cache.d.ts","./node_modules/undici-types/index.d.ts","./node_modules/@types/node/web-globals/fetch.d.ts","./node_modules/@types/node/web-globals/navigator.d.ts","./node_modules/@types/node/web-globals/storage.d.ts","./node_modules/@types/node/web-globals/streams.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.d.ts","./node_modules/@types/node/inspector.generated.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/sea.d.ts","./node_modules/@types/node/sqlite.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/index.d.ts","./node_modules/@types/minimatch/index.d.ts","./node_modules/@types/glob/index.d.ts","./node_modules/p-limit/index.d.ts","./src/file_operations.ts","./node_modules/@types/progress/index.d.ts","./src/index.ts","../../node_modules/@types/mocha/index.d.ts"],"fileIdsList":[[79,133,150,151],[66,79,133,150,151],[67,68,79,133,150,151],[67,72,73,79,133,150,151],[67,69,70,71,79,133,150,151],[67,79,133,150,151],[67,72,79,133,150,151],[79,133,144,145,150,151,183,184],[79,130,131,133,150,151],[79,132,133,150,151],[133,150,151],[79,133,138,150,151,168],[79,133,134,139,144,150,151,153,165,176],[79,133,134,135,144,150,151,153],[79,133,136,150,151,177],[79,133,137,138,145,150,151,154],[79,133,138,150,151,165,173],[79,133,139,141,144,150,151,153],[79,132,133,140,150,151],[79,133,141,142,150,151],[79,133,143,144,150,151],[79,132,133,144,150,151],[79,133,144,145,146,150,151,165,176],[79,133,144,145,146,150,151,160,165,168],[79,125,133,141,144,147,150,151,153,165,176],[79,133,144,145,147,148,150,151,153,165,173,176],[79,133,147,149,150,151,165,173,176],[77,78,79,80,81,82,83,84,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182],[79,133,144,150,151],[79,133,150,151,152,176],[79,133,141,144,150,151,153,165],[79,133,150,151,154],[79,133,150,151,155],[79,132,133,150,151,156],[79,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182],[79,133,150,151,158],[79,133,150,151,159],[79,133,144,150,151,160,161],[79,133,150,151,160,162,177,179],[79,133,145,150,151],[79,133,144,150,151,165,166,168],[79,133,150,151,167,168],[79,133,150,151,165,166],[79,133,150,151,168],[79,133,150,151,169],[79,130,133,150,151,165,170,176],[79,133,144,150,151,171,172],[79,133,150,151,171,172],[79,133,138,150,151,153,165,173],[79,133,150,151,174],[79,133,150,151,153,175],[79,133,147,150,151,159,176],[79,133,138,150,151,177],[79,133,150,151,165,178],[79,133,150,151,152,179],[79,133,150,151,180],[79,133,138,150,151],[79,125,133,150,151],[79,133,150,151,181],[79,125,133,144,146,150,151,156,165,168,176,178,179,181],[79,133,150,151,165,182],[79,133,150,151,183],[79,91,94,97,98,133,150,151,176],[79,94,133,150,151,165,176],[79,94,98,133,150,151,176],[79,133,150,151,165],[79,88,133,150,151],[79,92,133,150,151],[79,90,91,94,133,150,151,176],[79,133,150,151,153,173],[79,88,133,150,151,183],[79,90,94,133,150,151,153,176],[79,85,86,87,89,93,133,144,150,151,165,176],[79,94,102,110,133,150,151],[79,86,92,133,150,151],[79,94,119,120,133,150,151],[79,86,89,94,133,150,151,168,176,183],[79,94,133,150,151],[79,90,94,133,150,151,176],[79,85,133,150,151],[79,88,89,90,92,93,94,95,96,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,120,121,122,123,124,133,150,151],[79,94,112,115,133,141,150,151],[79,94,102,103,104,133,150,151],[79,92,94,103,105,133,150,151],[79,93,133,150,151],[79,86,88,94,133,150,151],[79,94,98,103,105,133,150,151],[79,98,133,150,151],[79,92,94,97,133,150,151,176],[79,86,90,94,102,133,150,151],[79,94,112,133,150,151],[79,105,133,150,151],[79,88,94,119,133,150,151,168,181,183],[74,75,79,133,145,150,151,155],[74,75,79,133,145,146,150,151,154,155,185,186],[67,74,75,76,79,133,134,145,150,151,154,155,185,187,188],[74,79,133,150,151]],"fileInfos":[{"version":"bcd24271a113971ba9eb71ff8cb01bc6b0f872a85c23fdbe5d93065b375933cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f88bedbeb09c6f5a6645cb24c7c55f1aa22d19ae96c8e6959cbd8b85a707bc6","impliedFormat":1},{"version":"7fe93b39b810eadd916be8db880dd7f0f7012a5cc6ffb62de8f62a2117fa6f1f","impliedFormat":1},{"version":"bb0074cc08b84a2374af33d8bf044b80851ccc9e719a5e202eacf40db2c31600","impliedFormat":1},{"version":"1a7daebe4f45fb03d9ec53d60008fbf9ac45a697fdc89e4ce218bc94b94f94d6","impliedFormat":1},{"version":"f94b133a3cb14a288803be545ac2683e0d0ff6661bcd37e31aaaec54fc382aed","impliedFormat":1},{"version":"f59d0650799f8782fd74cf73c19223730c6d1b9198671b1c5b3a38e1188b5953","impliedFormat":1},{"version":"8a15b4607d9a499e2dbeed9ec0d3c0d7372c850b2d5f1fb259e8f6d41d468a84","impliedFormat":1},{"version":"26e0fe14baee4e127f4365d1ae0b276f400562e45e19e35fd2d4c296684715e6","impliedFormat":1},{"version":"d6b1eba8496bdd0eed6fc8a685768fe01b2da4a0388b5fe7df558290bffcf32f","affectsGlobalScope":true,"impliedFormat":1},{"version":"7f57fc4404ff020bc45b9c620aff2b40f700b95fe31164024c453a5e3c163c54","impliedFormat":1},{"version":"7f57fc4404ff020bc45b9c620aff2b40f700b95fe31164024c453a5e3c163c54","impliedFormat":1},{"version":"2a2de5b9459b3fc44decd9ce6100b72f1b002ef523126c1d3d8b2a4a63d74d78","affectsGlobalScope":true,"impliedFormat":1},{"version":"f13f4b465c99041e912db5c44129a94588e1aafee35a50eab51044833f50b4ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"eadcffda2aa84802c73938e589b9e58248d74c59cb7fcbca6474e3435ac15504","affectsGlobalScope":true,"impliedFormat":1},{"version":"105ba8ff7ba746404fe1a2e189d1d3d2e0eb29a08c18dded791af02f29fb4711","affectsGlobalScope":true,"impliedFormat":1},{"version":"00343ca5b2e3d48fa5df1db6e32ea2a59afab09590274a6cccb1dbae82e60c7c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ebd9f816d4002697cb2864bea1f0b70a103124e18a8cd9645eeccc09bdf80ab4","affectsGlobalScope":true,"impliedFormat":1},{"version":"2c1afac30a01772cd2a9a298a7ce7706b5892e447bb46bdbeef720f7b5da77ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"7b0225f483e4fa685625ebe43dd584bb7973bbd84e66a6ba7bbe175ee1048b4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c0a4b8ac6ce74679c1da2b3795296f5896e31c38e888469a8e0f99dc3305de60","affectsGlobalScope":true,"impliedFormat":1},{"version":"3084a7b5f569088e0146533a00830e206565de65cae2239509168b11434cd84f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5079c53f0f141a0698faa903e76cb41cd664e3efb01cc17a5c46ec2eb0bef42","affectsGlobalScope":true,"impliedFormat":1},{"version":"32cafbc484dea6b0ab62cf8473182bbcb23020d70845b406f80b7526f38ae862","affectsGlobalScope":true,"impliedFormat":1},{"version":"fca4cdcb6d6c5ef18a869003d02c9f0fd95df8cfaf6eb431cd3376bc034cad36","affectsGlobalScope":true,"impliedFormat":1},{"version":"b93ec88115de9a9dc1b602291b85baf825c85666bf25985cc5f698073892b467","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5c06dcc3fe849fcb297c247865a161f995cc29de7aa823afdd75aaaddc1419b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b77e16112127a4b169ef0b8c3a4d730edf459c5f25fe52d5e436a6919206c4d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"fbffd9337146eff822c7c00acbb78b01ea7ea23987f6c961eba689349e744f8c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a995c0e49b721312f74fdfb89e4ba29bd9824c770bbb4021d74d2bf560e4c6bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"c7b3542146734342e440a84b213384bfa188835537ddbda50d30766f0593aff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce6180fa19b1cccd07ee7f7dbb9a367ac19c0ed160573e4686425060b6df7f57","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f02e2476bccb9dbe21280d6090f0df17d2f66b74711489415a8aa4df73c9675","affectsGlobalScope":true,"impliedFormat":1},{"version":"45e3ab34c1c013c8ab2dc1ba4c80c780744b13b5676800ae2e3be27ae862c40c","affectsGlobalScope":true,"impliedFormat":1},{"version":"805c86f6cca8d7702a62a844856dbaa2a3fd2abef0536e65d48732441dde5b5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e42e397f1a5a77994f0185fd1466520691456c772d06bf843e5084ceb879a0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4c2b41f90c95b1c532ecc874bd3c111865793b23aebcc1c3cbbabcd5d76ffb0","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab26191cfad5b66afa11b8bf935ef1cd88fabfcb28d30b2dfa6fad877d050332","affectsGlobalScope":true,"impliedFormat":1},{"version":"2088bc26531e38fb05eedac2951480db5309f6be3fa4a08d2221abb0f5b4200d","affectsGlobalScope":true,"impliedFormat":1},{"version":"cb9d366c425fea79716a8fb3af0d78e6b22ebbab3bd64d25063b42dc9f531c1e","affectsGlobalScope":true,"impliedFormat":1},{"version":"500934a8089c26d57ebdb688fc9757389bb6207a3c8f0674d68efa900d2abb34","affectsGlobalScope":true,"impliedFormat":1},{"version":"689da16f46e647cef0d64b0def88910e818a5877ca5379ede156ca3afb780ac3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc21cc8b6fee4f4c2440d08035b7ea3c06b3511314c8bab6bef7a92de58a2593","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ca53d13d2957003abb47922a71866ba7cb2068f8d154877c596d63c359fed25","affectsGlobalScope":true,"impliedFormat":1},{"version":"54725f8c4df3d900cb4dac84b64689ce29548da0b4e9b7c2de61d41c79293611","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5594bc3076ac29e6c1ebda77939bc4c8833de72f654b6e376862c0473199323","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f3eb332c2d73e729f3364fcc0c2b375e72a121e8157d25a82d67a138c83a95c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6f4427f9642ce8d500970e4e69d1397f64072ab73b97e476b4002a646ac743b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"48915f327cd1dea4d7bd358d9dc7732f58f9e1626a29cc0c05c8c692419d9bb7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7bf9377723203b5a6a4b920164df22d56a43f593269ba6ae1fdc97774b68855","affectsGlobalScope":true,"impliedFormat":1},{"version":"db9709688f82c9e5f65a119c64d835f906efe5f559d08b11642d56eb85b79357","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b25b8c874acd1a4cf8444c3617e037d444d19080ac9f634b405583fd10ce1f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"37be57d7c90cf1f8112ee2636a068d8fd181289f82b744160ec56a7dc158a9f5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a917a49ac94cd26b754ab84e113369a75d1a47a710661d7cd25e961cc797065f","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d3261badeb7843d157ef3e6f5d1427d0eeb0af0cf9df84a62cfd29fd47ac86e","affectsGlobalScope":true,"impliedFormat":1},{"version":"195daca651dde22f2167ac0d0a05e215308119a3100f5e6268e8317d05a92526","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b11e4285cd2bb164a4dc09248bdec69e9842517db4ca47c1ba913011e44ff2f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0508571a52475e245b02bc50fa1394065a0a3d05277fbf5120c3784b85651799","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f9af488f510c3015af3cc8c267a9e9d96c4dd38a1fdff0e11dc5a544711415b","affectsGlobalScope":true,"impliedFormat":1},{"version":"fc611fea8d30ea72c6bbfb599c9b4d393ce22e2f5bfef2172534781e7d138104","affectsGlobalScope":true,"impliedFormat":1},{"version":"f128dae7c44d8f35ee42e0a437000a57c9f06cc04f8b4fb42eebf44954d53dc8","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ecb8e347cb6b2a8927c09b86263663289418df375f5e68e11a0ae683776978f","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ce14b81c5cc821994aa8ec1d42b220dd41b27fcc06373bce3958af7421b77d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3a048b3e9302ef9a34ef4ebb9aecfb28b66abb3bce577206a79fee559c230da","affectsGlobalScope":true,"impliedFormat":1},{"version":"01a30f9e8582b369075c0808df71121e6855cb06fd8d3d39511d9ebb66405205","impliedFormat":1},{"version":"af4f042e8a99eb6f9a48411042e9633486f1eb058d9e1c769c9836cd05464489","impliedFormat":1},{"version":"b4d0053584c73bf5833bbcd9ec96d25600137c3af90bf0e69aff09afb70a741e","impliedFormat":1},{"version":"89dcbbf69b16cd94043e16c7fbcfa04256577ec98bb8ae894833d2a922394db4","impliedFormat":1},{"version":"7c0590bae81bbe21e3878be296210b76afd6c05a098bc287dbe242f38a8a852b","impliedFormat":1},{"version":"83bff103f33fa5b2bb32986e890533f95677057a836b7cf78a8202ad90a45608","impliedFormat":1},{"version":"72003eb7651e998adc17d10707d2ed12e5270c4b23edb513d0614491db91aa10","impliedFormat":1},{"version":"a9eac7528f5d68e0073a0db760c177c0e2e46c322c5a56819cc7fe82713fd156","impliedFormat":1},{"version":"314857f821f9455b2ac936919fd37752b5472ca21bb9433cc640662c81caaa4b","impliedFormat":1},{"version":"d596b83809535dbe4ce7b1c7a668e7ab4e4b8c249d5ddf7d0b1db16f5c1d7a81","impliedFormat":1},{"version":"f20028696c1a38226e42010da3031ddea24b3a418ad56a0bddbbf1a82fe8c609","signature":"3db2a08b4341f2125ba4bb3f793debb7b30932295c36871bcb138dc65115f23a"},{"version":"740d510020f3536ce50c4e341917ad27a3bb4ffeee6509f770efb5675b5896bd","signature":"e08bb6219752efcaf6119c06958e6e83b878bbb3369e1bb4aeac454836735f54"},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"378281aa35786c27d5811af7e6bcaa492eebd0c7013d48137c35bbc69a2b9751","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"1b2dd1cbeb0cc6ae20795958ba5950395ebb2849b7c8326853dd15530c77ab0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"387a023d363f755eb63450a66c28b14cdd7bc30a104565e2dbf0a8988bb4a56c","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"487b694c3de27ddf4ad107d4007ad304d29effccf9800c8ae23c2093638d906a","impliedFormat":1},{"version":"3a80bc85f38526ca3b08007ee80712e7bb0601df178b23fbf0bf87036fce40ce","impliedFormat":1},{"version":"ccf4552357ce3c159ef75f0f0114e80401702228f1898bdc9402214c9499e8c0","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"2931540c47ee0ff8a62860e61782eb17b155615db61e36986e54645ec67f67c2","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"f6faf5f74e4c4cc309a6c6a6c4da02dbb840be5d3e92905a23dcd7b2b0bd1986","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"33e981bf6376e939f99bd7f89abec757c64897d33c005036b9a10d9587d80187","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"b41767d372275c154c7ea6c9d5449d9a741b8ce080f640155cc88ba1763e35b3","impliedFormat":1},{"version":"3bacf516d686d08682751a3bd2519ea3b8041a164bfb4f1d35728993e70a2426","impliedFormat":1},{"version":"7fb266686238369442bd1719bc0d7edd0199da4fb8540354e1ff7f16669b4323","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"54c3e2371e3d016469ad959697fd257e5621e16296fa67082c2575d0bf8eced0","impliedFormat":1},{"version":"beb8233b2c220cfa0feea31fbe9218d89fa02faa81ef744be8dce5acb89bb1fd","impliedFormat":1},{"version":"c183b931b68ad184bc8e8372bf663f3d33304772fb482f29fb91b3c391031f3e","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"48cc3ec153b50985fb95153258a710782b25975b10dd4ac8a4f3920632d10790","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"e1528ca65ac90f6fa0e4a247eb656b4263c470bb22d9033e466463e13395e599","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"866078923a56d026e39243b4392e282c1c63159723996fa89243140e1388a98d","impliedFormat":1},{"version":"f724236417941ea77ec8d38c6b7021f5fb7f8521c7f8c1538e87661f2c6a0774","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d97fb21da858fb18b8ae72c314e9743fd52f73ebe2764e12af1db32fc03f853f","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ea15fd99b2e34cb25fe8346c955000bb70c8b423ae4377a972ef46bfb37f595","impliedFormat":1},{"version":"7cf69dd5502c41644c9e5106210b5da7144800670cbe861f66726fa209e231c4","impliedFormat":1},{"version":"72c1f5e0a28e473026074817561d1bc9647909cf253c8d56c41d1df8d95b85f7","impliedFormat":1},{"version":"f9b4137a0d285bd77dba2e6e895530112264310ae47e07bf311feae428fb8b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"c06b2652ffeb89afd0f1c52c165ced77032f9cd09bc481153fbd6b5504c69494","impliedFormat":1},{"version":"51aecd2df90a3cffea1eb4696b33b2d78594ea2aa2138e6b9471ec4841c6c2ee","impliedFormat":1},{"version":"9d8f9e63e29a3396285620908e7f14d874d066caea747dc4b2c378f0599166b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"612422d5ba6b4a5c4537f423e9199645468ad80a689801da63ab7edb43f7b835","impliedFormat":1},{"version":"db9ada976f9e52e13f7ae8b9a320f4b67b87685938c5879187d8864b2fbe97f3","impliedFormat":1},{"version":"9f39e70a354d0fba29ac3cdf6eca00b7f9e96f64b2b2780c432e8ea27f133743","impliedFormat":1},{"version":"0dace96cc0f7bc6d0ee2044921bdf19fe42d16284dbcc8ae200800d1c9579335","impliedFormat":1},{"version":"a2e2bbde231b65c53c764c12313897ffdfb6c49183dd31823ee2405f2f7b5378","impliedFormat":1},{"version":"ad1cc0ed328f3f708771272021be61ab146b32ecf2b78f3224959ff1e2cd2a5c","impliedFormat":1},{"version":"c64e1888baaa3253ca4405b455e4bf44f76357868a1bd0a52998ade9a092ad78","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc8c6f5322961b56d9906601b20798725df60baeab45ec014fba9f795d5596fd","impliedFormat":1},{"version":"0904660ae854e6d41f6ff25356db1d654436c6305b0f0aa89d1532df0253486e","impliedFormat":1},{"version":"060d305fe4494d8cb2b99d620928d369d1ee55c1645f5e729a2aca07d0f108cb","impliedFormat":1},{"version":"230bdc111d7578276e4a3bb9d075d85c78c6b68f428c3a9935e2eaa10f4ae1f5","impliedFormat":1},{"version":"0c50296ee73dae94efc3f0da4936b1146ca6ce2217acfabb44c19c9a33fa30e5","impliedFormat":1},{"version":"bbf42f98a5819f4f06e18c8b669a994afe9a17fe520ae3454a195e6eabf7700d","impliedFormat":1},{"version":"0e5974dfff7a97181c7c376545f126b20acf2f1341db7d3fccea4977bf3ce19c","impliedFormat":1},{"version":"c7f977ea78a1b060a30554c1c4ec0e2269c6e305a349ca2ada14931ac27ecc0b","affectsGlobalScope":true,"impliedFormat":1},{"version":"3806cdd6b48ba01a9198134e62a384ec217a98f316d4baef74dd46d62c947a63","impliedFormat":1},{"version":"ff65b8a8bd380c6d129becc35de02f7c29ad7ce03300331ca91311fb4044d1a9","impliedFormat":1},{"version":"04bf1aa481d1adfb16d93d76e44ce71c51c8ef68039d849926551199489637f6","impliedFormat":1},{"version":"2c9adcc85574b002c9a6311ff2141055769e0071856ec979d92ff989042b1f1b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b8bf3fe89ec8baa335f6370b9fa36308e1bc7a72e2eb2dad1e94f31e27fa28b5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a58a15da4c5ba3df60c910a043281256fa52d36a0fcdef9b9100c646282e88dd","impliedFormat":1},{"version":"b36beffbf8acdc3ebc58c8bb4b75574b31a2169869c70fc03f82895b93950a12","impliedFormat":1},{"version":"de263f0089aefbfd73c89562fb7254a7468b1f33b61839aafc3f035d60766cb4","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"8c81fd4a110490c43d7c578e8c6f69b3af01717189196899a6a44f93daa57a3a","impliedFormat":1},{"version":"5fb39858b2459864b139950a09adae4f38dad87c25bf572ce414f10e4bd7baab","impliedFormat":1},{"version":"35390d6fa94bdb432c5d0bcb6547bdd11406c2692a6b90b9e47be2105ea19bd6","impliedFormat":1},{"version":"3910dab597c40e173bf0e0d419d3ce9682c54ebf6ae84849f9b829b1451a17ec","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"486c074a5c0f2254345c0d1c9540380f5463999e42d7e1a159305ea823d3c4b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"c119835edf36415081dfd9ed15fc0cd37aaa28d232be029ad073f15f3d88c323","impliedFormat":1},{"version":"8e7c3bed5f19ade8f911677ddc83052e2283e25b0a8654cd89db9079d4b323c7","impliedFormat":1},{"version":"9705cd157ffbb91c5cab48bdd2de5a437a372e63f870f8a8472e72ff634d47c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ae86f30d5d10e4f75ce8dcb6e1bd3a12ecec3d071a21e8f462c5c85c678efb41","impliedFormat":1},{"version":"ccf3afaeebbeee4ca9092101e99fd6abd681116b6e5ec23e381bbb1e1f32262c","impliedFormat":1},{"version":"e03460fe72b259f6d25ad029f085e4bedc3f90477da4401d8fbc1efa9793230e","impliedFormat":1},{"version":"4286a3a6619514fca656089aee160bb6f2e77f4dd53dc5a96b26a0b4fc778055","impliedFormat":1},{"version":"ab7818a9d57a9297b90e456fc68b77f84d74395a9210a3cfa9d87db33aff8b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb08062718a5470cd864c1fae0eb5b3a3adc5bcd05dcf87608d6f60b65eca3f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"3a815b7d1aebc0646b91548eab2fc19dada09ff255d04c71ced00bbd3058c8eb","impliedFormat":1},{"version":"255d948f87f24ffd57bcb2fdf95792fd418a2e1f712a98cf2cce88744d75085c","impliedFormat":1},{"version":"0d5b085f36e6dc55bc6332ecb9c733be3a534958c238fb8d8d18d4a2b6f2a15a","impliedFormat":1},{"version":"836b36913830645ac3b28fe33731aac3fdb3524ee8adbb4cdab9a5c189f41943","affectsGlobalScope":true,"impliedFormat":1},{"version":"bfd3b3c21a56104693183942e221c1896ee23bcb8f8d91ab0b941f7b32985411","impliedFormat":1},{"version":"d7e9ab1b0996639047c61c1e62f85c620e4382206b3abb430d9a21fb7bc23c77","impliedFormat":1},{"version":"963d59066dd6742da1918a6213a209bcc205b8ee53b1876ee2b4e6d80f97c85e","impliedFormat":1},{"version":"9c5c92b7fb8c38ff1b46df69701f2d1ea8e2d6468e3cd8f73d8af5e6f7864576","impliedFormat":1},{"version":"9f91eee81fda27d38d60963fe1de2f050a5cfb241af56b7e7ee6d9aa8522a058","impliedFormat":1},{"version":"1baaf9e01ea72170d3c74aca2d0d7acbef3eb83f776ba6e0ef0c944b454bd295","signature":"7657ae67f69f3df2efb4fc6bbebd5702f35bdb5662211626856df64bc0be41e5"},{"version":"399fc76aafc3c3e506515b7796f8a9b0ae63a40733f0b452fe949d986f1c01b7","impliedFormat":1},{"version":"4aee29034bd907cfbf0cddc8be9ebd421082a3703b509809170d97f20677a876","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"29f72ec1289ae3aeda78bf14b38086d3d803262ac13904b400422941a26a3636","affectsGlobalScope":true,"impliedFormat":1}],"root":[75,76,187,189],"options":{"alwaysStrict":true,"declaration":true,"esModuleInterop":true,"module":1,"noFallthroughCasesInSwitch":true,"noImplicitAny":true,"noImplicitReturns":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./build","rootDir":"./src","sourceMap":true,"strictFunctionTypes":true,"strictNullChecks":true,"strictPropertyInitialization":false,"target":9,"useUnknownInCatchVariables":false},"referencedMap":[[190,1],[67,2],[69,3],[71,1],[74,4],[72,5],[70,6],[73,7],[185,8],[184,1],[130,9],[131,9],[132,10],[79,11],[133,12],[134,13],[135,14],[77,1],[136,15],[137,16],[138,17],[139,18],[140,19],[141,20],[142,20],[143,21],[144,22],[145,23],[146,24],[80,1],[78,1],[147,25],[148,26],[149,27],[183,28],[150,29],[151,1],[152,30],[153,31],[154,32],[155,33],[156,34],[157,35],[158,36],[159,37],[160,38],[161,38],[162,39],[163,1],[164,40],[165,41],[167,42],[166,43],[168,44],[169,45],[170,46],[171,47],[172,48],[173,49],[174,50],[175,51],[176,52],[177,53],[178,54],[179,55],[180,56],[81,1],[82,57],[83,1],[84,1],[126,58],[127,59],[128,1],[129,44],[181,60],[182,61],[188,62],[186,1],[68,1],[63,1],[64,1],[12,1],[10,1],[11,1],[16,1],[15,1],[2,1],[17,1],[18,1],[19,1],[20,1],[21,1],[22,1],[23,1],[24,1],[3,1],[25,1],[26,1],[4,1],[27,1],[31,1],[28,1],[29,1],[30,1],[32,1],[33,1],[34,1],[5,1],[35,1],[36,1],[37,1],[38,1],[6,1],[42,1],[39,1],[40,1],[41,1],[43,1],[7,1],[44,1],[49,1],[50,1],[45,1],[46,1],[47,1],[48,1],[8,1],[54,1],[51,1],[52,1],[53,1],[55,1],[9,1],[56,1],[65,1],[57,1],[58,1],[60,1],[59,1],[61,1],[1,1],[62,1],[14,1],[13,1],[102,63],[114,64],[100,65],[115,66],[124,67],[91,68],[92,69],[90,70],[123,62],[118,71],[122,72],[94,73],[111,74],[93,75],[121,76],[88,77],[89,71],[95,78],[96,1],[101,79],[99,78],[86,80],[125,81],[116,82],[105,83],[104,78],[106,84],[109,85],[103,86],[107,87],[119,62],[97,88],[98,89],[110,90],[87,66],[113,91],[112,78],[108,92],[117,1],[85,1],[120,93],[66,1],[76,94],[187,95],[189,96],[75,97]],"version":"6.0.3"}