@abaplint/cli 2.91.37 → 2.92.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/build/cli.js +19 -8
  2. package/package.json +3 -3
package/build/cli.js CHANGED
@@ -2304,7 +2304,7 @@ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\n
2304
2304
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
2305
2305
 
2306
2306
  "use strict";
2307
- eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.SQLTarget = void 0;\r\nconst combi_1 = __webpack_require__(/*! ../combi */ \"./node_modules/@abaplint/core/build/src/abap/2_statements/combi.js\");\r\nconst version_1 = __webpack_require__(/*! ../../../version */ \"./node_modules/@abaplint/core/build/src/version.js\");\r\nconst tokens_1 = __webpack_require__(/*! ../../1_lexer/tokens */ \"./node_modules/@abaplint/core/build/src/abap/1_lexer/tokens/index.js\");\r\nconst _1 = __webpack_require__(/*! . */ \"./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js\");\r\nclass SQLTarget extends combi_1.Expression {\r\n getRunnable() {\r\n const at = (0, combi_1.ver)(version_1.Version.v740sp05, (0, combi_1.seq)((0, combi_1.altPrio)((0, combi_1.tok)(tokens_1.WAt), (0, combi_1.tok)(tokens_1.At)), _1.Target));\r\n return (0, combi_1.altPrio)(at, _1.Target);\r\n }\r\n}\r\nexports.SQLTarget = SQLTarget;\r\n//# sourceMappingURL=sql_target.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_target.js?");
2307
+ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.SQLTarget = void 0;\r\nconst combi_1 = __webpack_require__(/*! ../combi */ \"./node_modules/@abaplint/core/build/src/abap/2_statements/combi.js\");\r\nconst version_1 = __webpack_require__(/*! ../../../version */ \"./node_modules/@abaplint/core/build/src/version.js\");\r\nconst tokens_1 = __webpack_require__(/*! ../../1_lexer/tokens */ \"./node_modules/@abaplint/core/build/src/abap/1_lexer/tokens/index.js\");\r\nconst _1 = __webpack_require__(/*! . */ \"./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js\");\r\nclass SQLTarget extends combi_1.Expression {\r\n getRunnable() {\r\n const n = (0, combi_1.ver)(version_1.Version.v754, \"NEW\");\r\n const at = (0, combi_1.ver)(version_1.Version.v740sp05, (0, combi_1.seq)((0, combi_1.opt)(n), (0, combi_1.altPrio)((0, combi_1.tok)(tokens_1.WAt), (0, combi_1.tok)(tokens_1.At)), _1.Target));\r\n return (0, combi_1.altPrio)(at, _1.Target);\r\n }\r\n}\r\nexports.SQLTarget = SQLTarget;\r\n//# sourceMappingURL=sql_target.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_target.js?");
2308
2308
 
2309
2309
  /***/ }),
2310
2310
 
@@ -7045,7 +7045,7 @@ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\n
7045
7045
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
7046
7046
 
7047
7047
  "use strict";
7048
- eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.MethodCallParam = void 0;\r\nconst nodes_1 = __webpack_require__(/*! ../../nodes */ \"./node_modules/@abaplint/core/build/src/abap/nodes/index.js\");\r\nconst basic_1 = __webpack_require__(/*! ../../types/basic */ \"./node_modules/@abaplint/core/build/src/abap/types/basic/index.js\");\r\nconst Expressions = __webpack_require__(/*! ../../2_statements/expressions */ \"./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js\");\r\nconst method_parameters_1 = __webpack_require__(/*! ./method_parameters */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/method_parameters.js\");\r\nconst tokens_1 = __webpack_require__(/*! ../../1_lexer/tokens */ \"./node_modules/@abaplint/core/build/src/abap/1_lexer/tokens/index.js\");\r\nconst source_1 = __webpack_require__(/*! ./source */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/source.js\");\r\nconst _type_utils_1 = __webpack_require__(/*! ../_type_utils */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/_type_utils.js\");\r\nclass MethodCallParam {\r\n runSyntax(node, scope, method, filename) {\r\n if (!(node.get() instanceof Expressions.MethodCallParam)) {\r\n throw new Error(\"MethodCallParam, unexpected input\");\r\n }\r\n const children = node.getChildren();\r\n if (children.length < 2 || children.length > 3) {\r\n throw new Error(\"MethodCallParam, unexpected child length\");\r\n }\r\n const child = children[1];\r\n if (child.get() instanceof tokens_1.WParenRight || child.get() instanceof tokens_1.WParenRightW) {\r\n if (!(method instanceof basic_1.VoidType)) {\r\n const required = method.getParameters().getRequiredParameters();\r\n if (required.length > 0) {\r\n throw new Error(\"Parameter \\\"\" + required[0].getName() + \"\\\" must be supplied\");\r\n }\r\n }\r\n }\r\n else if (child instanceof nodes_1.ExpressionNode && child.get() instanceof Expressions.Source) {\r\n if (!(method instanceof basic_1.VoidType) && method.getParameters().getImporting().length === 0) {\r\n throw new Error(\"Method \\\"\" + method.getName() + \"\\\" has no importing parameters\");\r\n }\r\n let targetType = undefined;\r\n if (!(method instanceof basic_1.VoidType)) {\r\n const name = method.getParameters().getDefaultImporting();\r\n if (name === undefined) {\r\n throw new Error(\"No default importing parameter\");\r\n }\r\n for (const i of method.getParameters().getImporting()) {\r\n if (i.getName().toUpperCase() === name) {\r\n targetType = i.getType();\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n targetType = method;\r\n }\r\n const sourceType = new source_1.Source().runSyntax(child, scope, filename, targetType);\r\n if (sourceType === undefined) {\r\n throw new Error(\"No source type determined, method source\");\r\n }\r\n else if (new _type_utils_1.TypeUtils(scope).isAssignable(sourceType, targetType) === false) {\r\n throw new Error(\"Method parameter type not compatible\");\r\n }\r\n }\r\n else if (child instanceof nodes_1.ExpressionNode && child.get() instanceof Expressions.ParameterListS) {\r\n new method_parameters_1.MethodParameters().checkExporting(child, scope, method, filename);\r\n }\r\n else if (child.get() instanceof Expressions.MethodParameters) {\r\n new method_parameters_1.MethodParameters().runSyntax(child, scope, method, filename);\r\n }\r\n else {\r\n // console.dir(child);\r\n throw new Error(\"MethodCallParam, unexpected child\");\r\n }\r\n }\r\n}\r\nexports.MethodCallParam = MethodCallParam;\r\n//# sourceMappingURL=method_call_param.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/method_call_param.js?");
7048
+ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.MethodCallParam = void 0;\r\nconst nodes_1 = __webpack_require__(/*! ../../nodes */ \"./node_modules/@abaplint/core/build/src/abap/nodes/index.js\");\r\nconst basic_1 = __webpack_require__(/*! ../../types/basic */ \"./node_modules/@abaplint/core/build/src/abap/types/basic/index.js\");\r\nconst Expressions = __webpack_require__(/*! ../../2_statements/expressions */ \"./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js\");\r\nconst method_parameters_1 = __webpack_require__(/*! ./method_parameters */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/method_parameters.js\");\r\nconst tokens_1 = __webpack_require__(/*! ../../1_lexer/tokens */ \"./node_modules/@abaplint/core/build/src/abap/1_lexer/tokens/index.js\");\r\nconst source_1 = __webpack_require__(/*! ./source */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/source.js\");\r\nconst _type_utils_1 = __webpack_require__(/*! ../_type_utils */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/_type_utils.js\");\r\nclass MethodCallParam {\r\n runSyntax(node, scope, method, filename) {\r\n if (!(node.get() instanceof Expressions.MethodCallParam)) {\r\n throw new Error(\"MethodCallParam, unexpected input\");\r\n }\r\n const children = node.getChildren();\r\n if (children.length < 2 || children.length > 3) {\r\n throw new Error(\"MethodCallParam, unexpected child length\");\r\n }\r\n const child = children[1];\r\n if (child.get() instanceof tokens_1.WParenRight || child.get() instanceof tokens_1.WParenRightW) {\r\n if (!(method instanceof basic_1.VoidType)) {\r\n const required = method.getParameters().getRequiredParameters();\r\n if (required.length > 0) {\r\n throw new Error(\"Parameter \\\"\" + required[0].getName() + \"\\\" must be supplied\");\r\n }\r\n }\r\n }\r\n else if (child instanceof nodes_1.ExpressionNode\r\n && (child.get() instanceof Expressions.Source\r\n || child.get() instanceof Expressions.ConstantString)) {\r\n if (!(method instanceof basic_1.VoidType) && method.getParameters().getImporting().length === 0) {\r\n throw new Error(\"Method \\\"\" + method.getName() + \"\\\" has no importing parameters\");\r\n }\r\n let targetType = undefined;\r\n if (!(method instanceof basic_1.VoidType)) {\r\n const name = method.getParameters().getDefaultImporting();\r\n if (name === undefined) {\r\n throw new Error(\"No default importing parameter\");\r\n }\r\n for (const i of method.getParameters().getImporting()) {\r\n if (i.getName().toUpperCase() === name) {\r\n targetType = i.getType();\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n targetType = method;\r\n }\r\n let sourceType = new basic_1.StringType();\r\n if (child.get() instanceof Expressions.Source) {\r\n sourceType = new source_1.Source().runSyntax(child, scope, filename, targetType);\r\n }\r\n if (sourceType === undefined) {\r\n throw new Error(\"No source type determined, method source\");\r\n }\r\n else if (new _type_utils_1.TypeUtils(scope).isAssignable(sourceType, targetType) === false) {\r\n throw new Error(\"Method parameter type not compatible\");\r\n }\r\n }\r\n else if (child instanceof nodes_1.ExpressionNode && child.get() instanceof Expressions.ParameterListS) {\r\n new method_parameters_1.MethodParameters().checkExporting(child, scope, method, filename);\r\n }\r\n else if (child.get() instanceof Expressions.MethodParameters) {\r\n new method_parameters_1.MethodParameters().runSyntax(child, scope, method, filename);\r\n }\r\n else {\r\n // console.dir(child);\r\n throw new Error(\"MethodCallParam, unexpected child\");\r\n }\r\n }\r\n}\r\nexports.MethodCallParam = MethodCallParam;\r\n//# sourceMappingURL=method_call_param.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/method_call_param.js?");
7049
7049
 
7050
7050
  /***/ }),
7051
7051
 
@@ -9223,7 +9223,7 @@ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\n
9223
9223
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
9224
9224
 
9225
9225
  "use strict";
