@abaplint/transpiler-cli 2.12.12 → 2.12.14
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/abap_transpile +1 -1
- package/build/bundle.js +271 -93
- package/package.json +3 -3
- package/schema.json +0 -219
package/abap_transpile
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
1
|
+
#!/usr/bin/env node
|
|
2
2
|
require("./build/bundle");
|
package/build/bundle.js
CHANGED
|
@@ -4934,7 +4934,6 @@ __exportStar(__webpack_require__(/*! ./sql_arithmetic_operator */ "./node_module
|
|
|
4934
4934
|
__exportStar(__webpack_require__(/*! ./sql_arithmetics */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_arithmetics.js"), exports);
|
|
4935
4935
|
__exportStar(__webpack_require__(/*! ./sql_as_name */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_as_name.js"), exports);
|
|
4936
4936
|
__exportStar(__webpack_require__(/*! ./sql_case */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_case.js"), exports);
|
|
4937
|
-
__exportStar(__webpack_require__(/*! ./sql_cast */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_cast.js"), exports);
|
|
4938
4937
|
__exportStar(__webpack_require__(/*! ./sql_cds_parameters */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_cds_parameters.js"), exports);
|
|
4939
4938
|
__exportStar(__webpack_require__(/*! ./sql_client */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_client.js"), exports);
|
|
4940
4939
|
__exportStar(__webpack_require__(/*! ./sql_compare_operator */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_compare_operator.js"), exports);
|
|
@@ -7085,33 +7084,6 @@ exports.SQLCase = SQLCase;
|
|
|
7085
7084
|
|
|
7086
7085
|
/***/ }),
|
|
7087
7086
|
|
|
7088
|
-
/***/ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_cast.js":
|
|
7089
|
-
/*!*****************************************************************************************!*\
|
|
7090
|
-
!*** ./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_cast.js ***!
|
|
7091
|
-
\*****************************************************************************************/
|
|
7092
|
-
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
7093
|
-
|
|
7094
|
-
"use strict";
|
|
7095
|
-
|
|
7096
|
-
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
7097
|
-
exports.SQLCast = void 0;
|
|
7098
|
-
const _1 = __webpack_require__(/*! . */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js");
|
|
7099
|
-
const version_1 = __webpack_require__(/*! ../../../version */ "./node_modules/@abaplint/core/build/src/version.js");
|
|
7100
|
-
const tokens_1 = __webpack_require__(/*! ../../1_lexer/tokens */ "./node_modules/@abaplint/core/build/src/abap/1_lexer/tokens/index.js");
|
|
7101
|
-
const combi_1 = __webpack_require__(/*! ../combi */ "./node_modules/@abaplint/core/build/src/abap/2_statements/combi.js");
|
|
7102
|
-
const sql_field_name_1 = __webpack_require__(/*! ./sql_field_name */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_field_name.js");
|
|
7103
|
-
class SQLCast extends combi_1.Expression {
|
|
7104
|
-
getRunnable() {
|
|
7105
|
-
const abap = (0, combi_1.ver)(version_1.Version.v740sp05, (0, combi_1.seq)((0, combi_1.tok)(tokens_1.WAt), _1.SimpleFieldChain2), version_1.Version.OpenABAP);
|
|
7106
|
-
// todo: from version something
|
|
7107
|
-
return (0, combi_1.seq)("CAST", "(", (0, combi_1.opt)((0, combi_1.altPrio)(sql_field_name_1.SQLFieldName, abap)), "AS", sql_field_name_1.SQLFieldName, ")");
|
|
7108
|
-
}
|
|
7109
|
-
}
|
|
7110
|
-
exports.SQLCast = SQLCast;
|
|
7111
|
-
//# sourceMappingURL=sql_cast.js.map
|
|
7112
|
-
|
|
7113
|
-
/***/ }),
|
|
7114
|
-
|
|
7115
7087
|
/***/ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_cds_parameters.js":
|
|
7116
7088
|
/*!***************************************************************************************************!*\
|
|
7117
7089
|
!*** ./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_cds_parameters.js ***!
|
|
@@ -7267,7 +7239,7 @@ class SQLField extends combi_1.Expression {
|
|
|
7267
7239
|
const abap = (0, combi_1.ver)(version_1.Version.v740sp05, (0, combi_1.seq)((0, combi_1.tok)(tokens_1.WAt), _1.SimpleFieldChain2), version_1.Version.OpenABAP);
|
|
7268
7240
|
const as = (0, combi_1.seq)("AS", _1.SQLAsName);
|
|
7269
7241
|
const parenFieldName = (0, combi_1.seq)((0, combi_1.tok)(tokens_1.WParenLeftW), _1.SQLFieldName, (0, combi_1.altPrio)((0, combi_1.tok)(tokens_1.WParenRightW), (0, combi_1.tok)(tokens_1.WParenRight)));
|
|
7270
|
-
const field = (0, combi_1.altPrio)(_1.SQLAggregation, _1.SQLCase,
|
|
7242
|
+
const field = (0, combi_1.altPrio)(_1.SQLAggregation, _1.SQLCase, sql_function_1.SQLFunction, sql_path_1.SQLPath, _1.SQLFieldName, abap, _1.Constant, parenFieldName);
|
|
7271
7243
|
const parenField = (0, combi_1.seq)((0, combi_1.tok)(tokens_1.WParenLeftW), field, (0, combi_1.tok)(tokens_1.WParenRightW));
|
|
7272
7244
|
const sub = (0, combi_1.plusPrio)((0, combi_1.seq)((0, combi_1.altPrio)("+", "-", "*", "/", "&&"), (0, combi_1.altPrio)(parenField, field)));
|
|
7273
7245
|
const arith = (0, combi_1.ver)(version_1.Version.v740sp05, sub);
|
|
@@ -7533,10 +7505,11 @@ const integer_1 = __webpack_require__(/*! ./integer */ "./node_modules/@abaplint
|
|
|
7533
7505
|
const sql_function_input_1 = __webpack_require__(/*! ./sql_function_input */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_function_input.js");
|
|
7534
7506
|
class SQLFunction extends combi_1.Expression {
|
|
7535
7507
|
getRunnable() {
|
|
7536
|
-
const castTypes = (0, combi_1.altPrio)((0, combi_1.seq)("CHAR", (0, combi_1.optPrio)((0, combi_1.seq)((0, combi_1.tok)(tokens_1.ParenLeftW), integer_1.Integer, (0, combi_1.tok)(tokens_1.WParenRightW)))), (0, combi_1.seq)("DEC", (0, combi_1.tok)(tokens_1.ParenLeftW), integer_1.Integer, ",", integer_1.Integer, (0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.seq)("NUMC", (0, combi_1.optPrio)((0, combi_1.seq)((0, combi_1.tok)(tokens_1.ParenLeftW), integer_1.Integer, (0, combi_1.tok)(tokens_1.WParenRightW)))), "FLTP", "INT2", "INT4", "INT8");
|
|
7508
|
+
const castTypes = (0, combi_1.altPrio)((0, combi_1.seq)("CHAR", (0, combi_1.optPrio)((0, combi_1.seq)((0, combi_1.tok)(tokens_1.ParenLeftW), integer_1.Integer, (0, combi_1.tok)(tokens_1.WParenRightW)))), (0, combi_1.seq)("DEC", (0, combi_1.tok)(tokens_1.ParenLeftW), integer_1.Integer, ",", integer_1.Integer, (0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.seq)("NUMC", (0, combi_1.optPrio)((0, combi_1.seq)((0, combi_1.tok)(tokens_1.ParenLeftW), integer_1.Integer, (0, combi_1.tok)(tokens_1.WParenRightW)))), "DATS", "FLTP", "INT2", "INT4", "INT8");
|
|
7537
7509
|
const commaParam = (0, combi_1.seq)(",", sql_function_input_1.SQLFunctionInput);
|
|
7538
7510
|
// note: the function names are not keywords, they are usually in lower case
|
|
7539
7511
|
const abs = (0, combi_1.ver)(version_1.Version.v740sp05, (0, combi_1.seq)((0, combi_1.regex)(/^abs$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), sql_function_input_1.SQLFunctionInput, (0, combi_1.tok)(tokens_1.WParenRightW)));
|
|
7512
|
+
// yea, 750 is correct, but it also works technically in version v740sp05
|
|
7540
7513
|
const cast = (0, combi_1.ver)(version_1.Version.v750, (0, combi_1.seq)((0, combi_1.regex)(/^cast$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), sql_function_input_1.SQLFunctionInput, "AS", castTypes, (0, combi_1.tok)(tokens_1.WParenRightW)));
|
|
7541
7514
|
const ceil = (0, combi_1.ver)(version_1.Version.v740sp05, (0, combi_1.seq)((0, combi_1.regex)(/^ceil$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), sql_function_input_1.SQLFunctionInput, (0, combi_1.tok)(tokens_1.WParenRightW)));
|
|
7542
7515
|
const coalesce = (0, combi_1.ver)(version_1.Version.v740sp05, (0, combi_1.seq)((0, combi_1.regex)(/^coalesce$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), sql_function_input_1.SQLFunctionInput, commaParam, (0, combi_1.optPrio)(commaParam), (0, combi_1.tok)(tokens_1.WParenRightW)));
|
|
@@ -19604,33 +19577,21 @@ exports.Identifier = Identifier;
|
|
|
19604
19577
|
/*!************************************************************************************************!*\
|
|
19605
19578
|
!*** ./node_modules/@abaplint/core/build/src/abap/4_file_information/abap_file_information.js ***!
|
|
19606
19579
|
\************************************************************************************************/
|
|
19607
|
-
/***/ ((__unused_webpack_module, exports
|
|
19580
|
+
/***/ ((__unused_webpack_module, exports) => {
|
|
19608
19581
|
|
|
19609
19582
|
"use strict";
|
|
19610
19583
|
|
|
19611
19584
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
19612
19585
|
exports.ABAPFileInformation = void 0;
|
|
19613
|
-
const Structures = __webpack_require__(/*! ../3_structures/structures */ "./node_modules/@abaplint/core/build/src/abap/3_structures/structures/index.js");
|
|
19614
|
-
const Expressions = __webpack_require__(/*! ../2_statements/expressions */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js");
|
|
19615
|
-
const Statements = __webpack_require__(/*! ../2_statements/statements */ "./node_modules/@abaplint/core/build/src/abap/2_statements/statements/index.js");
|
|
19616
|
-
const _abap_file_information_1 = __webpack_require__(/*! ./_abap_file_information */ "./node_modules/@abaplint/core/build/src/abap/4_file_information/_abap_file_information.js");
|
|
19617
|
-
const _identifier_1 = __webpack_require__(/*! ./_identifier */ "./node_modules/@abaplint/core/build/src/abap/4_file_information/_identifier.js");
|
|
19618
|
-
const Tokens = __webpack_require__(/*! ../1_lexer/tokens */ "./node_modules/@abaplint/core/build/src/abap/1_lexer/tokens/index.js");
|
|
19619
|
-
const visibility_1 = __webpack_require__(/*! ./visibility */ "./node_modules/@abaplint/core/build/src/abap/4_file_information/visibility.js");
|
|
19620
19586
|
class ABAPFileInformation {
|
|
19621
|
-
constructor(
|
|
19622
|
-
this.
|
|
19623
|
-
this.implementations = [];
|
|
19624
|
-
this.interfaces = [];
|
|
19625
|
-
this.classes = [];
|
|
19626
|
-
this.filename = filename;
|
|
19627
|
-
this.parse(structure);
|
|
19587
|
+
constructor(parsed) {
|
|
19588
|
+
this.parsed = parsed;
|
|
19628
19589
|
}
|
|
19629
19590
|
listClassImplementations() {
|
|
19630
|
-
return this.implementations;
|
|
19591
|
+
return this.parsed.implementations;
|
|
19631
19592
|
}
|
|
19632
19593
|
listInterfaceDefinitions() {
|
|
19633
|
-
return this.interfaces;
|
|
19594
|
+
return this.parsed.interfaces;
|
|
19634
19595
|
}
|
|
19635
19596
|
getInterfaceDefinitionByName(name) {
|
|
19636
19597
|
const upper = name.toUpperCase();
|
|
@@ -19642,7 +19603,7 @@ class ABAPFileInformation {
|
|
|
19642
19603
|
return undefined;
|
|
19643
19604
|
}
|
|
19644
19605
|
listClassDefinitions() {
|
|
19645
|
-
return this.classes;
|
|
19606
|
+
return this.parsed.classes;
|
|
19646
19607
|
}
|
|
19647
19608
|
getClassDefinitionByName(name) {
|
|
19648
19609
|
const upper = name.toUpperCase();
|
|
@@ -19663,16 +19624,54 @@ class ABAPFileInformation {
|
|
|
19663
19624
|
return undefined;
|
|
19664
19625
|
}
|
|
19665
19626
|
listFormDefinitions() {
|
|
19666
|
-
return this.forms;
|
|
19627
|
+
return this.parsed.forms;
|
|
19628
|
+
}
|
|
19629
|
+
}
|
|
19630
|
+
exports.ABAPFileInformation = ABAPFileInformation;
|
|
19631
|
+
//# sourceMappingURL=abap_file_information.js.map
|
|
19632
|
+
|
|
19633
|
+
/***/ }),
|
|
19634
|
+
|
|
19635
|
+
/***/ "./node_modules/@abaplint/core/build/src/abap/4_file_information/abap_file_information_parser.js":
|
|
19636
|
+
/*!*******************************************************************************************************!*\
|
|
19637
|
+
!*** ./node_modules/@abaplint/core/build/src/abap/4_file_information/abap_file_information_parser.js ***!
|
|
19638
|
+
\*******************************************************************************************************/
|
|
19639
|
+
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
19640
|
+
|
|
19641
|
+
"use strict";
|
|
19642
|
+
|
|
19643
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
19644
|
+
exports.ABAPFileInformationParser = void 0;
|
|
19645
|
+
const Structures = __webpack_require__(/*! ../3_structures/structures */ "./node_modules/@abaplint/core/build/src/abap/3_structures/structures/index.js");
|
|
19646
|
+
const Expressions = __webpack_require__(/*! ../2_statements/expressions */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js");
|
|
19647
|
+
const Statements = __webpack_require__(/*! ../2_statements/statements */ "./node_modules/@abaplint/core/build/src/abap/2_statements/statements/index.js");
|
|
19648
|
+
const _identifier_1 = __webpack_require__(/*! ./_identifier */ "./node_modules/@abaplint/core/build/src/abap/4_file_information/_identifier.js");
|
|
19649
|
+
const Tokens = __webpack_require__(/*! ../1_lexer/tokens */ "./node_modules/@abaplint/core/build/src/abap/1_lexer/tokens/index.js");
|
|
19650
|
+
const visibility_1 = __webpack_require__(/*! ./visibility */ "./node_modules/@abaplint/core/build/src/abap/4_file_information/visibility.js");
|
|
19651
|
+
const _abap_file_information_1 = __webpack_require__(/*! ./_abap_file_information */ "./node_modules/@abaplint/core/build/src/abap/4_file_information/_abap_file_information.js");
|
|
19652
|
+
class ABAPFileInformationParser {
|
|
19653
|
+
constructor(filename) {
|
|
19654
|
+
this.filename = filename;
|
|
19667
19655
|
}
|
|
19668
|
-
///////////////////////
|
|
19669
19656
|
parse(structure) {
|
|
19670
|
-
|
|
19657
|
+
const result = {
|
|
19658
|
+
interfaces: [],
|
|
19659
|
+
classes: [],
|
|
19660
|
+
forms: [],
|
|
19661
|
+
implementations: [],
|
|
19662
|
+
};
|
|
19671
19663
|
if (structure === undefined) {
|
|
19672
|
-
return;
|
|
19664
|
+
return result;
|
|
19673
19665
|
}
|
|
19674
|
-
this.parseClasses(structure);
|
|
19675
|
-
this.parseInterfaces(structure);
|
|
19666
|
+
result.classes = this.parseClasses(structure);
|
|
19667
|
+
result.interfaces = this.parseInterfaces(structure);
|
|
19668
|
+
result.implementations = this.parseClassImplementations(structure);
|
|
19669
|
+
result.forms = this.parseForms(structure);
|
|
19670
|
+
return result;
|
|
19671
|
+
}
|
|
19672
|
+
parseClassImplementations(structure) {
|
|
19673
|
+
var _a;
|
|
19674
|
+
const implementations = [];
|
|
19676
19675
|
for (const found of structure.findAllStructures(Structures.ClassImplementation)) {
|
|
19677
19676
|
const methods = [];
|
|
19678
19677
|
for (const method of found.findAllStructures(Structures.Method)) {
|
|
@@ -19682,24 +19681,30 @@ class ABAPFileInformation {
|
|
|
19682
19681
|
}
|
|
19683
19682
|
}
|
|
19684
19683
|
const name = found.findFirstStatement(Statements.ClassImplementation).findFirstExpression(Expressions.ClassName).getFirstToken();
|
|
19685
|
-
|
|
19684
|
+
implementations.push({
|
|
19686
19685
|
name: name.getStr(),
|
|
19687
19686
|
identifier: new _identifier_1.Identifier(name, this.filename),
|
|
19688
19687
|
methods,
|
|
19689
19688
|
});
|
|
19690
19689
|
}
|
|
19690
|
+
return implementations;
|
|
19691
|
+
}
|
|
19692
|
+
parseForms(structure) {
|
|
19693
|
+
const forms = [];
|
|
19691
19694
|
for (const statement of structure.findAllStructures(Structures.Form)) {
|
|
19692
19695
|
// FORMs can contain a dash in the name
|
|
19693
19696
|
const pos = statement.findFirstExpression(Expressions.FormName).getFirstToken().getStart();
|
|
19694
19697
|
const name = statement.findFirstExpression(Expressions.FormName).concatTokens();
|
|
19695
19698
|
const nameToken = new Tokens.Identifier(pos, name);
|
|
19696
|
-
|
|
19699
|
+
forms.push({
|
|
19697
19700
|
name: nameToken.getStr(),
|
|
19698
19701
|
identifier: new _identifier_1.Identifier(nameToken, this.filename),
|
|
19699
19702
|
});
|
|
19700
19703
|
}
|
|
19704
|
+
return forms;
|
|
19701
19705
|
}
|
|
19702
19706
|
parseInterfaces(structure) {
|
|
19707
|
+
const interfaces = [];
|
|
19703
19708
|
for (const found of structure.findDirectStructures(Structures.Interface)) {
|
|
19704
19709
|
const i = found.findFirstStatement(Statements.Interface);
|
|
19705
19710
|
if (i === undefined) {
|
|
@@ -19711,7 +19716,7 @@ class ABAPFileInformation {
|
|
|
19711
19716
|
const aliases = this.parseAliases(found, visibility_1.Visibility.Public);
|
|
19712
19717
|
const constants = this.parseConstants(found, visibility_1.Visibility.Public);
|
|
19713
19718
|
const g = i.findDirectExpression(Expressions.ClassGlobal);
|
|
19714
|
-
|
|
19719
|
+
interfaces.push({
|
|
19715
19720
|
name: interfaceName.getStr(),
|
|
19716
19721
|
identifier: new _identifier_1.Identifier(interfaceName, this.filename),
|
|
19717
19722
|
isLocal: g === undefined,
|
|
@@ -19723,9 +19728,11 @@ class ABAPFileInformation {
|
|
|
19723
19728
|
attributes,
|
|
19724
19729
|
});
|
|
19725
19730
|
}
|
|
19731
|
+
return interfaces;
|
|
19726
19732
|
}
|
|
19727
19733
|
parseClasses(structure) {
|
|
19728
19734
|
var _a;
|
|
19735
|
+
const classes = [];
|
|
19729
19736
|
for (const found of structure.findAllStructures(Structures.ClassDefinition)) {
|
|
19730
19737
|
const className = found.findFirstStatement(Statements.ClassDefinition).findFirstExpression(Expressions.ClassName).getFirstToken();
|
|
19731
19738
|
const methods = this.parseMethodDefinition(found.findFirstStructure(Structures.PublicSection), visibility_1.Visibility.Public);
|
|
@@ -19764,7 +19771,7 @@ class ABAPFileInformation {
|
|
|
19764
19771
|
else if (concat.includes("DURATION MEDIUM")) {
|
|
19765
19772
|
duration = _abap_file_information_1.Duration.medium;
|
|
19766
19773
|
}
|
|
19767
|
-
|
|
19774
|
+
classes.push({
|
|
19768
19775
|
name: className.getStr(),
|
|
19769
19776
|
identifier: new _identifier_1.Identifier(className, this.filename),
|
|
19770
19777
|
isLocal: containsGlobal === undefined,
|
|
@@ -19783,6 +19790,7 @@ class ABAPFileInformation {
|
|
|
19783
19790
|
constants,
|
|
19784
19791
|
});
|
|
19785
19792
|
}
|
|
19793
|
+
return classes;
|
|
19786
19794
|
}
|
|
19787
19795
|
///////////////////
|
|
19788
19796
|
getImplementing(input) {
|
|
@@ -19981,8 +19989,8 @@ class ABAPFileInformation {
|
|
|
19981
19989
|
return ret;
|
|
19982
19990
|
}
|
|
19983
19991
|
}
|
|
19984
|
-
exports.
|
|
19985
|
-
//# sourceMappingURL=
|
|
19992
|
+
exports.ABAPFileInformationParser = ABAPFileInformationParser;
|
|
19993
|
+
//# sourceMappingURL=abap_file_information_parser.js.map
|
|
19986
19994
|
|
|
19987
19995
|
/***/ }),
|
|
19988
19996
|
|
|
@@ -26953,7 +26961,7 @@ const _syntax_input_1 = __webpack_require__(/*! ../_syntax_input */ "./node_modu
|
|
|
26953
26961
|
const isSimple = /^\w+$/;
|
|
26954
26962
|
class Select {
|
|
26955
26963
|
static runSyntax(node, input, skipImplicitInto = false) {
|
|
26956
|
-
var _a
|
|
26964
|
+
var _a;
|
|
26957
26965
|
const token = node.getFirstToken();
|
|
26958
26966
|
let from = node.findDirectExpression(Expressions.SQLFrom);
|
|
26959
26967
|
if (from === undefined) {
|
|
@@ -26974,10 +26982,8 @@ class Select {
|
|
|
26974
26982
|
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
|
|
26975
26983
|
return;
|
|
26976
26984
|
}
|
|
26977
|
-
const isSingle = ((_a = node.getChildren()[1]) === null || _a === void 0 ? void 0 : _a.concatTokens().toUpperCase()) === "SINGLE"
|
|
26978
|
-
|| node.get() instanceof Expressions.SelectLoop;
|
|
26979
26985
|
this.checkFields(fields, dbSources, input, node);
|
|
26980
|
-
this.handleInto(node, input, fields, dbSources
|
|
26986
|
+
const intoExpression = this.handleInto(node, input, fields, dbSources);
|
|
26981
26987
|
const fae = node.findDirectExpression(Expressions.SQLForAllEntries);
|
|
26982
26988
|
if (fae) {
|
|
26983
26989
|
input.scope.push(_scope_type_1.ScopeType.OpenSQL, "SELECT", token.getStart(), input.filename);
|
|
@@ -26991,7 +26997,7 @@ class Select {
|
|
|
26991
26997
|
&& node.findDirectExpression(Expressions.SQLIntoTable) === undefined
|
|
26992
26998
|
&& node.findDirectExpression(Expressions.SQLIntoList) === undefined
|
|
26993
26999
|
&& node.findDirectExpression(Expressions.SQLIntoStructure) === undefined) {
|
|
26994
|
-
const fields = (
|
|
27000
|
+
const fields = (_a = node.findFirstExpression(Expressions.SQLAggregation)) === null || _a === void 0 ? void 0 : _a.concatTokens();
|
|
26995
27001
|
const c = new RegExp(/^count\(\s*\*\s*\)$/, "i");
|
|
26996
27002
|
if (fields === undefined || c.test(fields) === false) {
|
|
26997
27003
|
const nameToken = from === null || from === void 0 ? void 0 : from.findDirectExpression(Expressions.SQLFromSource);
|
|
@@ -27025,8 +27031,18 @@ class Select {
|
|
|
27025
27031
|
for (const s of node.findAllExpressions(Expressions.SQLCompare)) {
|
|
27026
27032
|
sql_compare_1.SQLCompare.runSyntax(s, input, dbSources);
|
|
27027
27033
|
}
|
|
27028
|
-
|
|
27029
|
-
|
|
27034
|
+
const orderBy = node.findDirectExpression(Expressions.SQLOrderBy);
|
|
27035
|
+
if (orderBy) {
|
|
27036
|
+
sql_order_by_1.SQLOrderBy.runSyntax(orderBy, input);
|
|
27037
|
+
const where = node.findDirectExpression(Expressions.SQLCond);
|
|
27038
|
+
if (intoExpression
|
|
27039
|
+
&& where
|
|
27040
|
+
&& intoExpression.getFirstToken().getStart().isBefore(orderBy.getFirstToken().getStart())
|
|
27041
|
+
&& where.getFirstToken().getStart().isBefore(orderBy.getFirstToken().getStart())
|
|
27042
|
+
&& where.getFirstToken().getStart().isBefore(intoExpression.getFirstToken().getStart())) {
|
|
27043
|
+
const message = `ORDER BY must be before INTO, after WHERE`;
|
|
27044
|
+
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, orderBy.getFirstToken(), message));
|
|
27045
|
+
}
|
|
27030
27046
|
}
|
|
27031
27047
|
if (this.isStrictMode(node)) {
|
|
27032
27048
|
this.strictModeChecks(node, input);
|
|
@@ -27077,13 +27093,14 @@ class Select {
|
|
|
27077
27093
|
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
|
|
27078
27094
|
}
|
|
27079
27095
|
}
|
|
27080
|
-
static handleInto(node, input, fields, dbSources
|
|
27096
|
+
static handleInto(node, input, fields, dbSources) {
|
|
27081
27097
|
const intoTable = node.findDirectExpression(Expressions.SQLIntoTable);
|
|
27082
27098
|
if (intoTable) {
|
|
27083
27099
|
const inline = intoTable.findFirstExpression(Expressions.InlineData);
|
|
27084
27100
|
if (inline) {
|
|
27085
27101
|
inline_data_1.InlineData.runSyntax(inline, input, this.buildTableType(fields, dbSources, input.scope));
|
|
27086
27102
|
}
|
|
27103
|
+
return intoTable;
|
|
27087
27104
|
}
|
|
27088
27105
|
const intoStructure = node.findDirectExpression(Expressions.SQLIntoStructure);
|
|
27089
27106
|
if (intoStructure) {
|
|
@@ -27097,6 +27114,7 @@ class Select {
|
|
|
27097
27114
|
inline_data_1.InlineData.runSyntax(inline, input, basic_1.VoidType.get("SELECT_todo1"));
|
|
27098
27115
|
}
|
|
27099
27116
|
}
|
|
27117
|
+
return intoStructure;
|
|
27100
27118
|
}
|
|
27101
27119
|
const intoList = node.findDirectExpression(Expressions.SQLIntoList);
|
|
27102
27120
|
if (intoList) {
|
|
@@ -27136,7 +27154,9 @@ class Select {
|
|
|
27136
27154
|
inline_data_1.InlineData.runSyntax(inline, input, type);
|
|
27137
27155
|
}
|
|
27138
27156
|
}
|
|
27157
|
+
return intoList;
|
|
27139
27158
|
}
|
|
27159
|
+
return undefined;
|
|
27140
27160
|
}
|
|
27141
27161
|
static checkFields(fields, dbSources, input, node) {
|
|
27142
27162
|
if (dbSources.length > 1) {
|
|
@@ -28029,7 +28049,9 @@ class StringTemplate {
|
|
|
28029
28049
|
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
|
|
28030
28050
|
return basic_1.VoidType.get(_syntax_input_1.CheckSyntaxKey);
|
|
28031
28051
|
}
|
|
28032
|
-
else if ((typeUtils.isCharLike(type) === false
|
|
28052
|
+
else if ((typeUtils.isCharLike(type) === false
|
|
28053
|
+
&& typeUtils.isHexLike(type) === false
|
|
28054
|
+
&& !(type instanceof basic_1.UTCLongType))
|
|
28033
28055
|
|| type instanceof basic_1.StructureType) {
|
|
28034
28056
|
const message = "String template, not character like, " + type.constructor.name;
|
|
28035
28057
|
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
|
|
@@ -29117,9 +29139,10 @@ class Append {
|
|
|
29117
29139
|
if (source) {
|
|
29118
29140
|
if (targetType !== undefined
|
|
29119
29141
|
&& !(targetType instanceof basic_1.TableType)
|
|
29142
|
+
&& !(targetType instanceof basic_1.UnknownType)
|
|
29120
29143
|
&& dataTarget !== target
|
|
29121
29144
|
&& !(targetType instanceof basic_1.VoidType)) {
|
|
29122
|
-
const message =
|
|
29145
|
+
const message = `Append, target not a table type (${targetType.constructor.name})`;
|
|
29123
29146
|
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
|
|
29124
29147
|
return;
|
|
29125
29148
|
}
|
|
@@ -35544,12 +35567,12 @@ class ABAPFile extends _abstract_file_1.AbstractFile {
|
|
|
35544
35567
|
getRaw() {
|
|
35545
35568
|
return this.file.getRaw();
|
|
35546
35569
|
}
|
|
35547
|
-
getInfo() {
|
|
35548
|
-
return this.info;
|
|
35549
|
-
}
|
|
35550
35570
|
getRawRows() {
|
|
35551
35571
|
return this.file.getRawRows();
|
|
35552
35572
|
}
|
|
35573
|
+
getInfo() {
|
|
35574
|
+
return this.info;
|
|
35575
|
+
}
|
|
35553
35576
|
getStructure() {
|
|
35554
35577
|
return this.structure;
|
|
35555
35578
|
}
|
|
@@ -35586,12 +35609,13 @@ exports.ABAPFile = ABAPFile;
|
|
|
35586
35609
|
|
|
35587
35610
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
35588
35611
|
exports.ABAPParser = void 0;
|
|
35589
|
-
const
|
|
35612
|
+
const abap_file_1 = __webpack_require__(/*! ./abap_file */ "./node_modules/@abaplint/core/build/src/abap/abap_file.js");
|
|
35613
|
+
const abap_file_information_1 = __webpack_require__(/*! ./4_file_information/abap_file_information */ "./node_modules/@abaplint/core/build/src/abap/4_file_information/abap_file_information.js");
|
|
35614
|
+
const abap_file_information_parser_1 = __webpack_require__(/*! ./4_file_information/abap_file_information_parser */ "./node_modules/@abaplint/core/build/src/abap/4_file_information/abap_file_information_parser.js");
|
|
35590
35615
|
const lexer_1 = __webpack_require__(/*! ./1_lexer/lexer */ "./node_modules/@abaplint/core/build/src/abap/1_lexer/lexer.js");
|
|
35591
35616
|
const statement_parser_1 = __webpack_require__(/*! ./2_statements/statement_parser */ "./node_modules/@abaplint/core/build/src/abap/2_statements/statement_parser.js");
|
|
35592
35617
|
const structure_parser_1 = __webpack_require__(/*! ./3_structures/structure_parser */ "./node_modules/@abaplint/core/build/src/abap/3_structures/structure_parser.js");
|
|
35593
|
-
const
|
|
35594
|
-
const abap_file_1 = __webpack_require__(/*! ./abap_file */ "./node_modules/@abaplint/core/build/src/abap/abap_file.js");
|
|
35618
|
+
const version_1 = __webpack_require__(/*! ../version */ "./node_modules/@abaplint/core/build/src/version.js");
|
|
35595
35619
|
class ABAPParser {
|
|
35596
35620
|
constructor(version, globalMacros, reg) {
|
|
35597
35621
|
this.version = version ? version : version_1.defaultVersion;
|
|
@@ -35616,7 +35640,9 @@ class ABAPParser {
|
|
|
35616
35640
|
for (const f of statementResult) {
|
|
35617
35641
|
const result = structure_parser_1.StructureParser.run(f);
|
|
35618
35642
|
// 4: file information
|
|
35619
|
-
const
|
|
35643
|
+
const parser = new abap_file_information_parser_1.ABAPFileInformationParser(f.file.getFilename());
|
|
35644
|
+
const parsed = parser.parse(result.node);
|
|
35645
|
+
const info = new abap_file_information_1.ABAPFileInformation(parsed);
|
|
35620
35646
|
output.push(new abap_file_1.ABAPFile(f.file, f.tokens, f.statements, result.node, info));
|
|
35621
35647
|
issues.push(...result.issues);
|
|
35622
35648
|
}
|
|
@@ -40084,7 +40110,12 @@ class CDSLexer {
|
|
|
40084
40110
|
// string handling
|
|
40085
40111
|
if (mode === Mode.String) {
|
|
40086
40112
|
build += next;
|
|
40087
|
-
if (next === "'") {
|
|
40113
|
+
if (next === "'" && nextNext === "'") {
|
|
40114
|
+
// escaped single quote, continue string
|
|
40115
|
+
build += stream.takeNext();
|
|
40116
|
+
col++;
|
|
40117
|
+
}
|
|
40118
|
+
else if (next === "'") {
|
|
40088
40119
|
build = result.add(build, row, col, mode);
|
|
40089
40120
|
mode = Mode.Default;
|
|
40090
40121
|
}
|
|
@@ -41135,7 +41166,7 @@ class CDSString extends combi_1.Expression {
|
|
|
41135
41166
|
getRunnable() {
|
|
41136
41167
|
const abap = (0, combi_1.seq)("abap", ".", (0, combi_1.regex)(/^char'\w'$/));
|
|
41137
41168
|
// https://stackoverflow.com/a/57754227
|
|
41138
|
-
const reg = (0, combi_1.regex)(/^'[A-Za-zÀ-ž\u0370-\u03FF\u0400-\u04FF:\| -_]*'$/);
|
|
41169
|
+
const reg = (0, combi_1.regex)(/^'([A-Za-zÀ-ž\u0370-\u03FF\u0400-\u04FF:\| -_]|'')*'$/);
|
|
41139
41170
|
return (0, combi_1.altPrio)(reg, abap);
|
|
41140
41171
|
}
|
|
41141
41172
|
}
|
|
@@ -45262,6 +45293,7 @@ class ABAPObject extends _abstract_object_1.AbstractObject {
|
|
|
45262
45293
|
setDirty() {
|
|
45263
45294
|
this.syntaxResult = undefined;
|
|
45264
45295
|
this.texts = undefined;
|
|
45296
|
+
this.parsed = [];
|
|
45265
45297
|
super.setDirty();
|
|
45266
45298
|
}
|
|
45267
45299
|
getABAPFiles() {
|
|
@@ -45356,6 +45388,7 @@ class AbstractObject {
|
|
|
45356
45388
|
return this.name;
|
|
45357
45389
|
}
|
|
45358
45390
|
setDirty() {
|
|
45391
|
+
this.old = [];
|
|
45359
45392
|
this.dirty = true;
|
|
45360
45393
|
}
|
|
45361
45394
|
addFile(file) {
|
|
@@ -47803,6 +47836,37 @@ exports.EcattTestScript = EcattTestScript;
|
|
|
47803
47836
|
|
|
47804
47837
|
/***/ }),
|
|
47805
47838
|
|
|
47839
|
+
/***/ "./node_modules/@abaplint/core/build/src/objects/email_template.js":
|
|
47840
|
+
/*!*************************************************************************!*\
|
|
47841
|
+
!*** ./node_modules/@abaplint/core/build/src/objects/email_template.js ***!
|
|
47842
|
+
\*************************************************************************/
|
|
47843
|
+
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
47844
|
+
|
|
47845
|
+
"use strict";
|
|
47846
|
+
|
|
47847
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
47848
|
+
exports.EmailTemplate = void 0;
|
|
47849
|
+
const _abstract_object_1 = __webpack_require__(/*! ./_abstract_object */ "./node_modules/@abaplint/core/build/src/objects/_abstract_object.js");
|
|
47850
|
+
class EmailTemplate extends _abstract_object_1.AbstractObject {
|
|
47851
|
+
getType() {
|
|
47852
|
+
return "SMTG";
|
|
47853
|
+
}
|
|
47854
|
+
getAllowedNaming() {
|
|
47855
|
+
return {
|
|
47856
|
+
maxLength: 60, // todo
|
|
47857
|
+
allowNamespace: true,
|
|
47858
|
+
};
|
|
47859
|
+
}
|
|
47860
|
+
getDescription() {
|
|
47861
|
+
// todo
|
|
47862
|
+
return undefined;
|
|
47863
|
+
}
|
|
47864
|
+
}
|
|
47865
|
+
exports.EmailTemplate = EmailTemplate;
|
|
47866
|
+
//# sourceMappingURL=email_template.js.map
|
|
47867
|
+
|
|
47868
|
+
/***/ }),
|
|
47869
|
+
|
|
47806
47870
|
/***/ "./node_modules/@abaplint/core/build/src/objects/enhancement_implementation.js":
|
|
47807
47871
|
/*!*************************************************************************************!*\
|
|
47808
47872
|
!*** ./node_modules/@abaplint/core/build/src/objects/enhancement_implementation.js ***!
|
|
@@ -48236,6 +48300,8 @@ class FunctionGroup extends _abap_object_1.ABAPObject {
|
|
|
48236
48300
|
super.setDirty();
|
|
48237
48301
|
this.includes = undefined;
|
|
48238
48302
|
this.modules = undefined;
|
|
48303
|
+
this.description = undefined;
|
|
48304
|
+
this.dynpros = undefined;
|
|
48239
48305
|
}
|
|
48240
48306
|
getAllowedNaming() {
|
|
48241
48307
|
return {
|
|
@@ -49092,7 +49158,6 @@ __exportStar(__webpack_require__(/*! ./behavior_definition */ "./node_modules/@a
|
|
|
49092
49158
|
__exportStar(__webpack_require__(/*! ./brf_plus_system_application */ "./node_modules/@abaplint/core/build/src/objects/brf_plus_system_application.js"), exports);
|
|
49093
49159
|
__exportStar(__webpack_require__(/*! ./bsp_application */ "./node_modules/@abaplint/core/build/src/objects/bsp_application.js"), exports);
|
|
49094
49160
|
__exportStar(__webpack_require__(/*! ./business_add_in_implementation */ "./node_modules/@abaplint/core/build/src/objects/business_add_in_implementation.js"), exports);
|
|
49095
|
-
__exportStar(__webpack_require__(/*! ./cds_entity_buffer */ "./node_modules/@abaplint/core/build/src/objects/cds_entity_buffer.js"), exports);
|
|
49096
49161
|
__exportStar(__webpack_require__(/*! ./business_catalog_app_assignment */ "./node_modules/@abaplint/core/build/src/objects/business_catalog_app_assignment.js"), exports);
|
|
49097
49162
|
__exportStar(__webpack_require__(/*! ./business_catalog */ "./node_modules/@abaplint/core/build/src/objects/business_catalog.js"), exports);
|
|
49098
49163
|
__exportStar(__webpack_require__(/*! ./business_configuration_maintenance_object */ "./node_modules/@abaplint/core/build/src/objects/business_configuration_maintenance_object.js"), exports);
|
|
@@ -49101,6 +49166,7 @@ __exportStar(__webpack_require__(/*! ./business_function_assignment */ "./node_m
|
|
|
49101
49166
|
__exportStar(__webpack_require__(/*! ./business_function_set_assignment */ "./node_modules/@abaplint/core/build/src/objects/business_function_set_assignment.js"), exports);
|
|
49102
49167
|
__exportStar(__webpack_require__(/*! ./business_object_model */ "./node_modules/@abaplint/core/build/src/objects/business_object_model.js"), exports);
|
|
49103
49168
|
__exportStar(__webpack_require__(/*! ./business_object_type */ "./node_modules/@abaplint/core/build/src/objects/business_object_type.js"), exports);
|
|
49169
|
+
__exportStar(__webpack_require__(/*! ./cds_entity_buffer */ "./node_modules/@abaplint/core/build/src/objects/cds_entity_buffer.js"), exports);
|
|
49104
49170
|
__exportStar(__webpack_require__(/*! ./cds_metadata_extension */ "./node_modules/@abaplint/core/build/src/objects/cds_metadata_extension.js"), exports);
|
|
49105
49171
|
__exportStar(__webpack_require__(/*! ./cds_type */ "./node_modules/@abaplint/core/build/src/objects/cds_type.js"), exports);
|
|
49106
49172
|
__exportStar(__webpack_require__(/*! ./change_document */ "./node_modules/@abaplint/core/build/src/objects/change_document.js"), exports);
|
|
@@ -49126,6 +49192,7 @@ __exportStar(__webpack_require__(/*! ./domain */ "./node_modules/@abaplint/core/
|
|
|
49126
49192
|
__exportStar(__webpack_require__(/*! ./ecatt_test_configuration */ "./node_modules/@abaplint/core/build/src/objects/ecatt_test_configuration.js"), exports);
|
|
49127
49193
|
__exportStar(__webpack_require__(/*! ./ecatt_test_data_container */ "./node_modules/@abaplint/core/build/src/objects/ecatt_test_data_container.js"), exports);
|
|
49128
49194
|
__exportStar(__webpack_require__(/*! ./ecatt_test_script */ "./node_modules/@abaplint/core/build/src/objects/ecatt_test_script.js"), exports);
|
|
49195
|
+
__exportStar(__webpack_require__(/*! ./email_template */ "./node_modules/@abaplint/core/build/src/objects/email_template.js"), exports);
|
|
49129
49196
|
__exportStar(__webpack_require__(/*! ./enhancement_implementation */ "./node_modules/@abaplint/core/build/src/objects/enhancement_implementation.js"), exports);
|
|
49130
49197
|
__exportStar(__webpack_require__(/*! ./enhancement_spot */ "./node_modules/@abaplint/core/build/src/objects/enhancement_spot.js"), exports);
|
|
49131
49198
|
__exportStar(__webpack_require__(/*! ./entity_type */ "./node_modules/@abaplint/core/build/src/objects/entity_type.js"), exports);
|
|
@@ -49441,6 +49508,7 @@ class LockObject extends _abstract_object_1.AbstractObject {
|
|
|
49441
49508
|
getAllowedNaming() {
|
|
49442
49509
|
return {
|
|
49443
49510
|
maxLength: 16,
|
|
49511
|
+
customRegex: /^(\/[A-Z_\d]{3,8}\/)?E[A-Z0-9_]+$/i,
|
|
49444
49512
|
allowNamespace: true,
|
|
49445
49513
|
};
|
|
49446
49514
|
}
|
|
@@ -52181,6 +52249,13 @@ class Table extends _abstract_object_1.AbstractObject {
|
|
|
52181
52249
|
}
|
|
52182
52250
|
return (_a = this.parsedData) === null || _a === void 0 ? void 0 : _a.description;
|
|
52183
52251
|
}
|
|
52252
|
+
getSecondaryIndexes() {
|
|
52253
|
+
var _a;
|
|
52254
|
+
if (this.parsedData === undefined) {
|
|
52255
|
+
this.parseXML();
|
|
52256
|
+
}
|
|
52257
|
+
return (_a = this.parsedData) === null || _a === void 0 ? void 0 : _a.secondaryIndexes;
|
|
52258
|
+
}
|
|
52184
52259
|
getAllowedNaming() {
|
|
52185
52260
|
let length = 30;
|
|
52186
52261
|
const regex = /^((\/[A-Z_\d]{3,8}\/)|[a-zA-Z0-9]{3}|CI_)\w+$/;
|
|
@@ -52408,7 +52483,7 @@ class Table extends _abstract_object_1.AbstractObject {
|
|
|
52408
52483
|
}
|
|
52409
52484
|
///////////////
|
|
52410
52485
|
parseXML() {
|
|
52411
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
52486
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
|
|
52412
52487
|
const parsed = super.parseRaw2();
|
|
52413
52488
|
if (parsed === undefined) {
|
|
52414
52489
|
return;
|
|
@@ -52447,6 +52522,25 @@ class Table extends _abstract_object_1.AbstractObject {
|
|
|
52447
52522
|
DDTEXT: field.DDTEXT,
|
|
52448
52523
|
});
|
|
52449
52524
|
}
|
|
52525
|
+
// secondary indexes
|
|
52526
|
+
const indexes = (_m = parsed.abapGit["asx:abap"]["asx:values"]) === null || _m === void 0 ? void 0 : _m.DD12V;
|
|
52527
|
+
;
|
|
52528
|
+
this.parsedData.secondaryIndexes = [];
|
|
52529
|
+
for (const index of (0, xml_utils_1.xmlToArray)(indexes === null || indexes === void 0 ? void 0 : indexes.DD12V)) {
|
|
52530
|
+
const indexName = index.INDEXNAME;
|
|
52531
|
+
const indexFields = [];
|
|
52532
|
+
const indexFieldsXml = (_o = parsed.abapGit["asx:abap"]["asx:values"]) === null || _o === void 0 ? void 0 : _o.DD17V;
|
|
52533
|
+
for (const indexField of (0, xml_utils_1.xmlToArray)(indexFieldsXml === null || indexFieldsXml === void 0 ? void 0 : indexFieldsXml.DD17V)) {
|
|
52534
|
+
if (indexField.INDEXNAME === indexName) {
|
|
52535
|
+
// assumption: fields are listed by POSITION in the xml
|
|
52536
|
+
indexFields.push(indexField.FIELDNAME);
|
|
52537
|
+
}
|
|
52538
|
+
}
|
|
52539
|
+
this.parsedData.secondaryIndexes.push({
|
|
52540
|
+
name: indexName,
|
|
52541
|
+
fields: indexFields,
|
|
52542
|
+
});
|
|
52543
|
+
}
|
|
52450
52544
|
}
|
|
52451
52545
|
}
|
|
52452
52546
|
exports.Table = Table;
|
|
@@ -53804,7 +53898,7 @@ class Registry {
|
|
|
53804
53898
|
}
|
|
53805
53899
|
static abaplintVersion() {
|
|
53806
53900
|
// magic, see build script "version.sh"
|
|
53807
|
-
return "2.
|
|
53901
|
+
return "2.114.5";
|
|
53808
53902
|
}
|
|
53809
53903
|
getDDICReferences() {
|
|
53810
53904
|
return this.ddicReferences;
|
|
@@ -55265,14 +55359,14 @@ class AllowedObjectNaming {
|
|
|
55265
55359
|
const name = obj.getName();
|
|
55266
55360
|
let message = "";
|
|
55267
55361
|
if (name.length > allowed.maxLength) {
|
|
55268
|
-
message = "Name exceeds max length";
|
|
55362
|
+
message = "Name exceeds max length, allowed is " + allowed.maxLength;
|
|
55269
55363
|
}
|
|
55270
55364
|
else if (allowed.allowNamespace === false && name.indexOf("/") >= 0) {
|
|
55271
55365
|
message = "Namespace not allowed for object type";
|
|
55272
55366
|
}
|
|
55273
55367
|
else if (allowed.customRegex !== undefined) {
|
|
55274
55368
|
if (name.match(allowed.customRegex) === null) {
|
|
55275
|
-
message = "Name not allowed";
|
|
55369
|
+
message = "Name not allowed, expected to match " + allowed.customRegex.toString();
|
|
55276
55370
|
}
|
|
55277
55371
|
}
|
|
55278
55372
|
else if (name.match(NAME_REGEX) === null) {
|
|
@@ -55877,7 +55971,7 @@ ENDTRY.`,
|
|
|
55877
55971
|
for (const statNode of file.getStatements()) {
|
|
55878
55972
|
const statement = statNode.get();
|
|
55879
55973
|
if (statement instanceof Statements.CallTransaction && !statNode.concatTokensWithoutStringsAndComments().toUpperCase().includes("WITH AUTHORITY-CHECK")) {
|
|
55880
|
-
issues.push(issue_1.Issue.atStatement(file, statNode, this.getMessage(), this.getMetadata().key));
|
|
55974
|
+
issues.push(issue_1.Issue.atStatement(file, statNode, this.getMessage(), this.getMetadata().key, this.getConfig().severity));
|
|
55881
55975
|
}
|
|
55882
55976
|
}
|
|
55883
55977
|
return issues;
|
|
@@ -56058,7 +56152,7 @@ class CDSParserError {
|
|
|
56058
56152
|
title: "CDS Parser Error",
|
|
56059
56153
|
shortDescription: `CDS parsing`,
|
|
56060
56154
|
extendedInformation: `Parses CDS and issues parser errors`,
|
|
56061
|
-
tags: [_irule_1.RuleTag.Syntax],
|
|
56155
|
+
tags: [_irule_1.RuleTag.Syntax, _irule_1.RuleTag.SingleFile],
|
|
56062
56156
|
};
|
|
56063
56157
|
}
|
|
56064
56158
|
getConfig() {
|
|
@@ -56717,6 +56811,10 @@ const _irule_1 = __webpack_require__(/*! ./_irule */ "./node_modules/@abaplint/c
|
|
|
56717
56811
|
const objects_1 = __webpack_require__(/*! ../objects */ "./node_modules/@abaplint/core/build/src/objects/index.js");
|
|
56718
56812
|
const severity_1 = __webpack_require__(/*! ../severity */ "./node_modules/@abaplint/core/build/src/severity.js");
|
|
56719
56813
|
class CheckIncludeConf extends _basic_rule_config_1.BasicRuleConfig {
|
|
56814
|
+
constructor() {
|
|
56815
|
+
super(...arguments);
|
|
56816
|
+
this.allowUnused = false;
|
|
56817
|
+
}
|
|
56720
56818
|
}
|
|
56721
56819
|
exports.CheckIncludeConf = CheckIncludeConf;
|
|
56722
56820
|
class CheckInclude {
|
|
@@ -56744,7 +56842,7 @@ class CheckInclude {
|
|
|
56744
56842
|
}
|
|
56745
56843
|
initialize(reg) {
|
|
56746
56844
|
this.reg = reg;
|
|
56747
|
-
this.graph = new include_graph_1.IncludeGraph(this.reg, this.getConfig().severity || severity_1.Severity.Error);
|
|
56845
|
+
this.graph = new include_graph_1.IncludeGraph(this.reg, this.getConfig().severity || severity_1.Severity.Error, this.getConfig().allowUnused || false);
|
|
56748
56846
|
return this;
|
|
56749
56847
|
}
|
|
56750
56848
|
run(obj) {
|
|
@@ -64710,8 +64808,7 @@ https://help.sap.com/doc/abapdocu_751_index_htm/7.51/en-us/abapstart-of-selectio
|
|
|
64710
64808
|
tags: [_irule_1.RuleTag.SingleFile],
|
|
64711
64809
|
badExample: `REPORT zfoo.
|
|
64712
64810
|
WRITE 'hello'.`,
|
|
64713
|
-
goodExample: `
|
|
64714
|
-
START-OF-SELECTION.
|
|
64811
|
+
goodExample: `START-OF-SELECTION.
|
|
64715
64812
|
WRITE 'hello'.`,
|
|
64716
64813
|
};
|
|
64717
64814
|
}
|
|
@@ -65164,6 +65261,7 @@ __exportStar(__webpack_require__(/*! ./implement_methods */ "./node_modules/@aba
|
|
|
65164
65261
|
__exportStar(__webpack_require__(/*! ./implicit_start_of_selection */ "./node_modules/@abaplint/core/build/src/rules/implicit_start_of_selection.js"), exports);
|
|
65165
65262
|
__exportStar(__webpack_require__(/*! ./in_statement_indentation */ "./node_modules/@abaplint/core/build/src/rules/in_statement_indentation.js"), exports);
|
|
65166
65263
|
__exportStar(__webpack_require__(/*! ./indentation */ "./node_modules/@abaplint/core/build/src/rules/indentation.js"), exports);
|
|
65264
|
+
__exportStar(__webpack_require__(/*! ./index_completely_contained */ "./node_modules/@abaplint/core/build/src/rules/index_completely_contained.js"), exports);
|
|
65167
65265
|
__exportStar(__webpack_require__(/*! ./inline_data_old_versions */ "./node_modules/@abaplint/core/build/src/rules/inline_data_old_versions.js"), exports);
|
|
65168
65266
|
__exportStar(__webpack_require__(/*! ./intf_referencing_clas */ "./node_modules/@abaplint/core/build/src/rules/intf_referencing_clas.js"), exports);
|
|
65169
65267
|
__exportStar(__webpack_require__(/*! ./invalid_table_index */ "./node_modules/@abaplint/core/build/src/rules/invalid_table_index.js"), exports);
|
|
@@ -65270,6 +65368,83 @@ __exportStar(__webpack_require__(/*! ./xml_consistency */ "./node_modules/@abapl
|
|
|
65270
65368
|
|
|
65271
65369
|
/***/ }),
|
|
65272
65370
|
|
|
65371
|
+
/***/ "./node_modules/@abaplint/core/build/src/rules/index_completely_contained.js":
|
|
65372
|
+
/*!***********************************************************************************!*\
|
|
65373
|
+
!*** ./node_modules/@abaplint/core/build/src/rules/index_completely_contained.js ***!
|
|
65374
|
+
\***********************************************************************************/
|
|
65375
|
+
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
65376
|
+
|
|
65377
|
+
"use strict";
|
|
65378
|
+
|
|
65379
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
65380
|
+
exports.IndexCompletelyContained = exports.IndexCompletelyContainedConf = void 0;
|
|
65381
|
+
const _basic_rule_config_1 = __webpack_require__(/*! ./_basic_rule_config */ "./node_modules/@abaplint/core/build/src/rules/_basic_rule_config.js");
|
|
65382
|
+
const _irule_1 = __webpack_require__(/*! ./_irule */ "./node_modules/@abaplint/core/build/src/rules/_irule.js");
|
|
65383
|
+
const issue_1 = __webpack_require__(/*! ../issue */ "./node_modules/@abaplint/core/build/src/issue.js");
|
|
65384
|
+
const position_1 = __webpack_require__(/*! ../position */ "./node_modules/@abaplint/core/build/src/position.js");
|
|
65385
|
+
const Objects = __webpack_require__(/*! ../objects */ "./node_modules/@abaplint/core/build/src/objects/index.js");
|
|
65386
|
+
class IndexCompletelyContainedConf extends _basic_rule_config_1.BasicRuleConfig {
|
|
65387
|
+
}
|
|
65388
|
+
exports.IndexCompletelyContainedConf = IndexCompletelyContainedConf;
|
|
65389
|
+
class IndexCompletelyContained {
|
|
65390
|
+
constructor() {
|
|
65391
|
+
this.conf = new IndexCompletelyContainedConf();
|
|
65392
|
+
}
|
|
65393
|
+
getMetadata() {
|
|
65394
|
+
return {
|
|
65395
|
+
key: "index_completely_contained",
|
|
65396
|
+
title: "Check if database table indexes are completely contained",
|
|
65397
|
+
shortDescription: `If indexes are completely contained in other indexes, they can be removed to improve performance.`,
|
|
65398
|
+
tags: [_irule_1.RuleTag.Performance, _irule_1.RuleTag.SingleFile],
|
|
65399
|
+
};
|
|
65400
|
+
}
|
|
65401
|
+
initialize() {
|
|
65402
|
+
return this;
|
|
65403
|
+
}
|
|
65404
|
+
getConfig() {
|
|
65405
|
+
return this.conf;
|
|
65406
|
+
}
|
|
65407
|
+
setConfig(conf) {
|
|
65408
|
+
this.conf = conf;
|
|
65409
|
+
}
|
|
65410
|
+
run(obj) {
|
|
65411
|
+
if (!(obj instanceof Objects.Table)) {
|
|
65412
|
+
return [];
|
|
65413
|
+
}
|
|
65414
|
+
const indexes = obj.getSecondaryIndexes();
|
|
65415
|
+
if (indexes === undefined || indexes.length === 0) {
|
|
65416
|
+
return [];
|
|
65417
|
+
}
|
|
65418
|
+
const issues = [];
|
|
65419
|
+
for (let i = 0; i < indexes.length; i++) {
|
|
65420
|
+
const indexA = indexes[i];
|
|
65421
|
+
for (let j = 0; j < indexes.length; j++) {
|
|
65422
|
+
if (i === j) {
|
|
65423
|
+
continue;
|
|
65424
|
+
}
|
|
65425
|
+
const indexB = indexes[j];
|
|
65426
|
+
let contained = true;
|
|
65427
|
+
for (const field of indexA.fields) {
|
|
65428
|
+
if (indexB.fields.indexOf(field) === -1) {
|
|
65429
|
+
contained = false;
|
|
65430
|
+
break;
|
|
65431
|
+
}
|
|
65432
|
+
}
|
|
65433
|
+
if (contained) {
|
|
65434
|
+
const position = new position_1.Position(1, 1);
|
|
65435
|
+
const message = `Index "${indexA.name}" is completely contained in index "${indexB.name}"`;
|
|
65436
|
+
issues.push(issue_1.Issue.atPosition(obj.getFiles()[0], position, message, this.getMetadata().key, this.conf.severity));
|
|
65437
|
+
}
|
|
65438
|
+
}
|
|
65439
|
+
}
|
|
65440
|
+
return issues;
|
|
65441
|
+
}
|
|
65442
|
+
}
|
|
65443
|
+
exports.IndexCompletelyContained = IndexCompletelyContained;
|
|
65444
|
+
//# sourceMappingURL=index_completely_contained.js.map
|
|
65445
|
+
|
|
65446
|
+
/***/ }),
|
|
65447
|
+
|
|
65273
65448
|
/***/ "./node_modules/@abaplint/core/build/src/rules/inline_data_old_versions.js":
|
|
65274
65449
|
/*!*********************************************************************************!*\
|
|
65275
65450
|
!*** ./node_modules/@abaplint/core/build/src/rules/inline_data_old_versions.js ***!
|
|
@@ -77442,11 +77617,12 @@ class Graph {
|
|
|
77442
77617
|
}
|
|
77443
77618
|
}
|
|
77444
77619
|
class IncludeGraph {
|
|
77445
|
-
constructor(reg, severity = severity_1.Severity.Error) {
|
|
77620
|
+
constructor(reg, severity = severity_1.Severity.Error, allowUnused = false) {
|
|
77446
77621
|
this.reg = reg;
|
|
77447
77622
|
this.issues = [];
|
|
77448
77623
|
this.graph = new Graph();
|
|
77449
77624
|
this.severity = severity;
|
|
77625
|
+
this.allowUnused = allowUnused;
|
|
77450
77626
|
this.build();
|
|
77451
77627
|
}
|
|
77452
77628
|
listMainForInclude(filename) {
|
|
@@ -77470,6 +77646,7 @@ class IncludeGraph {
|
|
|
77470
77646
|
}
|
|
77471
77647
|
const v = this.graph.findVertexByFilename(file.getFilename());
|
|
77472
77648
|
if (v !== undefined
|
|
77649
|
+
&& this.allowUnused === false
|
|
77473
77650
|
&& v.include === true
|
|
77474
77651
|
&& this.listMainForInclude(v.filename).length === 0) {
|
|
77475
77652
|
const f = this.reg.getFileByName(v.filename);
|
|
@@ -83053,27 +83230,28 @@ exports.HandleDataElement = HandleDataElement;
|
|
|
83053
83230
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
83054
83231
|
exports.HandleEnqu = void 0;
|
|
83055
83232
|
const chunk_1 = __webpack_require__(/*! ../chunk */ "./node_modules/@abaplint/transpiler/build/src/chunk.js");
|
|
83056
|
-
// view, much like the tables
|
|
83057
83233
|
class HandleEnqu {
|
|
83058
83234
|
runObject(obj, _reg) {
|
|
83059
83235
|
const filename = obj.getXMLFile()?.getFilename().replace(".xml", ".mjs").toLowerCase();
|
|
83060
83236
|
if (filename === undefined) {
|
|
83061
83237
|
return [];
|
|
83062
83238
|
}
|
|
83239
|
+
const tableName = obj.getPrimaryTable();
|
|
83063
83240
|
const chunk = new chunk_1.Chunk().appendString(`// enqueue object
|
|
83064
83241
|
abap.FunctionModules["ENQUEUE_${obj.getName().toUpperCase()}"] = async (INPUT) => {
|
|
83065
83242
|
const lookup = abap.Classes["KERNEL_LOCK"];
|
|
83066
83243
|
if (lookup === undefined) {
|
|
83067
83244
|
throw new Error("Lock, kernel class missing");
|
|
83068
83245
|
}
|
|
83069
|
-
await lookup.enqueue(INPUT);
|
|
83246
|
+
await lookup.enqueue({TABLE_NAME: "${tableName}", ENQUEUE_NAME: "${obj.getName().toUpperCase()}", ...INPUT});
|
|
83070
83247
|
};
|
|
83248
|
+
|
|
83071
83249
|
abap.FunctionModules["DEQUEUE_${obj.getName().toUpperCase()}"] = async (INPUT) => {
|
|
83072
83250
|
const lookup = abap.Classes["KERNEL_LOCK"];
|
|
83073
83251
|
if (lookup === undefined) {
|
|
83074
83252
|
throw new Error("Lock, kernel class missing");
|
|
83075
83253
|
}
|
|
83076
|
-
await lookup.dequeue(INPUT);
|
|
83254
|
+
await lookup.dequeue({TABLE_NAME: "${tableName}", ENQUEUE_NAME: "${obj.getName().toUpperCase()}", ...INPUT});
|
|
83077
83255
|
};`);
|
|
83078
83256
|
const output = {
|
|
83079
83257
|
object: {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@abaplint/transpiler-cli",
|
|
3
|
-
"version": "2.12.
|
|
3
|
+
"version": "2.12.14",
|
|
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.
|
|
31
|
-
"@abaplint/transpiler": "^2.12.
|
|
30
|
+
"@abaplint/core": "^2.114.5",
|
|
31
|
+
"@abaplint/transpiler": "^2.12.14",
|
|
32
32
|
"@types/glob": "^8.1.0",
|
|
33
33
|
"@types/node": "^24.10.1",
|
|
34
34
|
"@types/progress": "^2.0.7",
|
package/schema.json
DELETED
|
@@ -1,219 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$ref": "#/definitions/ITranspilerConfig",
|
|
3
|
-
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
4
|
-
"definitions": {
|
|
5
|
-
"ITranspilerConfig": {
|
|
6
|
-
"additionalProperties": false,
|
|
7
|
-
"properties": {
|
|
8
|
-
"exclude_filter": {
|
|
9
|
-
"description": "list of regex, case insensitive",
|
|
10
|
-
"items": {
|
|
11
|
-
"type": "string"
|
|
12
|
-
},
|
|
13
|
-
"type": "array",
|
|
14
|
-
"uniqueItems": true
|
|
15
|
-
},
|
|
16
|
-
"input_filter": {
|
|
17
|
-
"description": "list of regex, case insensitive, empty gives all files, positive list",
|
|
18
|
-
"items": {
|
|
19
|
-
"type": "string"
|
|
20
|
-
},
|
|
21
|
-
"type": "array",
|
|
22
|
-
"uniqueItems": true
|
|
23
|
-
},
|
|
24
|
-
"input_folder": {
|
|
25
|
-
"anyOf": [
|
|
26
|
-
{
|
|
27
|
-
"type": "string"
|
|
28
|
-
},
|
|
29
|
-
{
|
|
30
|
-
"items": {
|
|
31
|
-
"type": "string"
|
|
32
|
-
},
|
|
33
|
-
"type": "array"
|
|
34
|
-
}
|
|
35
|
-
]
|
|
36
|
-
},
|
|
37
|
-
"libs": {
|
|
38
|
-
"items": {
|
|
39
|
-
"additionalProperties": false,
|
|
40
|
-
"properties": {
|
|
41
|
-
"exclude_filter": {
|
|
42
|
-
"description": "list of regex, case insensitive",
|
|
43
|
-
"items": {
|
|
44
|
-
"type": "string"
|
|
45
|
-
},
|
|
46
|
-
"type": "array",
|
|
47
|
-
"uniqueItems": true
|
|
48
|
-
},
|
|
49
|
-
"files": {
|
|
50
|
-
"anyOf": [
|
|
51
|
-
{
|
|
52
|
-
"type": "string"
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
"items": {
|
|
56
|
-
"type": "string"
|
|
57
|
-
},
|
|
58
|
-
"type": "array"
|
|
59
|
-
}
|
|
60
|
-
]
|
|
61
|
-
},
|
|
62
|
-
"folder": {
|
|
63
|
-
"type": "string"
|
|
64
|
-
},
|
|
65
|
-
"url": {
|
|
66
|
-
"type": "string"
|
|
67
|
-
}
|
|
68
|
-
},
|
|
69
|
-
"type": "object"
|
|
70
|
-
},
|
|
71
|
-
"type": "array"
|
|
72
|
-
},
|
|
73
|
-
"options": {
|
|
74
|
-
"$ref": "#/definitions/ITranspilerOptions"
|
|
75
|
-
},
|
|
76
|
-
"output_folder": {
|
|
77
|
-
"type": "string"
|
|
78
|
-
},
|
|
79
|
-
"write_source_map": {
|
|
80
|
-
"type": "boolean"
|
|
81
|
-
},
|
|
82
|
-
"write_unit_tests": {
|
|
83
|
-
"type": "boolean"
|
|
84
|
-
}
|
|
85
|
-
},
|
|
86
|
-
"required": [
|
|
87
|
-
"input_folder",
|
|
88
|
-
"output_folder",
|
|
89
|
-
"options"
|
|
90
|
-
],
|
|
91
|
-
"type": "object"
|
|
92
|
-
},
|
|
93
|
-
"ITranspilerOptions": {
|
|
94
|
-
"additionalProperties": false,
|
|
95
|
-
"properties": {
|
|
96
|
-
"addCommonJS": {
|
|
97
|
-
"description": "adds common js modules",
|
|
98
|
-
"type": "boolean"
|
|
99
|
-
},
|
|
100
|
-
"addFilenames": {
|
|
101
|
-
"description": "adds filenames as comments in the output js",
|
|
102
|
-
"type": "boolean"
|
|
103
|
-
},
|
|
104
|
-
"ignoreSourceMap": {
|
|
105
|
-
"description": "ignore source map",
|
|
106
|
-
"type": "boolean"
|
|
107
|
-
},
|
|
108
|
-
"ignoreSyntaxCheck": {
|
|
109
|
-
"description": "ignore syntax check, used for internal testing",
|
|
110
|
-
"type": "boolean"
|
|
111
|
-
},
|
|
112
|
-
"importProg": {
|
|
113
|
-
"description": "import programs",
|
|
114
|
-
"type": "boolean"
|
|
115
|
-
},
|
|
116
|
-
"keywords": {
|
|
117
|
-
"description": "list of keywords to rename, if not supplied default will be used",
|
|
118
|
-
"items": {
|
|
119
|
-
"type": "string"
|
|
120
|
-
},
|
|
121
|
-
"type": "array"
|
|
122
|
-
},
|
|
123
|
-
"populateTables": {
|
|
124
|
-
"additionalProperties": false,
|
|
125
|
-
"description": "populate tables, all tables are populated if undefined and they exist",
|
|
126
|
-
"properties": {
|
|
127
|
-
"reposrc": {
|
|
128
|
-
"description": "insert into REPOSRC, skips if equals false",
|
|
129
|
-
"type": "boolean"
|
|
130
|
-
},
|
|
131
|
-
"seosubco": {
|
|
132
|
-
"description": "insert into SEOSUBCO, skips if equals false",
|
|
133
|
-
"type": "boolean"
|
|
134
|
-
},
|
|
135
|
-
"seosubcodf": {
|
|
136
|
-
"description": "insert into SEOSUBCODF, skips if equals false",
|
|
137
|
-
"type": "boolean"
|
|
138
|
-
},
|
|
139
|
-
"seosubcotx": {
|
|
140
|
-
"description": "insert into SEOSUBCOTX, skips if equals false",
|
|
141
|
-
"type": "boolean"
|
|
142
|
-
}
|
|
143
|
-
},
|
|
144
|
-
"type": "object"
|
|
145
|
-
},
|
|
146
|
-
"setup": {
|
|
147
|
-
"additionalProperties": false,
|
|
148
|
-
"description": "extra setup script to be executed during initialization",
|
|
149
|
-
"properties": {
|
|
150
|
-
"filename": {
|
|
151
|
-
"type": "string"
|
|
152
|
-
},
|
|
153
|
-
"postFunction": {
|
|
154
|
-
"type": "string"
|
|
155
|
-
},
|
|
156
|
-
"preFunction": {
|
|
157
|
-
"type": "string"
|
|
158
|
-
}
|
|
159
|
-
},
|
|
160
|
-
"required": [
|
|
161
|
-
"filename"
|
|
162
|
-
],
|
|
163
|
-
"type": "object"
|
|
164
|
-
},
|
|
165
|
-
"skip": {
|
|
166
|
-
"$ref": "#/definitions/TestMethodList",
|
|
167
|
-
"description": "list of unit tests to skip"
|
|
168
|
-
},
|
|
169
|
-
"skipVersionCheck": {
|
|
170
|
-
"description": "skips version check, not recommended",
|
|
171
|
-
"type": "boolean"
|
|
172
|
-
},
|
|
173
|
-
"unknownTypes": {
|
|
174
|
-
"$ref": "#/definitions/UnknownTypesEnum",
|
|
175
|
-
"description": "sets behavior for unknown types, either fail at compile- or run-time"
|
|
176
|
-
}
|
|
177
|
-
},
|
|
178
|
-
"type": "object"
|
|
179
|
-
},
|
|
180
|
-
"TestMethodList": {
|
|
181
|
-
"items": {
|
|
182
|
-
"additionalProperties": false,
|
|
183
|
-
"properties": {
|
|
184
|
-
"class": {
|
|
185
|
-
"pattern": "^[a-zA-Z0-9_\\/]+$",
|
|
186
|
-
"type": "string"
|
|
187
|
-
},
|
|
188
|
-
"method": {
|
|
189
|
-
"pattern": "^[a-zA-Z0-9_\\/]+$",
|
|
190
|
-
"type": "string"
|
|
191
|
-
},
|
|
192
|
-
"note": {
|
|
193
|
-
"type": "string"
|
|
194
|
-
},
|
|
195
|
-
"object": {
|
|
196
|
-
"pattern": "^[a-zA-Z0-9_\\/]+$",
|
|
197
|
-
"type": "string"
|
|
198
|
-
}
|
|
199
|
-
},
|
|
200
|
-
"required": [
|
|
201
|
-
"object",
|
|
202
|
-
"class",
|
|
203
|
-
"method"
|
|
204
|
-
],
|
|
205
|
-
"type": "object"
|
|
206
|
-
},
|
|
207
|
-
"type": "array",
|
|
208
|
-
"uniqueItems": true
|
|
209
|
-
},
|
|
210
|
-
"UnknownTypesEnum": {
|
|
211
|
-
"enum": [
|
|
212
|
-
"compileError",
|
|
213
|
-
"runtimeError"
|
|
214
|
-
],
|
|
215
|
-
"type": "string"
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
|