9226
- eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.FunctionModuleDefinition = exports.FunctionModuleParameterDirection = void 0;\r\nconst xml_utils_1 = __webpack_require__(/*! ../../xml_utils */ \"./node_modules/@abaplint/core/build/src/xml_utils.js\");\r\nvar FunctionModuleParameterDirection;\r\n(function (FunctionModuleParameterDirection) {\r\n FunctionModuleParameterDirection[\"importing\"] = \"importing\";\r\n FunctionModuleParameterDirection[\"exporting\"] = \"exporting\";\r\n FunctionModuleParameterDirection[\"changing\"] = \"changing\";\r\n FunctionModuleParameterDirection[\"tables\"] = \"tables\";\r\n})(FunctionModuleParameterDirection = exports.FunctionModuleParameterDirection || (exports.FunctionModuleParameterDirection = {}));\r\nclass FunctionModuleDefinition {\r\n constructor(data) {\r\n this.parse(data);\r\n }\r\n getParameters() {\r\n return this.parameters;\r\n }\r\n getDescription() {\r\n return this.description;\r\n }\r\n getName() {\r\n return this.name;\r\n }\r\n ///////////////\r\n parse(data) {\r\n if (data.FUNCNAME === undefined) {\r\n throw new Error(\"Function module name undefined\");\r\n }\r\n this.name = data.FUNCNAME;\r\n this.description = data.SHORT_TEXT;\r\n this.parameters = [];\r\n if (data.IMPORT) {\r\n for (const param of (0, xml_utils_1.xmlToArray)(data.IMPORT.RSIMP)) {\r\n if (param.PARAMETER === undefined) {\r\n throw new Error(\"Function module name parameter undefined, importing\");\r\n }\r\n this.parameters.push({\r\n name: param.PARAMETER,\r\n direction: FunctionModuleParameterDirection.importing,\r\n type: param.TYP || param.DBFIELD,\r\n });\r\n }\r\n }\r\n if (data.CHANGING) {\r\n for (const param of (0, xml_utils_1.xmlToArray)(data.CHANGING.RSCHA)) {\r\n if (param.PARAMETER === undefined) {\r\n throw new Error(\"Function module name parameter undefined, changing\");\r\n }\r\n this.parameters.push({\r\n name: param.PARAMETER,\r\n direction: FunctionModuleParameterDirection.changing,\r\n type: param.TYP || param.DBFIELD,\r\n });\r\n }\r\n }\r\n if (data.EXPORT) {\r\n for (const param of (0, xml_utils_1.xmlToArray)(data.EXPORT.RSEXP)) {\r\n if (param.PARAMETER === undefined) {\r\n throw new Error(\"Function module name parameter undefined, exporting\");\r\n }\r\n this.parameters.push({\r\n name: param.PARAMETER,\r\n direction: FunctionModuleParameterDirection.exporting,\r\n type: param.TYP || param.DBFIELD,\r\n });\r\n }\r\n }\r\n if (data.TABLES) {\r\n for (const param of (0, xml_utils_1.xmlToArray)(data.TABLES.RSTBL)) {\r\n if (param.PARAMETER === undefined) {\r\n throw new Error(\"Function module name parameter undefined, tables\");\r\n }\r\n this.parameters.push({\r\n name: param.PARAMETER,\r\n direction: FunctionModuleParameterDirection.tables,\r\n type: param.DBSTRUCT,\r\n });\r\n }\r\n }\r\n }\r\n}\r\nexports.FunctionModuleDefinition = FunctionModuleDefinition;\r\n//# sourceMappingURL=function_module_definition.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/abap/types/function_module_definition.js?");
9226
+ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.FunctionModuleDefinition = exports.FunctionModuleParameterDirection = void 0;\r\nconst xml_utils_1 = __webpack_require__(/*! ../../xml_utils */ \"./node_modules/@abaplint/core/build/src/xml_utils.js\");\r\nvar FunctionModuleParameterDirection;\r\n(function (FunctionModuleParameterDirection) {\r\n FunctionModuleParameterDirection[\"importing\"] = \"importing\";\r\n FunctionModuleParameterDirection[\"exporting\"] = \"exporting\";\r\n FunctionModuleParameterDirection[\"changing\"] = \"changing\";\r\n FunctionModuleParameterDirection[\"tables\"] = \"tables\";\r\n})(FunctionModuleParameterDirection = exports.FunctionModuleParameterDirection || (exports.FunctionModuleParameterDirection = {}));\r\nclass FunctionModuleDefinition {\r\n constructor(data) {\r\n this.parse(data);\r\n }\r\n getParameters() {\r\n return this.parameters;\r\n }\r\n getDescription() {\r\n return this.description;\r\n }\r\n getName() {\r\n return this.name;\r\n }\r\n ///////////////\r\n parse(data) {\r\n if (data.FUNCNAME === undefined) {\r\n throw new Error(\"Function module name undefined\");\r\n }\r\n this.name = data.FUNCNAME;\r\n this.description = data.SHORT_TEXT;\r\n this.parameters = [];\r\n if (data.IMPORT) {\r\n for (const param of (0, xml_utils_1.xmlToArray)(data.IMPORT.RSIMP)) {\r\n if (param.PARAMETER === undefined) {\r\n throw new Error(\"Function module name parameter undefined, importing\");\r\n }\r\n this.parameters.push({\r\n name: param.PARAMETER,\r\n direction: FunctionModuleParameterDirection.importing,\r\n type: param.TYP || param.DBFIELD,\r\n });\r\n }\r\n }\r\n if (data.CHANGING) {\r\n for (const param of (0, xml_utils_1.xmlToArray)(data.CHANGING.RSCHA)) {\r\n if (param.PARAMETER === undefined) {\r\n throw new Error(\"Function module name parameter undefined, changing\");\r\n }\r\n this.parameters.push({\r\n name: param.PARAMETER,\r\n direction: FunctionModuleParameterDirection.changing,\r\n type: param.TYP || param.DBFIELD,\r\n });\r\n }\r\n }\r\n if (data.EXPORT) {\r\n for (const param of (0, xml_utils_1.xmlToArray)(data.EXPORT.RSEXP)) {\r\n if (param.PARAMETER === undefined) {\r\n throw new Error(\"Function module name parameter undefined, exporting\");\r\n }\r\n this.parameters.push({\r\n name: param.PARAMETER,\r\n direction: FunctionModuleParameterDirection.exporting,\r\n type: param.TYP || param.DBFIELD,\r\n });\r\n }\r\n }\r\n if (data.TABLES) {\r\n for (const param of (0, xml_utils_1.xmlToArray)(data.TABLES.RSTBL)) {\r\n if (param.PARAMETER === undefined) {\r\n throw new Error(\"Function module name parameter undefined, tables\");\r\n }\r\n this.parameters.push({\r\n name: param.PARAMETER,\r\n direction: FunctionModuleParameterDirection.tables,\r\n // table types are stored in TYP\r\n type: param.DBSTRUCT || param.TYP,\r\n });\r\n }\r\n }\r\n }\r\n}\r\nexports.FunctionModuleDefinition = FunctionModuleDefinition;\r\n//# sourceMappingURL=function_module_definition.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/abap/types/function_module_definition.js?");
9227
9227
 
9228
9228
  /***/ }),
9229
9229
 
@@ -9707,7 +9707,7 @@ eval("\r\nvar __createBinding = (this && this.__createBinding) || (Object.create
9707
9707
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
9708
9708
 
9709
9709
  "use strict";
9710
- eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.Config = void 0;\r\nconst version_1 = __webpack_require__(/*! ./version */ \"./node_modules/@abaplint/core/build/src/version.js\");\r\nconst artifacts_rules_1 = __webpack_require__(/*! ./artifacts_rules */ \"./node_modules/@abaplint/core/build/src/artifacts_rules.js\");\r\nconst JSON5 = __webpack_require__(/*! json5 */ \"./node_modules/json5/dist/index.mjs\");\r\n// assumption: this class is immutable\r\nclass Config {\r\n constructor(json) {\r\n // huh, hack\r\n if (JSON5.parse === undefined) {\r\n // @ts-ignore\r\n JSON5.parse = JSON5.default.parse;\r\n }\r\n this.config = JSON5.parse(json);\r\n if (this.config.global === undefined) {\r\n this.config.global = Config.getDefault().getGlobal();\r\n }\r\n if (this.config.syntax === undefined) {\r\n this.config.syntax = Config.getDefault().getSyntaxSetttings();\r\n }\r\n if (this.config.syntax.globalMacros === undefined) {\r\n this.config.syntax.globalMacros = [];\r\n }\r\n if (this.config.syntax.globalConstants === undefined) {\r\n this.config.syntax.globalConstants = [];\r\n }\r\n if (this.config.global.skipIncludesWithoutMain === undefined) {\r\n this.config.global.skipIncludesWithoutMain = false;\r\n }\r\n this.checkVersion();\r\n }\r\n static getDefault(ver) {\r\n const rules = {};\r\n const sorted = artifacts_rules_1.ArtifactsRules.getRules().sort((a, b) => {\r\n return a.getMetadata().key.localeCompare(b.getMetadata().key);\r\n });\r\n for (const rule of sorted) {\r\n rules[rule.getMetadata().key] = rule.getConfig();\r\n }\r\n let version = version_1.defaultVersion;\r\n if (ver) {\r\n version = ver;\r\n }\r\n const config = {\r\n global: {\r\n files: \"/src/**/*.*\",\r\n exclude: [],\r\n noIssues: [],\r\n skipGeneratedGatewayClasses: true,\r\n skipGeneratedPersistentClasses: true,\r\n skipGeneratedFunctionGroups: true,\r\n useApackDependencies: false,\r\n skipIncludesWithoutMain: false,\r\n },\r\n dependencies: [{\r\n url: \"https://github.com/abaplint/deps\",\r\n folder: \"/deps\",\r\n files: \"/src/**/*.*\",\r\n }],\r\n syntax: {\r\n version,\r\n errorNamespace: \"^(Z|Y|LCL\\_|TY\\_|LIF\\_)\",\r\n globalConstants: [],\r\n globalMacros: [],\r\n },\r\n rules: rules,\r\n };\r\n return new Config(JSON.stringify(config));\r\n }\r\n getEnabledRules() {\r\n const rules = [];\r\n for (const rule of artifacts_rules_1.ArtifactsRules.getRules()) {\r\n const ruleConfig = this.config[\"rules\"][rule.getMetadata().key];\r\n const ruleExists = ruleConfig !== undefined;\r\n if (ruleExists) {\r\n if (ruleConfig === false) { // \"rule\": false\r\n continue;\r\n }\r\n else if (ruleConfig === true) { // \"rule\": true\r\n rules.push(rule);\r\n }\r\n else if (typeof ruleConfig === \"object\") { // \"rule\": { ...config }\r\n rule.setConfig(ruleConfig);\r\n rules.push(rule);\r\n }\r\n }\r\n }\r\n return rules;\r\n }\r\n get() {\r\n return this.config;\r\n }\r\n readByKey(rule, key) {\r\n return this.config[\"rules\"][rule] ? this.config[\"rules\"][rule][key] : undefined;\r\n }\r\n readByRule(rule) {\r\n return this.config[\"rules\"][rule];\r\n }\r\n getGlobal() {\r\n return this.config.global;\r\n }\r\n getSyntaxSetttings() {\r\n return this.config.syntax;\r\n }\r\n getVersion() {\r\n if (this.config.global === undefined || this.config.syntax.version === undefined) {\r\n return version_1.defaultVersion;\r\n }\r\n return this.config.syntax.version;\r\n }\r\n checkVersion() {\r\n if (this.config.syntax.version === undefined) {\r\n return; // handled in getVersion\r\n }\r\n let match = false;\r\n const vers = version_1.Version;\r\n for (const v in version_1.Version) {\r\n if (vers[v] === this.config.syntax.version) {\r\n match = true;\r\n break;\r\n }\r\n }\r\n if (match === false) {\r\n this.config.syntax.version = version_1.defaultVersion;\r\n }\r\n }\r\n}\r\nexports.Config = Config;\r\n//# sourceMappingURL=config.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/config.js?");
9710
+ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.Config = void 0;\r\nconst version_1 = __webpack_require__(/*! ./version */ \"./node_modules/@abaplint/core/build/src/version.js\");\r\nconst artifacts_rules_1 = __webpack_require__(/*! ./artifacts_rules */ \"./node_modules/@abaplint/core/build/src/artifacts_rules.js\");\r\nconst JSON5 = __webpack_require__(/*! json5 */ \"./node_modules/json5/dist/index.mjs\");\r\n// assumption: this class is immutable\r\nclass Config {\r\n constructor(json) {\r\n // huh, hack\r\n if (JSON5.parse === undefined) {\r\n // @ts-ignore\r\n JSON5.parse = JSON5.default.parse;\r\n }\r\n this.config = JSON5.parse(json);\r\n if (this.config.global === undefined) {\r\n this.config.global = Config.getDefault().getGlobal();\r\n }\r\n if (this.config.syntax === undefined) {\r\n this.config.syntax = Config.getDefault().getSyntaxSetttings();\r\n }\r\n if (this.config.syntax.globalMacros === undefined) {\r\n this.config.syntax.globalMacros = [];\r\n }\r\n if (this.config.syntax.globalConstants === undefined) {\r\n this.config.syntax.globalConstants = [];\r\n }\r\n if (this.config.global.skipIncludesWithoutMain === undefined) {\r\n this.config.global.skipIncludesWithoutMain = false;\r\n }\r\n this.checkVersion();\r\n }\r\n static getDefault(ver) {\r\n const rules = {};\r\n const sorted = artifacts_rules_1.ArtifactsRules.getRules().sort((a, b) => {\r\n return a.getMetadata().key.localeCompare(b.getMetadata().key);\r\n });\r\n for (const rule of sorted) {\r\n rules[rule.getMetadata().key] = rule.getConfig();\r\n }\r\n let version = version_1.defaultVersion;\r\n if (ver) {\r\n version = ver;\r\n }\r\n // defaults: dont skip anything, report everything. The user can decide to skip stuff\r\n // its difficult to debug errors not being reported\r\n const config = {\r\n global: {\r\n files: \"/src/**/*.*\",\r\n exclude: [],\r\n noIssues: [],\r\n skipGeneratedBOPFInterfaces: false,\r\n skipGeneratedFunctionGroups: false,\r\n skipGeneratedGatewayClasses: false,\r\n skipGeneratedPersistentClasses: false,\r\n skipGeneratedProxyClasses: false,\r\n skipGeneratedProxyInterfaces: false,\r\n useApackDependencies: false,\r\n skipIncludesWithoutMain: false,\r\n },\r\n dependencies: [{\r\n url: \"https://github.com/abaplint/deps\",\r\n folder: \"/deps\",\r\n files: \"/src/**/*.*\",\r\n }],\r\n syntax: {\r\n version,\r\n errorNamespace: \"^(Z|Y|LCL\\_|TY\\_|LIF\\_)\",\r\n globalConstants: [],\r\n globalMacros: [],\r\n },\r\n rules: rules,\r\n };\r\n return new Config(JSON.stringify(config));\r\n }\r\n getEnabledRules() {\r\n const rules = [];\r\n for (const rule of artifacts_rules_1.ArtifactsRules.getRules()) {\r\n const ruleConfig = this.config[\"rules\"][rule.getMetadata().key];\r\n const ruleExists = ruleConfig !== undefined;\r\n if (ruleExists) {\r\n if (ruleConfig === false) { // \"rule\": false\r\n continue;\r\n }\r\n else if (ruleConfig === true) { // \"rule\": true\r\n rules.push(rule);\r\n }\r\n else if (typeof ruleConfig === \"object\") { // \"rule\": { ...config }\r\n rule.setConfig(ruleConfig);\r\n rules.push(rule);\r\n }\r\n }\r\n }\r\n return rules;\r\n }\r\n get() {\r\n return this.config;\r\n }\r\n readByKey(rule, key) {\r\n return this.config[\"rules\"][rule] ? this.config[\"rules\"][rule][key] : undefined;\r\n }\r\n readByRule(rule) {\r\n return this.config[\"rules\"][rule];\r\n }\r\n getGlobal() {\r\n return this.config.global;\r\n }\r\n getSyntaxSetttings() {\r\n return this.config.syntax;\r\n }\r\n getVersion() {\r\n if (this.config.global === undefined || this.config.syntax.version === undefined) {\r\n return version_1.defaultVersion;\r\n }\r\n return this.config.syntax.version;\r\n }\r\n checkVersion() {\r\n if (this.config.syntax.version === undefined) {\r\n return; // handled in getVersion\r\n }\r\n let match = false;\r\n const vers = version_1.Version;\r\n for (const v in version_1.Version) {\r\n if (vers[v] === this.config.syntax.version) {\r\n match = true;\r\n break;\r\n }\r\n }\r\n if (match === false) {\r\n this.config.syntax.version = version_1.defaultVersion;\r\n }\r\n }\r\n}\r\nexports.Config = Config;\r\n//# sourceMappingURL=config.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/config.js?");
9711
9711
 
9712
9712
  /***/ }),
9713
9713
 
@@ -10129,6 +10129,17 @@ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\n
10129
10129
 
10130
10130
  /***/ }),
10131
10131
 
10132
+ /***/ "./node_modules/@abaplint/core/build/src/objects/api_release_state.js":
10133
+ /*!****************************************************************************!*\
10134
+ !*** ./node_modules/@abaplint/core/build/src/objects/api_release_state.js ***!
10135
+ \****************************************************************************/
10136
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
10137
+
10138
+ "use strict";
10139
+ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.APIReleaseState = void 0;\r\nconst _abstract_object_1 = __webpack_require__(/*! ./_abstract_object */ \"./node_modules/@abaplint/core/build/src/objects/_abstract_object.js\");\r\nclass APIReleaseState extends _abstract_object_1.AbstractObject {\r\n getType() {\r\n return \"APIS\";\r\n }\r\n getAllowedNaming() {\r\n return {\r\n maxLength: 200,\r\n allowNamespace: true,\r\n };\r\n }\r\n getDescription() {\r\n // todo\r\n return undefined;\r\n }\r\n}\r\nexports.APIReleaseState = APIReleaseState;\r\n//# sourceMappingURL=api_release_state.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/objects/api_release_state.js?");
10140
+
10141
+ /***/ }),
10142
+
10132
10143
  /***/ "./node_modules/@abaplint/core/build/src/objects/assignment_service_to_authorization_group.js":
10133
10144
  /*!****************************************************************************************************!*\
10134
10145
  !*** ./node_modules/@abaplint/core/build/src/objects/assignment_service_to_authorization_group.js ***!
@@ -10785,7 +10796,7 @@ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\n
10785
10796
  /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
10786
10797
 
10787
10798
  "use strict";
10788
- eval("\r\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}));\r\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\r\n};\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\n__exportStar(__webpack_require__(/*! ./activation_variant */ \"./node_modules/@abaplint/core/build/src/objects/activation_variant.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./assignment_service_to_authorization_group */ \"./node_modules/@abaplint/core/build/src/objects/assignment_service_to_authorization_group.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./authorization_check_field */ \"./node_modules/@abaplint/core/build/src/objects/authorization_check_field.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./authorization_group */ \"./node_modules/@abaplint/core/build/src/objects/authorization_group.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./authorization_object_class */ \"./node_modules/@abaplint/core/build/src/objects/authorization_object_class.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./authorization_object */ \"./node_modules/@abaplint/core/build/src/objects/authorization_object.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./behavior_definition */ \"./node_modules/@abaplint/core/build/src/objects/behavior_definition.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./bsp_application */ \"./node_modules/@abaplint/core/build/src/objects/bsp_application.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./business_add_in_implementation */ \"./node_modules/@abaplint/core/build/src/objects/business_add_in_implementation.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./business_configuration_set */ \"./node_modules/@abaplint/core/build/src/objects/business_configuration_set.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./business_function_assignment */ \"./node_modules/@abaplint/core/build/src/objects/business_function_assignment.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./business_function_set_assignment */ \"./node_modules/@abaplint/core/build/src/objects/business_function_set_assignment.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./business_object_model */ \"./node_modules/@abaplint/core/build/src/objects/business_object_model.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./cds_metadata_extension */ \"./node_modules/@abaplint/core/build/src/objects/cds_metadata_extension.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./change_document */ \"./node_modules/@abaplint/core/build/src/objects/change_document.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./chapter_of_book_structure */ \"./node_modules/@abaplint/core/build/src/objects/chapter_of_book_structure.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./checkpoint_group */ \"./node_modules/@abaplint/core/build/src/objects/checkpoint_group.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./class */ \"./node_modules/@abaplint/core/build/src/objects/class.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./classification */ \"./node_modules/@abaplint/core/build/src/objects/classification.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./composite_enhancement_implementation */ \"./node_modules/@abaplint/core/build/src/objects/composite_enhancement_implementation.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./composite_enhancement_spot */ \"./node_modules/@abaplint/core/build/src/objects/composite_enhancement_spot.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./concepts_of_package */ \"./node_modules/@abaplint/core/build/src/objects/concepts_of_package.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./customer_enhancement_project */ \"./node_modules/@abaplint/core/build/src/objects/customer_enhancement_project.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./customizing_attributes */ \"./node_modules/@abaplint/core/build/src/objects/customizing_attributes.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./customizing_img_activity */ \"./node_modules/@abaplint/core/build/src/objects/customizing_img_activity.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./customizing_transaction */ \"./node_modules/@abaplint/core/build/src/objects/customizing_transaction.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./data_control */ \"./node_modules/@abaplint/core/build/src/objects/data_control.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./data_definition */ \"./node_modules/@abaplint/core/build/src/objects/data_definition.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./data_element */ \"./node_modules/@abaplint/core/build/src/objects/data_element.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./dialog_module */ \"./node_modules/@abaplint/core/build/src/objects/dialog_module.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./documentation */ \"./node_modules/@abaplint/core/build/src/objects/documentation.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./domain */ \"./node_modules/@abaplint/core/build/src/objects/domain.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./ecatt_test_configuration */ \"./node_modules/@abaplint/core/build/src/objects/ecatt_test_configuration.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./ecatt_test_data_container */ \"./node_modules/@abaplint/core/build/src/objects/ecatt_test_data_container.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./ecatt_test_script */ \"./node_modules/@abaplint/core/build/src/objects/ecatt_test_script.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./enhancement_implementation */ \"./node_modules/@abaplint/core/build/src/objects/enhancement_implementation.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./enhancement_spot */ \"./node_modules/@abaplint/core/build/src/objects/enhancement_spot.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./event_binding */ \"./node_modules/@abaplint/core/build/src/objects/event_binding.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./extension_index */ \"./node_modules/@abaplint/core/build/src/objects/extension_index.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./field_catalog */ \"./node_modules/@abaplint/core/build/src/objects/field_catalog.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./form_object_form */ \"./node_modules/@abaplint/core/build/src/objects/form_object_form.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./form_object_interface */ \"./node_modules/@abaplint/core/build/src/objects/form_object_interface.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./format_type */ \"./node_modules/@abaplint/core/build/src/objects/format_type.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./function_group */ \"./node_modules/@abaplint/core/build/src/objects/function_group.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./gateway_model_metadata */ \"./node_modules/@abaplint/core/build/src/objects/gateway_model_metadata.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./gateway_model */ \"./node_modules/@abaplint/core/build/src/objects/gateway_model.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./gateway_project */ \"./node_modules/@abaplint/core/build/src/objects/gateway_project.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./gateway_service_groups_metadata */ \"./node_modules/@abaplint/core/build/src/objects/gateway_service_groups_metadata.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./gateway_service */ \"./node_modules/@abaplint/core/build/src/objects/gateway_service.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./gateway_vocabulary_annotation */ \"./node_modules/@abaplint/core/build/src/objects/gateway_vocabulary_annotation.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./general_hierarchy_storage_extrension_name */ \"./node_modules/@abaplint/core/build/src/objects/general_hierarchy_storage_extrension_name.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./general_storage_structure */ \"./node_modules/@abaplint/core/build/src/objects/general_storage_structure.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./general_text */ \"./node_modules/@abaplint/core/build/src/objects/general_text.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./iac_binary_data */ \"./node_modules/@abaplint/core/build/src/objects/iac_binary_data.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./iac_language_resource */ \"./node_modules/@abaplint/core/build/src/objects/iac_language_resource.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./iac_service */ \"./node_modules/@abaplint/core/build/src/objects/iac_service.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./iac_template */ \"./node_modules/@abaplint/core/build/src/objects/iac_template.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./icf_service */ \"./node_modules/@abaplint/core/build/src/objects/icf_service.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./idoc_extension */ \"./node_modules/@abaplint/core/build/src/objects/idoc_extension.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./idoc */ \"./node_modules/@abaplint/core/build/src/objects/idoc.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./info_object */ \"./node_modules/@abaplint/core/build/src/objects/info_object.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./interface */ \"./node_modules/@abaplint/core/build/src/objects/interface.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./lock_object */ \"./node_modules/@abaplint/core/build/src/objects/lock_object.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./maintenance_and_transport_object */ \"./node_modules/@abaplint/core/build/src/objects/maintenance_and_transport_object.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./message_class */ \"./node_modules/@abaplint/core/build/src/objects/message_class.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./messaging_channel */ \"./node_modules/@abaplint/core/build/src/objects/messaging_channel.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./mime_object */ \"./node_modules/@abaplint/core/build/src/objects/mime_object.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./namespace */ \"./node_modules/@abaplint/core/build/src/objects/namespace.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./number_range */ \"./node_modules/@abaplint/core/build/src/objects/number_range.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./object_characteristic */ \"./node_modules/@abaplint/core/build/src/objects/object_characteristic.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./package_interface */ \"./node_modules/@abaplint/core/build/src/objects/package_interface.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./package */ \"./node_modules/@abaplint/core/build/src/objects/package.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./parameter */ \"./node_modules/@abaplint/core/build/src/objects/parameter.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./personalization_object */ \"./node_modules/@abaplint/core/build/src/objects/personalization_object.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./program */ \"./node_modules/@abaplint/core/build/src/objects/program.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./proxy_object */ \"./node_modules/@abaplint/core/build/src/objects/proxy_object.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./push_channel */ \"./node_modules/@abaplint/core/build/src/objects/push_channel.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./rfc_service */ \"./node_modules/@abaplint/core/build/src/objects/rfc_service.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./sapscript_style */ \"./node_modules/@abaplint/core/build/src/objects/sapscript_style.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./sapscript */ \"./node_modules/@abaplint/core/build/src/objects/sapscript.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./screen_variant */ \"./node_modules/@abaplint/core/build/src/objects/screen_variant.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./search_help */ \"./node_modules/@abaplint/core/build/src/objects/search_help.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./service_binding */ \"./node_modules/@abaplint/core/build/src/objects/service_binding.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./service_definition */ \"./node_modules/@abaplint/core/build/src/objects/service_definition.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./shared_memory */ \"./node_modules/@abaplint/core/build/src/objects/shared_memory.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./smart_form */ \"./node_modules/@abaplint/core/build/src/objects/smart_form.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./smart_style */ \"./node_modules/@abaplint/core/build/src/objects/smart_style.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./switch_assignment_hierarchy */ \"./node_modules/@abaplint/core/build/src/objects/switch_assignment_hierarchy.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./switch_assignments */ \"./node_modules/@abaplint/core/build/src/objects/switch_assignments.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./table_type */ \"./node_modules/@abaplint/core/build/src/objects/table_type.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./table */ \"./node_modules/@abaplint/core/build/src/objects/table.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./technical_job_definition */ \"./node_modules/@abaplint/core/build/src/objects/technical_job_definition.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./transaction_variant */ \"./node_modules/@abaplint/core/build/src/objects/transaction_variant.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./transaction */ \"./node_modules/@abaplint/core/build/src/objects/transaction.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./transformation */ \"./node_modules/@abaplint/core/build/src/objects/transformation.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./type_pool */ \"./node_modules/@abaplint/core/build/src/objects/type_pool.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./view_cluster */ \"./node_modules/@abaplint/core/build/src/objects/view_cluster.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./view */ \"./node_modules/@abaplint/core/build/src/objects/view.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./virtual_end_point */ \"./node_modules/@abaplint/core/build/src/objects/virtual_end_point.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./web_dynpro_application_configuration */ \"./node_modules/@abaplint/core/build/src/objects/web_dynpro_application_configuration.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./web_dynpro_application */ \"./node_modules/@abaplint/core/build/src/objects/web_dynpro_application.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./web_dynpro_component_configuration */ \"./node_modules/@abaplint/core/build/src/objects/web_dynpro_component_configuration.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./web_dynpro_component */ \"./node_modules/@abaplint/core/build/src/objects/web_dynpro_component.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./web_mime */ \"./node_modules/@abaplint/core/build/src/objects/web_mime.js\"), exports);\r\n//# sourceMappingURL=index.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/objects/index.js?");
10799
+ eval("\r\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}));\r\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\r\n};\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\n__exportStar(__webpack_require__(/*! ./activation_variant */ \"./node_modules/@abaplint/core/build/src/objects/activation_variant.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./api_release_state */ \"./node_modules/@abaplint/core/build/src/objects/api_release_state.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./assignment_service_to_authorization_group */ \"./node_modules/@abaplint/core/build/src/objects/assignment_service_to_authorization_group.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./authorization_check_field */ \"./node_modules/@abaplint/core/build/src/objects/authorization_check_field.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./authorization_group */ \"./node_modules/@abaplint/core/build/src/objects/authorization_group.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./authorization_object_class */ \"./node_modules/@abaplint/core/build/src/objects/authorization_object_class.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./authorization_object */ \"./node_modules/@abaplint/core/build/src/objects/authorization_object.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./behavior_definition */ \"./node_modules/@abaplint/core/build/src/objects/behavior_definition.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./bsp_application */ \"./node_modules/@abaplint/core/build/src/objects/bsp_application.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./business_add_in_implementation */ \"./node_modules/@abaplint/core/build/src/objects/business_add_in_implementation.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./business_configuration_set */ \"./node_modules/@abaplint/core/build/src/objects/business_configuration_set.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./business_function_assignment */ \"./node_modules/@abaplint/core/build/src/objects/business_function_assignment.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./business_function_set_assignment */ \"./node_modules/@abaplint/core/build/src/objects/business_function_set_assignment.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./business_object_model */ \"./node_modules/@abaplint/core/build/src/objects/business_object_model.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./cds_metadata_extension */ \"./node_modules/@abaplint/core/build/src/objects/cds_metadata_extension.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./change_document */ \"./node_modules/@abaplint/core/build/src/objects/change_document.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./chapter_of_book_structure */ \"./node_modules/@abaplint/core/build/src/objects/chapter_of_book_structure.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./checkpoint_group */ \"./node_modules/@abaplint/core/build/src/objects/checkpoint_group.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./class */ \"./node_modules/@abaplint/core/build/src/objects/class.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./classification */ \"./node_modules/@abaplint/core/build/src/objects/classification.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./composite_enhancement_implementation */ \"./node_modules/@abaplint/core/build/src/objects/composite_enhancement_implementation.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./composite_enhancement_spot */ \"./node_modules/@abaplint/core/build/src/objects/composite_enhancement_spot.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./concepts_of_package */ \"./node_modules/@abaplint/core/build/src/objects/concepts_of_package.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./customer_enhancement_project */ \"./node_modules/@abaplint/core/build/src/objects/customer_enhancement_project.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./customizing_attributes */ \"./node_modules/@abaplint/core/build/src/objects/customizing_attributes.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./customizing_img_activity */ \"./node_modules/@abaplint/core/build/src/objects/customizing_img_activity.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./customizing_transaction */ \"./node_modules/@abaplint/core/build/src/objects/customizing_transaction.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./data_control */ \"./node_modules/@abaplint/core/build/src/objects/data_control.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./data_definition */ \"./node_modules/@abaplint/core/build/src/objects/data_definition.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./data_element */ \"./node_modules/@abaplint/core/build/src/objects/data_element.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./dialog_module */ \"./node_modules/@abaplint/core/build/src/objects/dialog_module.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./documentation */ \"./node_modules/@abaplint/core/build/src/objects/documentation.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./domain */ \"./node_modules/@abaplint/core/build/src/objects/domain.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./ecatt_test_configuration */ \"./node_modules/@abaplint/core/build/src/objects/ecatt_test_configuration.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./ecatt_test_data_container */ \"./node_modules/@abaplint/core/build/src/objects/ecatt_test_data_container.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./ecatt_test_script */ \"./node_modules/@abaplint/core/build/src/objects/ecatt_test_script.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./enhancement_implementation */ \"./node_modules/@abaplint/core/build/src/objects/enhancement_implementation.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./enhancement_spot */ \"./node_modules/@abaplint/core/build/src/objects/enhancement_spot.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./event_binding */ \"./node_modules/@abaplint/core/build/src/objects/event_binding.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./extension_index */ \"./node_modules/@abaplint/core/build/src/objects/extension_index.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./field_catalog */ \"./node_modules/@abaplint/core/build/src/objects/field_catalog.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./form_object_form */ \"./node_modules/@abaplint/core/build/src/objects/form_object_form.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./form_object_interface */ \"./node_modules/@abaplint/core/build/src/objects/form_object_interface.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./format_type */ \"./node_modules/@abaplint/core/build/src/objects/format_type.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./function_group */ \"./node_modules/@abaplint/core/build/src/objects/function_group.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./gateway_model_metadata */ \"./node_modules/@abaplint/core/build/src/objects/gateway_model_metadata.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./gateway_model */ \"./node_modules/@abaplint/core/build/src/objects/gateway_model.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./gateway_project */ \"./node_modules/@abaplint/core/build/src/objects/gateway_project.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./gateway_service_groups_metadata */ \"./node_modules/@abaplint/core/build/src/objects/gateway_service_groups_metadata.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./gateway_service */ \"./node_modules/@abaplint/core/build/src/objects/gateway_service.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./gateway_vocabulary_annotation */ \"./node_modules/@abaplint/core/build/src/objects/gateway_vocabulary_annotation.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./general_hierarchy_storage_extrension_name */ \"./node_modules/@abaplint/core/build/src/objects/general_hierarchy_storage_extrension_name.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./general_storage_structure */ \"./node_modules/@abaplint/core/build/src/objects/general_storage_structure.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./general_text */ \"./node_modules/@abaplint/core/build/src/objects/general_text.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./iac_binary_data */ \"./node_modules/@abaplint/core/build/src/objects/iac_binary_data.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./iac_language_resource */ \"./node_modules/@abaplint/core/build/src/objects/iac_language_resource.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./iac_service */ \"./node_modules/@abaplint/core/build/src/objects/iac_service.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./iac_template */ \"./node_modules/@abaplint/core/build/src/objects/iac_template.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./icf_service */ \"./node_modules/@abaplint/core/build/src/objects/icf_service.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./idoc_extension */ \"./node_modules/@abaplint/core/build/src/objects/idoc_extension.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./idoc */ \"./node_modules/@abaplint/core/build/src/objects/idoc.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./info_object */ \"./node_modules/@abaplint/core/build/src/objects/info_object.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./interface */ \"./node_modules/@abaplint/core/build/src/objects/interface.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./lock_object */ \"./node_modules/@abaplint/core/build/src/objects/lock_object.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./maintenance_and_transport_object */ \"./node_modules/@abaplint/core/build/src/objects/maintenance_and_transport_object.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./message_class */ \"./node_modules/@abaplint/core/build/src/objects/message_class.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./messaging_channel */ \"./node_modules/@abaplint/core/build/src/objects/messaging_channel.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./mime_object */ \"./node_modules/@abaplint/core/build/src/objects/mime_object.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./namespace */ \"./node_modules/@abaplint/core/build/src/objects/namespace.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./number_range */ \"./node_modules/@abaplint/core/build/src/objects/number_range.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./object_characteristic */ \"./node_modules/@abaplint/core/build/src/objects/object_characteristic.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./package_interface */ \"./node_modules/@abaplint/core/build/src/objects/package_interface.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./package */ \"./node_modules/@abaplint/core/build/src/objects/package.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./parameter */ \"./node_modules/@abaplint/core/build/src/objects/parameter.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./personalization_object */ \"./node_modules/@abaplint/core/build/src/objects/personalization_object.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./program */ \"./node_modules/@abaplint/core/build/src/objects/program.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./proxy_object */ \"./node_modules/@abaplint/core/build/src/objects/proxy_object.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./push_channel */ \"./node_modules/@abaplint/core/build/src/objects/push_channel.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./rfc_service */ \"./node_modules/@abaplint/core/build/src/objects/rfc_service.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./sapscript_style */ \"./node_modules/@abaplint/core/build/src/objects/sapscript_style.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./sapscript */ \"./node_modules/@abaplint/core/build/src/objects/sapscript.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./screen_variant */ \"./node_modules/@abaplint/core/build/src/objects/screen_variant.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./search_help */ \"./node_modules/@abaplint/core/build/src/objects/search_help.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./service_binding */ \"./node_modules/@abaplint/core/build/src/objects/service_binding.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./service_definition */ \"./node_modules/@abaplint/core/build/src/objects/service_definition.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./shared_memory */ \"./node_modules/@abaplint/core/build/src/objects/shared_memory.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./smart_form */ \"./node_modules/@abaplint/core/build/src/objects/smart_form.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./smart_style */ \"./node_modules/@abaplint/core/build/src/objects/smart_style.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./switch_assignment_hierarchy */ \"./node_modules/@abaplint/core/build/src/objects/switch_assignment_hierarchy.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./switch_assignments */ \"./node_modules/@abaplint/core/build/src/objects/switch_assignments.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./table_type */ \"./node_modules/@abaplint/core/build/src/objects/table_type.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./table */ \"./node_modules/@abaplint/core/build/src/objects/table.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./technical_job_definition */ \"./node_modules/@abaplint/core/build/src/objects/technical_job_definition.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./transaction_variant */ \"./node_modules/@abaplint/core/build/src/objects/transaction_variant.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./transaction */ \"./node_modules/@abaplint/core/build/src/objects/transaction.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./transformation */ \"./node_modules/@abaplint/core/build/src/objects/transformation.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./type_pool */ \"./node_modules/@abaplint/core/build/src/objects/type_pool.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./view_cluster */ \"./node_modules/@abaplint/core/build/src/objects/view_cluster.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./view */ \"./node_modules/@abaplint/core/build/src/objects/view.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./virtual_end_point */ \"./node_modules/@abaplint/core/build/src/objects/virtual_end_point.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./web_dynpro_application_configuration */ \"./node_modules/@abaplint/core/build/src/objects/web_dynpro_application_configuration.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./web_dynpro_application */ \"./node_modules/@abaplint/core/build/src/objects/web_dynpro_application.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./web_dynpro_component_configuration */ \"./node_modules/@abaplint/core/build/src/objects/web_dynpro_component_configuration.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./web_dynpro_component */ \"./node_modules/@abaplint/core/build/src/objects/web_dynpro_component.js\"), exports);\r\n__exportStar(__webpack_require__(/*! ./web_mime */ \"./node_modules/@abaplint/core/build/src/objects/web_mime.js\"), exports);\r\n//# sourceMappingURL=index.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/objects/index.js?");
10789
10800
 
10790
10801
  /***/ }),
10791
10802
 
@@ -11423,7 +11434,7 @@ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\n
11423
11434
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
11424
11435
 
11425
11436
  "use strict";
11426
- eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.Registry = void 0;\nconst config_1 = __webpack_require__(/*! ./config */ \"./node_modules/@abaplint/core/build/src/config.js\");\nconst artifacts_objects_1 = __webpack_require__(/*! ./artifacts_objects */ \"./node_modules/@abaplint/core/build/src/artifacts_objects.js\");\nconst artifacts_rules_1 = __webpack_require__(/*! ./artifacts_rules */ \"./node_modules/@abaplint/core/build/src/artifacts_rules.js\");\nconst skip_logic_1 = __webpack_require__(/*! ./skip_logic */ \"./node_modules/@abaplint/core/build/src/skip_logic.js\");\nconst _abap_object_1 = __webpack_require__(/*! ./objects/_abap_object */ \"./node_modules/@abaplint/core/build/src/objects/_abap_object.js\");\nconst find_global_definitions_1 = __webpack_require__(/*! ./abap/5_syntax/global_definitions/find_global_definitions */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/global_definitions/find_global_definitions.js\");\nconst syntax_1 = __webpack_require__(/*! ./abap/5_syntax/syntax */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/syntax.js\");\nconst excludeHelper_1 = __webpack_require__(/*! ./utils/excludeHelper */ \"./node_modules/@abaplint/core/build/src/utils/excludeHelper.js\");\nconst ddic_references_1 = __webpack_require__(/*! ./ddic_references */ \"./node_modules/@abaplint/core/build/src/ddic_references.js\");\n// todo, this should really be an instance in case there are multiple Registry'ies\nclass ParsingPerformance {\n static clear() {\n this.results = [];\n this.lexing = 0;\n this.statements = 0;\n this.structure = 0;\n }\n static push(obj, result) {\n if (result.runtimeExtra) {\n this.lexing += result.runtimeExtra.lexing;\n this.statements += result.runtimeExtra.statements;\n this.structure += result.runtimeExtra.structure;\n }\n if (result.runtime < 100) {\n return;\n }\n if (this.results === undefined) {\n this.results = [];\n }\n let extra = \"\";\n if (result.runtimeExtra) {\n extra = `\\t(lexing: ${result.runtimeExtra.lexing}ms, statements: ${result.runtimeExtra.statements}ms, structure: ${result.runtimeExtra.structure}ms)`;\n }\n this.results.push({\n runtime: result.runtime,\n extra,\n name: obj.getType() + \" \" + obj.getName(),\n });\n }\n static output() {\n const MAX = 10;\n this.results.sort((a, b) => { return b.runtime - a.runtime; });\n for (let i = 0; i < MAX; i++) {\n const row = this.results[i];\n if (row === undefined) {\n break;\n }\n process.stderr.write(`\\t${row.runtime}ms\\t${row.name} ${row.extra}\\n`);\n }\n process.stderr.write(`\\tTotal lexing: ${this.lexing}ms\\n`);\n process.stderr.write(`\\tTotal statements: ${this.statements}ms\\n`);\n process.stderr.write(`\\tTotal structure: ${this.structure}ms\\n`);\n }\n}\n///////////////////////////////////////////////////////////////////////////////////////////////\nclass Registry {\n constructor(conf) {\n this.objects = {};\n this.objectsByType = {};\n /** object containing filenames of dependencies */\n this.dependencies = {};\n this.issues = [];\n this.conf = conf ? conf : config_1.Config.getDefault();\n this.references = new ddic_references_1.DDICReferences();\n }\n static abaplintVersion() {\n // magic, see build script \"version.sh\"\n return \"2.91.37\";\n }\n getDDICReferences() {\n return this.references;\n }\n *getObjects() {\n for (const name in this.objects) {\n for (const type in this.objects[name]) {\n yield this.objects[name][type];\n }\n }\n }\n *getObjectsByType(type) {\n for (const name in this.objectsByType[type] || []) {\n yield this.objectsByType[type][name];\n }\n }\n *getFiles() {\n for (const obj of this.getObjects()) {\n for (const file of obj.getFiles()) {\n yield file;\n }\n }\n }\n getFirstObject() {\n for (const name in this.objects) {\n for (const type in this.objects[name]) {\n return this.objects[name][type];\n }\n }\n return undefined;\n }\n getObjectCount(skipDependencies = true) {\n let res = 0;\n for (const o of this.getObjects()) {\n if (skipDependencies === true && this.isDependency(o)) {\n continue;\n }\n res = res + 1;\n }\n return res;\n }\n getFileByName(filename) {\n const upper = filename.toUpperCase();\n for (const o of this.getObjects()) {\n for (const f of o.getFiles()) {\n if (f.getFilename().toUpperCase() === upper) {\n return f;\n }\n }\n }\n return undefined;\n }\n getObject(type, name) {\n if (type === undefined || name === undefined) {\n return undefined;\n }\n const searchName = name.toUpperCase();\n if (this.objects[searchName]) {\n return this.objects[searchName][type];\n }\n return undefined;\n }\n getConfig() {\n return this.conf;\n }\n // assumption: Config is immutable, and can only be changed via this method\n setConfig(conf) {\n for (const obj of this.getObjects()) {\n obj.setDirty();\n }\n this.conf = conf;\n return this;\n }\n inErrorNamespace(name) {\n const reg = new RegExp(this.getConfig().getSyntaxSetttings().errorNamespace, \"i\");\n return reg.test(name);\n }\n addFile(file) {\n return this.addFiles([file]);\n }\n updateFile(file) {\n const obj = this.find(file.getObjectName(), file.getObjectType());\n obj.updateFile(file);\n return this;\n }\n removeFile(file) {\n const obj = this.find(file.getObjectName(), file.getObjectType());\n obj.removeFile(file);\n if (obj.getFiles().length === 0) {\n this.references.clear(obj);\n this.removeObject(obj);\n }\n return this;\n }\n addFiles(files) {\n var _a;\n const globalExclude = ((_a = this.conf.getGlobal().exclude) !== null && _a !== void 0 ? _a : [])\n .map(pattern => new RegExp(pattern, \"i\"));\n for (const f of files) {\n const filename = f.getFilename();\n const isNotAbapgitFile = filename.split(\".\").length <= 2;\n if (isNotAbapgitFile || excludeHelper_1.ExcludeHelper.isExcluded(filename, globalExclude)) {\n continue;\n }\n const found = this.findOrCreate(f.getObjectName(), f.getObjectType());\n found.addFile(f);\n }\n return this;\n }\n addDependencies(files) {\n for (const f of files) {\n this.dependencies[f.getFilename().toUpperCase()] = true;\n }\n return this.addFiles(files);\n }\n addDependency(file) {\n this.dependencies[file.getFilename().toUpperCase()] = true;\n this.addFile(file);\n return this;\n }\n isDependency(obj) {\n const filename = obj.getFiles()[0].getFilename().toUpperCase();\n return this.dependencies[filename] === true;\n }\n isFileDependency(filename) {\n return this.dependencies[filename.toUpperCase()] === true;\n }\n // assumption: the file is already in the registry\n findObjectForFile(file) {\n const filename = file.getFilename();\n for (const obj of this.getObjects()) {\n for (const ofile of obj.getFiles()) {\n if (ofile.getFilename() === filename) {\n return obj;\n }\n }\n }\n return undefined;\n }\n // todo, this will be changed to async sometime\n findIssues(input) {\n if (this.isDirty() === true) {\n this.parse();\n }\n return this.runRules(input);\n }\n // todo, this will be changed to async sometime\n findIssuesObject(iobj) {\n if (this.isDirty() === true) {\n this.parse();\n }\n return this.runRules(undefined, iobj);\n }\n // todo, this will be changed to async sometime\n parse() {\n if (this.isDirty() === false) {\n return this;\n }\n ParsingPerformance.clear();\n this.issues = [];\n for (const o of this.getObjects()) {\n this.parsePrivate(o);\n this.issues.push(...o.getParsingIssues());\n }\n new find_global_definitions_1.FindGlobalDefinitions(this).run();\n return this;\n }\n async parseAsync(input) {\n var _a, _b;\n if (this.isDirty() === false) {\n return this;\n }\n ParsingPerformance.clear();\n (_a = input === null || input === void 0 ? void 0 : input.progress) === null || _a === void 0 ? void 0 : _a.set(this.getObjectCount(false), \"Lexing and parsing\");\n this.issues = [];\n for (const o of this.getObjects()) {\n await ((_b = input === null || input === void 0 ? void 0 : input.progress) === null || _b === void 0 ? void 0 : _b.tick(\"Lexing and parsing(\" + this.conf.getVersion() + \") - \" + o.getType() + \" \" + o.getName()));\n this.parsePrivate(o);\n this.issues.push(...o.getParsingIssues());\n }\n if ((input === null || input === void 0 ? void 0 : input.outputPerformance) === true) {\n ParsingPerformance.output();\n }\n new find_global_definitions_1.FindGlobalDefinitions(this).run(input === null || input === void 0 ? void 0 : input.progress);\n return this;\n }\n //////////////////////////////////////////\n // todo, refactor, this is a mess, see where-used, a lot of the code should be in this method instead\n parsePrivate(input) {\n const config = this.getConfig();\n const result = input.parse(config.getVersion(), config.getSyntaxSetttings().globalMacros, this);\n ParsingPerformance.push(input, result);\n }\n isDirty() {\n for (const o of this.getObjects()) {\n const dirty = o.isDirty();\n if (dirty === true) {\n return true;\n }\n }\n return false;\n }\n runRules(input, iobj) {\n var _a, _b, _c, _d, _e, _f;\n const rulePerformance = {};\n const issues = this.issues.slice(0);\n const objects = iobj ? [iobj] : this.getObjects();\n const rules = this.conf.getEnabledRules();\n const skipLogic = new skip_logic_1.SkipLogic(this);\n (_a = input === null || input === void 0 ? void 0 : input.progress) === null || _a === void 0 ? void 0 : _a.set(iobj ? 1 : this.getObjectCount(false), \"Run Syntax\");\n const check = [];\n for (const obj of objects) {\n (_b = input === null || input === void 0 ? void 0 : input.progress) === null || _b === void 0 ? void 0 : _b.tick(\"Run Syntax - \" + obj.getName());\n if (skipLogic.skip(obj) || this.isDependency(obj)) {\n continue;\n }\n if (obj instanceof _abap_object_1.ABAPObject) {\n new syntax_1.SyntaxLogic(this, obj).run();\n }\n check.push(obj);\n }\n (_c = input === null || input === void 0 ? void 0 : input.progress) === null || _c === void 0 ? void 0 : _c.set(rules.length, \"Initialize Rules\");\n for (const rule of rules) {\n (_d = input === null || input === void 0 ? void 0 : input.progress) === null || _d === void 0 ? void 0 : _d.tick(\"Initialize Rules - \" + rule.getMetadata().key);\n if (rule.initialize === undefined) {\n throw new Error(rule.getMetadata().key + \" missing initialize method\");\n }\n rule.initialize(this);\n rulePerformance[rule.getMetadata().key] = 0;\n }\n (_e = input === null || input === void 0 ? void 0 : input.progress) === null || _e === void 0 ? void 0 : _e.set(check.length, \"Finding Issues\");\n for (const obj of check) {\n (_f = input === null || input === void 0 ? void 0 : input.progress) === null || _f === void 0 ? void 0 : _f.tick(\"Finding Issues - \" + obj.getType() + \" \" + obj.getName());\n for (const rule of rules) {\n const before = Date.now();\n issues.push(...rule.run(obj));\n const runtime = Date.now() - before;\n rulePerformance[rule.getMetadata().key] = rulePerformance[rule.getMetadata().key] + runtime;\n }\n }\n if ((input === null || input === void 0 ? void 0 : input.outputPerformance) === true) {\n const perf = [];\n for (const p in rulePerformance) {\n if (rulePerformance[p] > 100) { // ignore rules if it takes less than 100ms\n perf.push({ name: p, time: rulePerformance[p] });\n }\n }\n perf.sort((a, b) => { return b.time - a.time; });\n for (const p of perf) {\n process.stderr.write(\"\\t\" + p.time + \"ms\\t\" + p.name + \"\\n\");\n }\n }\n return this.excludeIssues(issues);\n }\n excludeIssues(issues) {\n var _a;\n const ret = issues;\n const globalNoIssues = this.conf.getGlobal().noIssues || [];\n const globalNoIssuesPatterns = globalNoIssues.map(x => new RegExp(x, \"i\"));\n if (globalNoIssuesPatterns.length > 0) {\n for (let i = ret.length - 1; i >= 0; i--) {\n const filename = ret[i].getFilename();\n if (excludeHelper_1.ExcludeHelper.isExcluded(filename, globalNoIssuesPatterns)) {\n ret.splice(i, 1);\n }\n }\n }\n // exclude issues, as now we know both the filename and issue key\n for (const rule of artifacts_rules_1.ArtifactsRules.getRules()) {\n const key = rule.getMetadata().key;\n const ruleExclude = (_a = this.conf.readByKey(key, \"exclude\")) !== null && _a !== void 0 ? _a : [];\n if (ruleExclude.length === 0) {\n continue;\n }\n const ruleExcludePatterns = ruleExclude.map(x => new RegExp(x, \"i\"));\n for (let i = ret.length - 1; i >= 0; i--) {\n if (ret[i].getKey() !== key) {\n continue;\n }\n const filename = ret[i].getFilename();\n if (excludeHelper_1.ExcludeHelper.isExcluded(filename, ruleExcludePatterns)) {\n ret.splice(i, 1);\n }\n }\n }\n return ret;\n }\n findOrCreate(name, type) {\n try {\n return this.find(name, type);\n }\n catch (_a) {\n const newName = name.toUpperCase();\n const newType = type ? type : \"UNKNOWN\";\n const add = artifacts_objects_1.ArtifactsObjects.newObject(newName, newType);\n if (this.objects[newName] === undefined) {\n this.objects[newName] = {};\n }\n this.objects[newName][newType] = add;\n if (this.objectsByType[newType] === undefined) {\n this.objectsByType[newType] = {};\n }\n this.objectsByType[newType][newName] = add;\n return add;\n }\n }\n removeObject(remove) {\n if (remove === undefined) {\n return;\n }\n if (this.objects[remove.getName()][remove.getType()] === undefined) {\n throw new Error(\"removeObject: object not found\");\n }\n if (Object.keys(this.objects[remove.getName()]).length === 1) {\n delete this.objects[remove.getName()];\n }\n else {\n delete this.objects[remove.getName()][remove.getType()];\n }\n if (Object.keys(this.objectsByType[remove.getType()]).length === 1) {\n delete this.objectsByType[remove.getType()];\n }\n else {\n delete this.objectsByType[remove.getType()][remove.getName()];\n }\n }\n find(name, type) {\n const searchType = type ? type : \"UNKNOWN\";\n const searchName = name.toUpperCase();\n if (this.objects[searchName] !== undefined\n && this.objects[searchName][searchType]) {\n return this.objects[searchName][searchType];\n }\n throw new Error(\"find: object not found, \" + type + \" \" + name);\n }\n}\nexports.Registry = Registry;\n//# sourceMappingURL=registry.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/registry.js?");
11437
+ eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.Registry = void 0;\nconst config_1 = __webpack_require__(/*! ./config */ \"./node_modules/@abaplint/core/build/src/config.js\");\nconst artifacts_objects_1 = __webpack_require__(/*! ./artifacts_objects */ \"./node_modules/@abaplint/core/build/src/artifacts_objects.js\");\nconst artifacts_rules_1 = __webpack_require__(/*! ./artifacts_rules */ \"./node_modules/@abaplint/core/build/src/artifacts_rules.js\");\nconst skip_logic_1 = __webpack_require__(/*! ./skip_logic */ \"./node_modules/@abaplint/core/build/src/skip_logic.js\");\nconst _abap_object_1 = __webpack_require__(/*! ./objects/_abap_object */ \"./node_modules/@abaplint/core/build/src/objects/_abap_object.js\");\nconst find_global_definitions_1 = __webpack_require__(/*! ./abap/5_syntax/global_definitions/find_global_definitions */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/global_definitions/find_global_definitions.js\");\nconst syntax_1 = __webpack_require__(/*! ./abap/5_syntax/syntax */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/syntax.js\");\nconst excludeHelper_1 = __webpack_require__(/*! ./utils/excludeHelper */ \"./node_modules/@abaplint/core/build/src/utils/excludeHelper.js\");\nconst ddic_references_1 = __webpack_require__(/*! ./ddic_references */ \"./node_modules/@abaplint/core/build/src/ddic_references.js\");\n// todo, this should really be an instance in case there are multiple Registry'ies\nclass ParsingPerformance {\n static clear() {\n this.results = [];\n this.lexing = 0;\n this.statements = 0;\n this.structure = 0;\n }\n static push(obj, result) {\n if (result.runtimeExtra) {\n this.lexing += result.runtimeExtra.lexing;\n this.statements += result.runtimeExtra.statements;\n this.structure += result.runtimeExtra.structure;\n }\n if (result.runtime < 100) {\n return;\n }\n if (this.results === undefined) {\n this.results = [];\n }\n let extra = \"\";\n if (result.runtimeExtra) {\n extra = `\\t(lexing: ${result.runtimeExtra.lexing}ms, statements: ${result.runtimeExtra.statements}ms, structure: ${result.runtimeExtra.structure}ms)`;\n }\n this.results.push({\n runtime: result.runtime,\n extra,\n name: obj.getType() + \" \" + obj.getName(),\n });\n }\n static output() {\n const MAX = 10;\n this.results.sort((a, b) => { return b.runtime - a.runtime; });\n for (let i = 0; i < MAX; i++) {\n const row = this.results[i];\n if (row === undefined) {\n break;\n }\n process.stderr.write(`\\t${row.runtime}ms\\t${row.name} ${row.extra}\\n`);\n }\n process.stderr.write(`\\tTotal lexing: ${this.lexing}ms\\n`);\n process.stderr.write(`\\tTotal statements: ${this.statements}ms\\n`);\n process.stderr.write(`\\tTotal structure: ${this.structure}ms\\n`);\n }\n}\n///////////////////////////////////////////////////////////////////////////////////////////////\nclass Registry {\n constructor(conf) {\n this.objects = {};\n this.objectsByType = {};\n this.dependencies = {};\n this.issues = [];\n this.conf = conf ? conf : config_1.Config.getDefault();\n this.references = new ddic_references_1.DDICReferences();\n }\n static abaplintVersion() {\n // magic, see build script \"version.sh\"\n return \"2.92.0\";\n }\n getDDICReferences() {\n return this.references;\n }\n *getObjects() {\n for (const name in this.objects) {\n for (const type in this.objects[name]) {\n yield this.objects[name][type];\n }\n }\n }\n *getObjectsByType(type) {\n for (const name in this.objectsByType[type] || []) {\n yield this.objectsByType[type][name];\n }\n }\n *getFiles() {\n for (const obj of this.getObjects()) {\n for (const file of obj.getFiles()) {\n yield file;\n }\n }\n }\n getFirstObject() {\n for (const name in this.objects) {\n for (const type in this.objects[name]) {\n return this.objects[name][type];\n }\n }\n return undefined;\n }\n getObjectCount(skipDependencies = true) {\n let res = 0;\n for (const o of this.getObjects()) {\n if (skipDependencies === true && this.isDependency(o)) {\n continue;\n }\n res = res + 1;\n }\n return res;\n }\n getFileByName(filename) {\n const upper = filename.toUpperCase();\n for (const o of this.getObjects()) {\n for (const f of o.getFiles()) {\n if (f.getFilename().toUpperCase() === upper) {\n return f;\n }\n }\n }\n return undefined;\n }\n getObject(type, name) {\n if (type === undefined || name === undefined) {\n return undefined;\n }\n const searchName = name.toUpperCase();\n if (this.objects[searchName]) {\n return this.objects[searchName][type];\n }\n return undefined;\n }\n getConfig() {\n return this.conf;\n }\n // assumption: Config is immutable, and can only be changed via this method\n setConfig(conf) {\n for (const obj of this.getObjects()) {\n obj.setDirty();\n }\n this.conf = conf;\n return this;\n }\n inErrorNamespace(name) {\n // todo: performance? cache regexp?\n const reg = new RegExp(this.getConfig().getSyntaxSetttings().errorNamespace, \"i\");\n return reg.test(name);\n }\n addFile(file) {\n return this.addFiles([file]);\n }\n updateFile(file) {\n const obj = this.find(file.getObjectName(), file.getObjectType());\n obj.updateFile(file);\n return this;\n }\n removeFile(file) {\n const obj = this.find(file.getObjectName(), file.getObjectType());\n obj.removeFile(file);\n if (obj.getFiles().length === 0) {\n this.references.clear(obj);\n this.removeObject(obj);\n }\n return this;\n }\n _addFiles(files, dependency) {\n var _a;\n const globalExclude = ((_a = this.conf.getGlobal().exclude) !== null && _a !== void 0 ? _a : [])\n .map(pattern => new RegExp(pattern, \"i\"));\n for (const f of files) {\n const filename = f.getFilename();\n const isNotAbapgitFile = filename.split(\".\").length <= 2;\n if (isNotAbapgitFile || excludeHelper_1.ExcludeHelper.isExcluded(filename, globalExclude)) {\n continue;\n }\n let found = this.findOrCreate(f.getObjectName(), f.getObjectType());\n if (dependency === false && found && this.isDependency(found)) {\n this.removeDependency(found);\n found = this.findOrCreate(f.getObjectName(), f.getObjectType());\n }\n found.addFile(f);\n }\n return this;\n }\n addFiles(files) {\n this._addFiles(files, false);\n return this;\n }\n addDependencies(files) {\n for (const f of files) {\n this.addDependency(f);\n }\n return this;\n }\n addDependency(file) {\n var _a;\n const type = (_a = file.getObjectType()) === null || _a === void 0 ? void 0 : _a.toUpperCase();\n if (type === undefined) {\n return this;\n }\n const name = file.getObjectName().toUpperCase();\n if (this.dependencies[type] === undefined) {\n this.dependencies[type] = {};\n }\n this.dependencies[type][name] = true;\n this._addFiles([file], true);\n return this;\n }\n removeDependency(obj) {\n var _a;\n (_a = this.dependencies[obj.getType()]) === null || _a === void 0 ? true : delete _a[obj.getName()];\n this.removeObject(obj);\n }\n isDependency(obj) {\n var _a;\n return ((_a = this.dependencies[obj.getType()]) === null || _a === void 0 ? void 0 : _a[obj.getName()]) === true;\n }\n isFileDependency(filename) {\n var _a, _b;\n const f = this.getFileByName(filename);\n if (f === undefined) {\n return false;\n }\n const type = (_a = f.getObjectType()) === null || _a === void 0 ? void 0 : _a.toUpperCase();\n if (type === undefined) {\n return false;\n }\n const name = f.getObjectName().toUpperCase();\n return ((_b = this.dependencies[type]) === null || _b === void 0 ? void 0 : _b[name]) === true;\n }\n // assumption: the file is already in the registry\n findObjectForFile(file) {\n const filename = file.getFilename();\n for (const obj of this.getObjects()) {\n for (const ofile of obj.getFiles()) {\n if (ofile.getFilename() === filename) {\n return obj;\n }\n }\n }\n return undefined;\n }\n // todo, this will be changed to async sometime\n findIssues(input) {\n if (this.isDirty() === true) {\n this.parse();\n }\n return this.runRules(input);\n }\n // todo, this will be changed to async sometime\n findIssuesObject(iobj) {\n if (this.isDirty() === true) {\n this.parse();\n }\n return this.runRules(undefined, iobj);\n }\n // todo, this will be changed to async sometime\n parse() {\n if (this.isDirty() === false) {\n return this;\n }\n ParsingPerformance.clear();\n this.issues = [];\n for (const o of this.getObjects()) {\n this.parsePrivate(o);\n this.issues.push(...o.getParsingIssues());\n }\n new find_global_definitions_1.FindGlobalDefinitions(this).run();\n return this;\n }\n async parseAsync(input) {\n var _a, _b;\n if (this.isDirty() === false) {\n return this;\n }\n ParsingPerformance.clear();\n (_a = input === null || input === void 0 ? void 0 : input.progress) === null || _a === void 0 ? void 0 : _a.set(this.getObjectCount(false), \"Lexing and parsing\");\n this.issues = [];\n for (const o of this.getObjects()) {\n await ((_b = input === null || input === void 0 ? void 0 : input.progress) === null || _b === void 0 ? void 0 : _b.tick(\"Lexing and parsing(\" + this.conf.getVersion() + \") - \" + o.getType() + \" \" + o.getName()));\n this.parsePrivate(o);\n this.issues.push(...o.getParsingIssues());\n }\n if ((input === null || input === void 0 ? void 0 : input.outputPerformance) === true) {\n ParsingPerformance.output();\n }\n new find_global_definitions_1.FindGlobalDefinitions(this).run(input === null || input === void 0 ? void 0 : input.progress);\n return this;\n }\n //////////////////////////////////////////\n // todo, refactor, this is a mess, see where-used, a lot of the code should be in this method instead\n parsePrivate(input) {\n const config = this.getConfig();\n const result = input.parse(config.getVersion(), config.getSyntaxSetttings().globalMacros, this);\n ParsingPerformance.push(input, result);\n }\n isDirty() {\n for (const o of this.getObjects()) {\n const dirty = o.isDirty();\n if (dirty === true) {\n return true;\n }\n }\n return false;\n }\n runRules(input, iobj) {\n var _a, _b, _c, _d, _e, _f;\n const rulePerformance = {};\n const issues = this.issues.slice(0);\n const objects = iobj ? [iobj] : this.getObjects();\n const rules = this.conf.getEnabledRules();\n const skipLogic = new skip_logic_1.SkipLogic(this);\n (_a = input === null || input === void 0 ? void 0 : input.progress) === null || _a === void 0 ? void 0 : _a.set(iobj ? 1 : this.getObjectCount(false), \"Run Syntax\");\n const check = [];\n for (const obj of objects) {\n (_b = input === null || input === void 0 ? void 0 : input.progress) === null || _b === void 0 ? void 0 : _b.tick(\"Run Syntax - \" + obj.getName());\n if (skipLogic.skip(obj) || this.isDependency(obj)) {\n continue;\n }\n if (obj instanceof _abap_object_1.ABAPObject) {\n new syntax_1.SyntaxLogic(this, obj).run();\n }\n check.push(obj);\n }\n (_c = input === null || input === void 0 ? void 0 : input.progress) === null || _c === void 0 ? void 0 : _c.set(rules.length, \"Initialize Rules\");\n for (const rule of rules) {\n (_d = input === null || input === void 0 ? void 0 : input.progress) === null || _d === void 0 ? void 0 : _d.tick(\"Initialize Rules - \" + rule.getMetadata().key);\n if (rule.initialize === undefined) {\n throw new Error(rule.getMetadata().key + \" missing initialize method\");\n }\n rule.initialize(this);\n rulePerformance[rule.getMetadata().key] = 0;\n }\n (_e = input === null || input === void 0 ? void 0 : input.progress) === null || _e === void 0 ? void 0 : _e.set(check.length, \"Finding Issues\");\n for (const obj of check) {\n (_f = input === null || input === void 0 ? void 0 : input.progress) === null || _f === void 0 ? void 0 : _f.tick(\"Finding Issues - \" + obj.getType() + \" \" + obj.getName());\n for (const rule of rules) {\n const before = Date.now();\n issues.push(...rule.run(obj));\n const runtime = Date.now() - before;\n rulePerformance[rule.getMetadata().key] = rulePerformance[rule.getMetadata().key] + runtime;\n }\n }\n if ((input === null || input === void 0 ? void 0 : input.outputPerformance) === true) {\n const perf = [];\n for (const p in rulePerformance) {\n if (rulePerformance[p] > 100) { // ignore rules if it takes less than 100ms\n perf.push({ name: p, time: rulePerformance[p] });\n }\n }\n perf.sort((a, b) => { return b.time - a.time; });\n for (const p of perf) {\n process.stderr.write(\"\\t\" + p.time + \"ms\\t\" + p.name + \"\\n\");\n }\n }\n return this.excludeIssues(issues);\n }\n excludeIssues(issues) {\n var _a;\n const ret = issues;\n const globalNoIssues = this.conf.getGlobal().noIssues || [];\n const globalNoIssuesPatterns = globalNoIssues.map(x => new RegExp(x, \"i\"));\n if (globalNoIssuesPatterns.length > 0) {\n for (let i = ret.length - 1; i >= 0; i--) {\n const filename = ret[i].getFilename();\n if (excludeHelper_1.ExcludeHelper.isExcluded(filename, globalNoIssuesPatterns)) {\n ret.splice(i, 1);\n }\n }\n }\n // exclude issues, as now we know both the filename and issue key\n for (const rule of artifacts_rules_1.ArtifactsRules.getRules()) {\n const key = rule.getMetadata().key;\n const ruleExclude = (_a = this.conf.readByKey(key, \"exclude\")) !== null && _a !== void 0 ? _a : [];\n if (ruleExclude.length === 0) {\n continue;\n }\n const ruleExcludePatterns = ruleExclude.map(x => new RegExp(x, \"i\"));\n for (let i = ret.length - 1; i >= 0; i--) {\n if (ret[i].getKey() !== key) {\n continue;\n }\n const filename = ret[i].getFilename();\n if (excludeHelper_1.ExcludeHelper.isExcluded(filename, ruleExcludePatterns)) {\n ret.splice(i, 1);\n }\n }\n }\n return ret;\n }\n findOrCreate(name, type) {\n try {\n return this.find(name, type);\n }\n catch (_a) {\n const newName = name.toUpperCase();\n const newType = type ? type : \"UNKNOWN\";\n const add = artifacts_objects_1.ArtifactsObjects.newObject(newName, newType);\n if (this.objects[newName] === undefined) {\n this.objects[newName] = {};\n }\n this.objects[newName][newType] = add;\n if (this.objectsByType[newType] === undefined) {\n this.objectsByType[newType] = {};\n }\n this.objectsByType[newType][newName] = add;\n return add;\n }\n }\n removeObject(remove) {\n if (remove === undefined) {\n return;\n }\n if (this.objects[remove.getName()][remove.getType()] === undefined) {\n throw new Error(\"removeObject: object not found\");\n }\n if (Object.keys(this.objects[remove.getName()]).length === 1) {\n delete this.objects[remove.getName()];\n }\n else {\n delete this.objects[remove.getName()][remove.getType()];\n }\n if (Object.keys(this.objectsByType[remove.getType()]).length === 1) {\n delete this.objectsByType[remove.getType()];\n }\n else {\n delete this.objectsByType[remove.getType()][remove.getName()];\n }\n }\n find(name, type) {\n const searchType = type ? type : \"UNKNOWN\";\n const searchName = name.toUpperCase();\n if (this.objects[searchName] !== undefined\n && this.objects[searchName][searchType]) {\n return this.objects[searchName][searchType];\n }\n throw new Error(\"find: object not found, \" + type + \" \" + name);\n }\n}\nexports.Registry = Registry;\n//# sourceMappingURL=registry.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/registry.js?");
11427
11438
 
11428
11439
  /***/ }),
11429
11440
 
@@ -12710,7 +12721,7 @@ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\n
12710
12721
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
12711
12722
 
12712
12723
  "use strict";
12713
- eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.RFCErrorHandling = exports.RFCErrorHandlingConf = void 0;\r\nconst issue_1 = __webpack_require__(/*! ../issue */ \"./node_modules/@abaplint/core/build/src/issue.js\");\r\nconst _abap_rule_1 = __webpack_require__(/*! ./_abap_rule */ \"./node_modules/@abaplint/core/build/src/rules/_abap_rule.js\");\r\nconst _basic_rule_config_1 = __webpack_require__(/*! ./_basic_rule_config */ \"./node_modules/@abaplint/core/build/src/rules/_basic_rule_config.js\");\r\nconst Statements = __webpack_require__(/*! ../abap/2_statements/statements */ \"./node_modules/@abaplint/core/build/src/abap/2_statements/statements/index.js\");\r\nconst Expressions = __webpack_require__(/*! ../abap/2_statements/expressions */ \"./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js\");\r\nconst _irule_1 = __webpack_require__(/*! ./_irule */ \"./node_modules/@abaplint/core/build/src/rules/_irule.js\");\r\nclass RFCErrorHandlingConf extends _basic_rule_config_1.BasicRuleConfig {\r\n}\r\nexports.RFCErrorHandlingConf = RFCErrorHandlingConf;\r\nclass RFCErrorHandling extends _abap_rule_1.ABAPRule {\r\n constructor() {\r\n super(...arguments);\r\n this.conf = new RFCErrorHandlingConf();\r\n }\r\n getMetadata() {\r\n return {\r\n key: \"rfc_error_handling\",\r\n title: \"RFC error handling\",\r\n tags: [_irule_1.RuleTag.SingleFile],\r\n shortDescription: `Checks that exceptions 'system_failure' and 'communication_failure' are handled in RFC calls`,\r\n extendedInformation: `https://help.sap.com/doc/abapdocu_750_index_htm/7.50/en-US/abenrfc_exception.htm`,\r\n badExample: `\r\nCALL FUNCTION 'ZRFC'\r\n DESTINATION lv_rfc.`,\r\n goodExample: `\r\nCALL FUNCTION 'ZRFC'\r\n DESTINATION lv_rfc\r\n EXCEPTIONS\r\n system_failure = 1 MESSAGE msg\r\n communication_failure = 2 MESSAGE msg\r\n resource_failure = 3\r\n OTHERS = 4.`,\r\n };\r\n }\r\n getMessage() {\r\n return \"RFC error handling: At least one unhandled exception from SYSTEM_FAILURE, COMMUNICATION_FAILURE, RESOURCE_FAILURE.\";\r\n }\r\n getConfig() {\r\n return this.conf;\r\n }\r\n setConfig(conf) {\r\n this.conf = conf;\r\n }\r\n runParsed(file) {\r\n const output = [];\r\n for (const stat of file.getStatements()) {\r\n const token = stat.getFirstToken();\r\n if (!(stat.get() instanceof Statements.CallFunction)) {\r\n continue;\r\n }\r\n if (!stat.findFirstExpression(Expressions.Destination)) {\r\n continue;\r\n }\r\n const list = stat.findFirstExpression(Expressions.ParameterListExceptions);\r\n if (list === undefined) {\r\n const issue = issue_1.Issue.atToken(file, token, this.getMessage(), this.getMetadata().key, this.conf.severity);\r\n output.push(issue);\r\n continue;\r\n }\r\n const parameters = list.findAllExpressions(Expressions.ParameterName);\r\n const names = [];\r\n for (const par of parameters) {\r\n names.push(par.getFirstToken().getStr().toUpperCase());\r\n }\r\n if (names.indexOf(\"SYSTEM_FAILURE\") < 0\r\n || names.indexOf(\"COMMUNICATION_FAILURE\") < 0\r\n || names.indexOf(\"RESOURCE_FAILURE\") < 0) {\r\n const issue = issue_1.Issue.atToken(file, token, this.getMessage(), this.getMetadata().key, this.conf.severity);\r\n output.push(issue);\r\n continue;\r\n }\r\n }\r\n return output;\r\n }\r\n}\r\nexports.RFCErrorHandling = RFCErrorHandling;\r\n//# sourceMappingURL=rfc_error_handling.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/rules/rfc_error_handling.js?");
12724
+ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.RFCErrorHandling = exports.RFCErrorHandlingConf = void 0;\r\nconst issue_1 = __webpack_require__(/*! ../issue */ \"./node_modules/@abaplint/core/build/src/issue.js\");\r\nconst _abap_rule_1 = __webpack_require__(/*! ./_abap_rule */ \"./node_modules/@abaplint/core/build/src/rules/_abap_rule.js\");\r\nconst _basic_rule_config_1 = __webpack_require__(/*! ./_basic_rule_config */ \"./node_modules/@abaplint/core/build/src/rules/_basic_rule_config.js\");\r\nconst Statements = __webpack_require__(/*! ../abap/2_statements/statements */ \"./node_modules/@abaplint/core/build/src/abap/2_statements/statements/index.js\");\r\nconst Expressions = __webpack_require__(/*! ../abap/2_statements/expressions */ \"./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js\");\r\nconst _irule_1 = __webpack_require__(/*! ./_irule */ \"./node_modules/@abaplint/core/build/src/rules/_irule.js\");\r\nclass RFCErrorHandlingConf extends _basic_rule_config_1.BasicRuleConfig {\r\n}\r\nexports.RFCErrorHandlingConf = RFCErrorHandlingConf;\r\nclass RFCErrorHandling extends _abap_rule_1.ABAPRule {\r\n constructor() {\r\n super(...arguments);\r\n this.conf = new RFCErrorHandlingConf();\r\n }\r\n getMetadata() {\r\n return {\r\n key: \"rfc_error_handling\",\r\n title: \"RFC error handling\",\r\n tags: [_irule_1.RuleTag.SingleFile],\r\n shortDescription: `Checks that exceptions 'system_failure' and 'communication_failure' are handled in RFC calls`,\r\n extendedInformation: `https://help.sap.com/doc/abapdocu_750_index_htm/7.50/en-US/abenrfc_exception.htm`,\r\n badExample: `\r\nCALL FUNCTION 'ZRFC'\r\n DESTINATION lv_rfc.`,\r\n goodExample: `\r\nCALL FUNCTION 'ZRFC'\r\n DESTINATION lv_rfc\r\n EXCEPTIONS\r\n system_failure = 1 MESSAGE msg\r\n communication_failure = 2 MESSAGE msg\r\n resource_failure = 3\r\n OTHERS = 4.`,\r\n };\r\n }\r\n getMessage() {\r\n return \"RFC error handling: At least one unhandled exception from SYSTEM_FAILURE, COMMUNICATION_FAILURE, RESOURCE_FAILURE\";\r\n }\r\n getConfig() {\r\n return this.conf;\r\n }\r\n setConfig(conf) {\r\n this.conf = conf;\r\n }\r\n runParsed(file) {\r\n const output = [];\r\n for (const stat of file.getStatements()) {\r\n const token = stat.getFirstToken();\r\n if (!(stat.get() instanceof Statements.CallFunction)) {\r\n continue;\r\n }\r\n if (!stat.findFirstExpression(Expressions.Destination)) {\r\n continue;\r\n }\r\n const list = stat.findFirstExpression(Expressions.ParameterListExceptions);\r\n if (list === undefined) {\r\n const issue = issue_1.Issue.atToken(file, token, this.getMessage(), this.getMetadata().key, this.conf.severity);\r\n output.push(issue);\r\n continue;\r\n }\r\n const parameters = list.findAllExpressions(Expressions.ParameterName);\r\n const names = [];\r\n for (const par of parameters) {\r\n names.push(par.getFirstToken().getStr().toUpperCase());\r\n }\r\n if (names.indexOf(\"SYSTEM_FAILURE\") < 0\r\n || names.indexOf(\"COMMUNICATION_FAILURE\") < 0\r\n || names.indexOf(\"RESOURCE_FAILURE\") < 0) {\r\n const issue = issue_1.Issue.atToken(file, token, this.getMessage(), this.getMetadata().key, this.conf.severity);\r\n output.push(issue);\r\n continue;\r\n }\r\n }\r\n return output;\r\n }\r\n}\r\nexports.RFCErrorHandling = RFCErrorHandling;\r\n//# sourceMappingURL=rfc_error_handling.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/rules/rfc_error_handling.js?");
12714
12725
 
12715
12726
  /***/ }),
12716
12727
 
@@ -13128,7 +13139,7 @@ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\n
13128
13139
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
13129
13140
 
13130
13141
  "use strict";
13131
- eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.SkipLogic = void 0;\r\nconst objects_1 = __webpack_require__(/*! ./objects */ \"./node_modules/@abaplint/core/build/src/objects/index.js\");\r\nconst include_graph_1 = __webpack_require__(/*! ./utils/include_graph */ \"./node_modules/@abaplint/core/build/src/utils/include_graph.js\");\r\nclass SkipLogic {\r\n constructor(reg) {\r\n this.reg = reg;\r\n this.tobj = undefined;\r\n }\r\n skip(obj) {\r\n const global = this.reg.getConfig().getGlobal();\r\n if (global.skipGeneratedGatewayClasses\r\n && obj instanceof objects_1.Class\r\n && this.isGeneratedGatewayClass(obj)) {\r\n return true;\r\n }\r\n else if (global.skipIncludesWithoutMain === true\r\n && obj instanceof objects_1.Program\r\n && obj.isInclude() === true) {\r\n const ig = new include_graph_1.IncludeGraph(this.reg);\r\n const file = obj.getMainABAPFile();\r\n if (file && ig.listMainForInclude(file.getFilename()).length === 0) {\r\n return true;\r\n }\r\n }\r\n else if (global.skipGeneratedPersistentClasses\r\n && obj instanceof objects_1.Class\r\n && this.isGeneratedPersistentClass(obj)) {\r\n return true;\r\n }\r\n else if (global.skipGeneratedFunctionGroups\r\n && obj instanceof objects_1.FunctionGroup\r\n && this.isGeneratedFunctionGroup(obj)) {\r\n return true;\r\n }\r\n else if (obj instanceof objects_1.Class && this.isGeneratedProxyClass(obj)) {\r\n return true;\r\n }\r\n else if (obj instanceof objects_1.Interface && this.isGeneratedProxyInterface(obj)) {\r\n return true;\r\n }\r\n else if (obj instanceof objects_1.Interface && this.isGeneratedBOPFInterface(obj)) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n ///////////////////////////\r\n isGeneratedBOPFInterface(obj) {\r\n var _a;\r\n const implementing = (_a = obj.getDefinition()) === null || _a === void 0 ? void 0 : _a.getImplementing();\r\n if (implementing === undefined) {\r\n return false;\r\n }\r\n for (const i of implementing) {\r\n if (i.name.toUpperCase() === \"/BOBF/IF_LIB_CONSTANTS\") {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n isGeneratedProxyInterface(obj) {\r\n const xml = obj.getXML();\r\n if (!xml) {\r\n return false;\r\n }\r\n const result = xml.match(/<CLSPROXY>(.)<\\/CLSPROXY>/);\r\n if (result) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n isGeneratedProxyClass(obj) {\r\n const xml = obj.getXML();\r\n if (!xml) {\r\n return false;\r\n }\r\n const result = xml.match(/<CLSPROXY>(.)<\\/CLSPROXY>/);\r\n if (result) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n isGeneratedFunctionGroup(group) {\r\n var _a;\r\n if (this.tobj === undefined) {\r\n this.tobj = {};\r\n for (const obj of this.reg.getObjects()) {\r\n if (obj.getType() !== \"TOBJ\") {\r\n continue;\r\n }\r\n const tobj = obj;\r\n const area = (_a = tobj.getArea()) === null || _a === void 0 ? void 0 : _a.toUpperCase();\r\n if (area) {\r\n this.tobj[area] = true;\r\n }\r\n }\r\n }\r\n return this.tobj[group.getName().toUpperCase()];\r\n }\r\n isGeneratedGatewayClass(obj) {\r\n var _a;\r\n let sup = undefined;\r\n const definition = obj.getClassDefinition();\r\n if (definition) {\r\n sup = (_a = definition.superClassName) === null || _a === void 0 ? void 0 : _a.toUpperCase();\r\n }\r\n if (obj.getName().match(/_MPC$/i) && sup === \"/IWBEP/CL_MGW_PUSH_ABS_MODEL\") {\r\n return true;\r\n }\r\n else if (obj.getName().match(/_DPC$/i) && sup === \"/IWBEP/CL_MGW_PUSH_ABS_DATA\") {\r\n return true;\r\n }\r\n else if (sup === \"CL_SADL_GTK_EXPOSURE_MPC\") {\r\n return true;\r\n }\r\n return false;\r\n }\r\n isGeneratedPersistentClass(obj) {\r\n if (obj.getCategory() === objects_1.ClassCategory.Persistent) {\r\n return true;\r\n }\r\n else if (obj.getCategory() === objects_1.ClassCategory.PersistentFactory) {\r\n return true;\r\n }\r\n const main = obj.getClassDefinition();\r\n if (main) {\r\n const sup = main.superClassName;\r\n if (sup) {\r\n const sclass = this.reg.getObject(\"CLAS\", sup.toUpperCase());\r\n if (sclass && sclass.getCategory() === objects_1.ClassCategory.PersistentFactory) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n}\r\nexports.SkipLogic = SkipLogic;\r\n//# sourceMappingURL=skip_logic.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/skip_logic.js?");
13142
+ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.SkipLogic = void 0;\r\nconst objects_1 = __webpack_require__(/*! ./objects */ \"./node_modules/@abaplint/core/build/src/objects/index.js\");\r\nconst include_graph_1 = __webpack_require__(/*! ./utils/include_graph */ \"./node_modules/@abaplint/core/build/src/utils/include_graph.js\");\r\nclass SkipLogic {\r\n constructor(reg) {\r\n this.reg = reg;\r\n this.tobj = undefined;\r\n }\r\n skip(obj) {\r\n const global = this.reg.getConfig().getGlobal();\r\n if (global.skipGeneratedGatewayClasses === true\r\n && obj instanceof objects_1.Class\r\n && this.isGeneratedGatewayClass(obj)) {\r\n return true;\r\n }\r\n else if (global.skipIncludesWithoutMain === true\r\n && obj instanceof objects_1.Program\r\n && obj.isInclude() === true) {\r\n const ig = new include_graph_1.IncludeGraph(this.reg);\r\n const file = obj.getMainABAPFile();\r\n if (file && ig.listMainForInclude(file.getFilename()).length === 0) {\r\n return true;\r\n }\r\n }\r\n else if (global.skipGeneratedPersistentClasses === true\r\n && obj instanceof objects_1.Class\r\n && this.isGeneratedPersistentClass(obj)) {\r\n return true;\r\n }\r\n else if (global.skipGeneratedFunctionGroups === true\r\n && obj instanceof objects_1.FunctionGroup\r\n && this.isGeneratedFunctionGroup(obj)) {\r\n return true;\r\n }\r\n else if (global.skipGeneratedProxyClasses === true\r\n && obj instanceof objects_1.Class\r\n && this.isGeneratedProxyClass(obj)) {\r\n return true;\r\n }\r\n else if (global.skipGeneratedProxyInterfaces === true\r\n && obj instanceof objects_1.Interface\r\n && this.isGeneratedProxyInterface(obj)) {\r\n return true;\r\n }\r\n else if (global.skipGeneratedBOPFInterfaces === true\r\n && obj instanceof objects_1.Interface\r\n && this.isGeneratedBOPFInterface(obj)) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n ///////////////////////////\r\n isGeneratedBOPFInterface(obj) {\r\n var _a;\r\n const implementing = (_a = obj.getDefinition()) === null || _a === void 0 ? void 0 : _a.getImplementing();\r\n if (implementing === undefined) {\r\n return false;\r\n }\r\n for (const i of implementing) {\r\n if (i.name.toUpperCase() === \"/BOBF/IF_LIB_CONSTANTS\") {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n isGeneratedProxyInterface(obj) {\r\n const xml = obj.getXML();\r\n if (!xml) {\r\n return false;\r\n }\r\n const result = xml.match(/<CLSPROXY>(.)<\\/CLSPROXY>/);\r\n if (result) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n isGeneratedProxyClass(obj) {\r\n const xml = obj.getXML();\r\n if (!xml) {\r\n return false;\r\n }\r\n const result = xml.match(/<CLSPROXY>(.)<\\/CLSPROXY>/);\r\n if (result) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n isGeneratedFunctionGroup(group) {\r\n var _a;\r\n if (this.tobj === undefined) {\r\n this.tobj = {};\r\n for (const obj of this.reg.getObjects()) {\r\n if (obj.getType() !== \"TOBJ\") {\r\n continue;\r\n }\r\n const tobj = obj;\r\n const area = (_a = tobj.getArea()) === null || _a === void 0 ? void 0 : _a.toUpperCase();\r\n if (area) {\r\n this.tobj[area] = true;\r\n }\r\n }\r\n }\r\n return this.tobj[group.getName().toUpperCase()];\r\n }\r\n isGeneratedGatewayClass(obj) {\r\n var _a;\r\n let sup = undefined;\r\n const definition = obj.getClassDefinition();\r\n if (definition) {\r\n sup = (_a = definition.superClassName) === null || _a === void 0 ? void 0 : _a.toUpperCase();\r\n }\r\n if (obj.getName().match(/_MPC$/i) && sup === \"/IWBEP/CL_MGW_PUSH_ABS_MODEL\") {\r\n return true;\r\n }\r\n else if (obj.getName().match(/_DPC$/i) && sup === \"/IWBEP/CL_MGW_PUSH_ABS_DATA\") {\r\n return true;\r\n }\r\n else if (sup === \"CL_SADL_GTK_EXPOSURE_MPC\") {\r\n return true;\r\n }\r\n return false;\r\n }\r\n isGeneratedPersistentClass(obj) {\r\n if (obj.getCategory() === objects_1.ClassCategory.Persistent) {\r\n return true;\r\n }\r\n else if (obj.getCategory() === objects_1.ClassCategory.PersistentFactory) {\r\n return true;\r\n }\r\n const main = obj.getClassDefinition();\r\n if (main) {\r\n const sup = main.superClassName;\r\n if (sup) {\r\n const sclass = this.reg.getObject(\"CLAS\", sup.toUpperCase());\r\n if (sclass && sclass.getCategory() === objects_1.ClassCategory.PersistentFactory) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n}\r\nexports.SkipLogic = SkipLogic;\r\n//# sourceMappingURL=skip_logic.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/skip_logic.js?");
13132
13143
 
13133
13144
  /***/ }),
13134
13145
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abaplint/cli",
3
- "version": "2.91.37",
3
+ "version": "2.92.0",
4
4
  "description": "abaplint - Command Line Interface",
5
5
  "bin": {
6
6
  "abaplint": "./abaplint"
@@ -39,12 +39,12 @@
39
39
  },
40
40
  "homepage": "https://abaplint.org",
41
41
  "devDependencies": {
42
- "@abaplint/core": "^2.91.37",
42
+ "@abaplint/core": "^2.92.0",
43
43
  "@types/chai": "^4.3.3",
44
44
  "@types/glob": "^7.2.0",
45
45
  "@types/minimist": "^1.2.2",
46
46
  "@types/mocha": "^9.1.1",
47
- "@types/node": "^18.7.11",
47
+ "@types/node": "^18.7.13",
48
48
  "@types/progress": "^2.0.5",
49
49
  "chai": "^4.3.6",
50
50
  "chalk": "^5.0.1",