@mcp-abap-adt/adt-clients 3.8.6 → 3.8.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/accessControl/check.d.ts.map +1 -1
- package/dist/core/accessControl/check.js +3 -10
- package/dist/core/class/check.d.ts.map +1 -1
- package/dist/core/class/check.js +3 -24
- package/dist/core/dataElement/check.d.ts.map +1 -1
- package/dist/core/dataElement/check.js +2 -5
- package/dist/core/domain/check.d.ts.map +1 -1
- package/dist/core/domain/check.js +3 -14
- package/dist/core/functionGroup/check.d.ts.map +1 -1
- package/dist/core/functionGroup/check.js +2 -6
- package/dist/core/functionModule/check.d.ts.map +1 -1
- package/dist/core/functionModule/check.js +3 -13
- package/dist/core/functionModule/validation.d.ts.map +1 -1
- package/dist/core/functionModule/validation.js +3 -13
- package/dist/core/interface/check.d.ts.map +1 -1
- package/dist/core/interface/check.js +3 -11
- package/dist/core/program/check.d.ts.map +1 -1
- package/dist/core/program/check.js +3 -11
- package/dist/core/serviceDefinition/check.d.ts.map +1 -1
- package/dist/core/serviceDefinition/check.js +3 -11
- package/dist/core/structure/check.d.ts.map +1 -1
- package/dist/core/structure/check.js +3 -12
- package/dist/core/view/check.d.ts.map +1 -1
- package/dist/core/view/check.js +4 -9
- package/dist/utils/checkRun.d.ts +3 -0
- package/dist/utils/checkRun.d.ts.map +1 -1
- package/dist/utils/checkRun.js +24 -3
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/core/accessControl/check.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,IAAI,aAAa,EAC7B,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAGlC;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,eAAe,EAC3B,iBAAiB,EAAE,MAAM,EACzB,OAAO,GAAE,MAAmB,EAC5B,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/core/accessControl/check.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,IAAI,aAAa,EAC7B,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAGlC;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,eAAe,EAC3B,iBAAiB,EAAE,MAAM,EACzB,OAAO,GAAE,MAAmB,EAC5B,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,aAAa,CAAC,CAiBxB"}
|
|
@@ -8,16 +8,9 @@ const checkRun_1 = require("../../utils/checkRun");
|
|
|
8
8
|
async function checkAccessControl(connection, accessControlName, version = 'inactive', sourceCode) {
|
|
9
9
|
const response = await (0, checkRun_1.runCheckRun)(connection, 'access_control', accessControlName, version, 'abapCheckRun', sourceCode);
|
|
10
10
|
const checkResult = (0, checkRun_1.parseCheckRunResponse)(response);
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
checkResult.errors.some((err) => (err.text || '').toLowerCase().includes('has been checked'));
|
|
15
|
-
if (hasCheckedMessage) {
|
|
16
|
-
return response;
|
|
17
|
-
}
|
|
18
|
-
// Only throw error if there are actual problems (ERROR or WARNING)
|
|
19
|
-
if (!checkResult.success && checkResult.has_errors) {
|
|
20
|
-
throw new Error(`Access control check failed: ${checkResult.message}`);
|
|
11
|
+
if (checkResult.has_errors) {
|
|
12
|
+
const errorMessages = checkResult.errors.map((err) => err.text).join('; ');
|
|
13
|
+
throw new Error(`Access control check failed: ${errorMessages}`);
|
|
21
14
|
}
|
|
22
15
|
return response;
|
|
23
16
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/core/class/check.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,YAAY,IAAI,aAAa,EAC7B,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAMlC;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,UAAU,CAC9B,UAAU,EAAE,eAAe,EAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,QAAQ,GAAG,UAAU,EAC9B,UAAU,CAAC,EAAE,MAAM,EACnB,mBAAmB,CAAC,EAAE,MAAM,GAC3B,OAAO,CAAC,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/core/class/check.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,YAAY,IAAI,aAAa,EAC7B,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAMlC;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,UAAU,CAC9B,UAAU,EAAE,eAAe,EAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,QAAQ,GAAG,UAAU,EAC9B,UAAU,CAAC,EAAE,MAAM,EACnB,mBAAmB,CAAC,EAAE,MAAM,GAC3B,OAAO,CAAC,aAAa,CAAC,CAoCxB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,wBAAwB,CAC5C,UAAU,EAAE,eAAe,EAC3B,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,EACvB,OAAO,GAAE,QAAQ,GAAG,UAAuB,EAC3C,mBAAmB,GAAE,MAAoC,GACxD,OAAO,CAAC,aAAa,CAAC,CAUxB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,eAAe,EAC3B,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,MAAM,EACxB,OAAO,GAAE,QAAQ,GAAG,UAAuB,EAC3C,mBAAmB,GAAE,MAAoC,GACxD,OAAO,CAAC,aAAa,CAAC,CAUxB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,qBAAqB,CACzC,UAAU,EAAE,eAAe,EAC3B,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,MAAM,EACzB,OAAO,GAAE,QAAQ,GAAG,UAAuB,EAC3C,mBAAmB,GAAE,MAAoC,GACxD,OAAO,CAAC,aAAa,CAAC,CAUxB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,eAAe,EAC3B,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,QAAQ,GAAG,UAAuB,EAC3C,mBAAmB,GAAE,MAAoC,GACxD,OAAO,CAAC,aAAa,CAAC,CAUxB"}
|
package/dist/core/class/check.js
CHANGED
|
@@ -70,22 +70,9 @@ async function checkClass(connection, className, version, sourceCode, artifactCo
|
|
|
70
70
|
response = await runCheckRun(connection, 'class', className, version, 'abapCheckRun');
|
|
71
71
|
}
|
|
72
72
|
const checkResult = parseCheckRunResponse(response);
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
const errorTexts = checkResult.errors
|
|
77
|
-
.map((err) => err.text || '')
|
|
78
|
-
.join(' ')
|
|
79
|
-
.toLowerCase();
|
|
80
|
-
const isCheckedMessage = errorTexts.includes('has been checked') ||
|
|
81
|
-
errorTexts.includes('was checked');
|
|
82
|
-
if (!isCheckedMessage) {
|
|
83
|
-
// Has type E errors that are not "has been checked" - throw error
|
|
84
|
-
const errorMessages = checkResult.errors
|
|
85
|
-
.map((err) => err.text)
|
|
86
|
-
.join('; ');
|
|
87
|
-
throw new Error(`Class check failed: ${errorMessages}`);
|
|
88
|
-
}
|
|
73
|
+
if (checkResult.has_errors) {
|
|
74
|
+
const errorMessages = checkResult.errors.map((err) => err.text).join('; ');
|
|
75
|
+
throw new Error(`Class check failed: ${errorMessages}`);
|
|
89
76
|
}
|
|
90
77
|
return response;
|
|
91
78
|
}
|
|
@@ -197,14 +184,6 @@ async function checkClassInclude(connection, className, includeSource, includeTy
|
|
|
197
184
|
headers,
|
|
198
185
|
});
|
|
199
186
|
const checkResult = parseCheckRunResponse(response);
|
|
200
|
-
// "has been checked" or "was checked" messages are normal responses, not errors
|
|
201
|
-
const hasCheckedMessage = checkResult.message?.toLowerCase().includes('has been checked') ||
|
|
202
|
-
checkResult.message?.toLowerCase().includes('was checked') ||
|
|
203
|
-
checkResult.errors.some((err) => (err.text || '').toLowerCase().includes('has been checked'));
|
|
204
|
-
if (hasCheckedMessage && !checkResult.has_errors) {
|
|
205
|
-
return response; // "has been checked" with no errors is a normal response
|
|
206
|
-
}
|
|
207
|
-
// Throw error if there are actual problems (ERROR type)
|
|
208
187
|
if (checkResult.has_errors) {
|
|
209
188
|
const errorMessages = checkResult.errors.length > 0
|
|
210
189
|
? checkResult.errors
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/core/dataElement/check.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,YAAY,IAAI,aAAa,EAC7B,eAAe,EAChB,MAAM,0BAA0B,CAAC;AASlC;;;;;;;;;;;;GAYG;AACH,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,eAAe,EAC3B,eAAe,EAAE,MAAM,EACvB,OAAO,GAAE,MAAiB,EAC1B,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/core/dataElement/check.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,YAAY,IAAI,aAAa,EAC7B,eAAe,EAChB,MAAM,0BAA0B,CAAC;AASlC;;;;;;;;;;;;GAYG;AACH,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,eAAe,EAC3B,eAAe,EAAE,MAAM,EACvB,OAAO,GAAE,MAAiB,EAC1B,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,aAAa,CAAC,CAyExB"}
|
|
@@ -58,21 +58,18 @@ async function checkDataElement(connection, dataElementName, version = 'active',
|
|
|
58
58
|
}
|
|
59
59
|
const checkResult = (0, checkRun_1.parseCheckRunResponse)(response);
|
|
60
60
|
// Check only for type E messages - HTTP 200 is normal, errors are in XML response
|
|
61
|
-
if (checkResult.
|
|
61
|
+
if (checkResult.has_errors) {
|
|
62
62
|
const errorTexts = checkResult.errors
|
|
63
63
|
.map((err) => err.text || '')
|
|
64
64
|
.join(' ')
|
|
65
65
|
.toLowerCase();
|
|
66
66
|
// Ignore messages that should not cause failure
|
|
67
|
-
const shouldIgnore = errorTexts.includes('
|
|
68
|
-
errorTexts.includes('was checked') ||
|
|
69
|
-
(errorTexts.includes('importing') && errorTexts.includes('database')) ||
|
|
67
|
+
const shouldIgnore = (errorTexts.includes('importing') && errorTexts.includes('database')) ||
|
|
70
68
|
// For newly created empty data elements, these errors are expected until object is fully initialized
|
|
71
69
|
(errorTexts.includes('no domain') &&
|
|
72
70
|
errorTexts.includes('data type was defined')) ||
|
|
73
71
|
errorTexts.includes('datatype is expected');
|
|
74
72
|
if (!shouldIgnore) {
|
|
75
|
-
// Has type E errors that should not be ignored - throw error
|
|
76
73
|
const errorMessages = checkResult.errors
|
|
77
74
|
.map((err) => err.text)
|
|
78
75
|
.join('; ');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/core/domain/check.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,YAAY,IAAI,aAAa,EAC7B,eAAe,EACf,OAAO,EACR,MAAM,0BAA0B,CAAC;AASlC;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,eAAe,EAC3B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,QAAQ,GAAG,UAAU,EAC9B,UAAU,CAAC,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,OAAO,GACf,OAAO,CAAC,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/core/domain/check.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,YAAY,IAAI,aAAa,EAC7B,eAAe,EACf,OAAO,EACR,MAAM,0BAA0B,CAAC;AASlC;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,eAAe,EAC3B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,QAAQ,GAAG,UAAU,EAC9B,UAAU,CAAC,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,OAAO,GACf,OAAO,CAAC,aAAa,CAAC,CAuDxB"}
|
|
@@ -55,20 +55,9 @@ async function checkDomainSyntax(connection, domainName, version, xmlContent, lo
|
|
|
55
55
|
response = await (0, checkRun_1.runCheckRun)(connection, 'domain', domainName, version, 'abapCheckRun', undefined);
|
|
56
56
|
}
|
|
57
57
|
const checkResult = (0, checkRun_1.parseCheckRunResponse)(response);
|
|
58
|
-
if (
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
// Check both message and errors array for "has been checked" message
|
|
62
|
-
const hasCheckedMessage = errorMessage.toLowerCase().includes('has been checked') ||
|
|
63
|
-
checkResult.errors.some((err) => (err.text || '').toLowerCase().includes('has been checked'));
|
|
64
|
-
if (hasCheckedMessage) {
|
|
65
|
-
// This is expected behavior - domain was already checked, return response anyway
|
|
66
|
-
if (process.env.DEBUG_ADT_LIBS === 'true') {
|
|
67
|
-
logger?.warn?.(`Check warning for domain ${domainName}: ${errorMessage} (domain was already checked)`);
|
|
68
|
-
}
|
|
69
|
-
return response; // Return response anyway
|
|
70
|
-
}
|
|
71
|
-
throw new Error(`Domain check failed: ${checkResult.message}`);
|
|
58
|
+
if (checkResult.has_errors) {
|
|
59
|
+
const errorMessages = checkResult.errors.map((err) => err.text).join('; ');
|
|
60
|
+
throw new Error(`Domain check failed: ${errorMessages}`);
|
|
72
61
|
}
|
|
73
62
|
return response;
|
|
74
63
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/core/functionGroup/check.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,YAAY,IAAI,aAAa,EAC7B,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAElC;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,eAAe,EAC3B,iBAAiB,EAAE,MAAM,EACzB,OAAO,EAAE,QAAQ,GAAG,UAAU,EAC9B,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/core/functionGroup/check.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,YAAY,IAAI,aAAa,EAC7B,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAElC;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,eAAe,EAC3B,iBAAiB,EAAE,MAAM,EACzB,OAAO,EAAE,QAAQ,GAAG,UAAU,EAC9B,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,aAAa,CAAC,CA2DxB"}
|
|
@@ -66,7 +66,7 @@ async function checkFunctionGroup(connection, functionGroupName, version, source
|
|
|
66
66
|
}
|
|
67
67
|
const checkResult = parseCheckRunResponse(response);
|
|
68
68
|
// Check only for type E messages - HTTP 200 is normal, errors are in XML response
|
|
69
|
-
if (checkResult.
|
|
69
|
+
if (checkResult.has_errors) {
|
|
70
70
|
const errorTexts = checkResult.errors
|
|
71
71
|
.map((err) => err.text || '')
|
|
72
72
|
.join(' ')
|
|
@@ -74,18 +74,14 @@ async function checkFunctionGroup(connection, functionGroupName, version, source
|
|
|
74
74
|
// WORKAROUND: Ignore Kerberos library not loaded error (test cloud issue)
|
|
75
75
|
// This is a known issue in test environments where Kerberos library is not available
|
|
76
76
|
const isKerberosError = errorTexts.includes('kerberos library not loaded');
|
|
77
|
-
// Ignore "has been checked" messages (normal, not an error)
|
|
78
|
-
const isAlreadyChecked = errorTexts.includes('has been checked') ||
|
|
79
|
-
errorTexts.includes('was checked');
|
|
80
77
|
// For newly created empty function groups (no function modules), these errors are expected
|
|
81
78
|
// until function modules are added to the function group
|
|
82
79
|
const isEmptyFunctionGroupError = (errorTexts.includes('report') &&
|
|
83
80
|
errorTexts.includes('program statement is missing')) ||
|
|
84
81
|
errorTexts.includes('program type is include') ||
|
|
85
82
|
errorTexts.includes('report/program statement is missing');
|
|
86
|
-
const shouldIgnore = isKerberosError ||
|
|
83
|
+
const shouldIgnore = isKerberosError || isEmptyFunctionGroupError;
|
|
87
84
|
if (!shouldIgnore) {
|
|
88
|
-
// Has type E errors that should not be ignored - throw error
|
|
89
85
|
const errorMessages = checkResult.errors
|
|
90
86
|
.map((err) => err.text)
|
|
91
87
|
.join('; ');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/core/functionModule/check.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,YAAY,IAAI,aAAa,EAC7B,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAQlC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAqC/D;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,eAAe,EAC3B,iBAAiB,EAAE,MAAM,EACzB,kBAAkB,EAAE,MAAM,EAC1B,OAAO,EAAE,QAAQ,GAAG,UAAU,EAC9B,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,gBAAgB,GAC9B,OAAO,CAAC,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/core/functionModule/check.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,YAAY,IAAI,aAAa,EAC7B,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAQlC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAqC/D;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,eAAe,EAC3B,iBAAiB,EAAE,MAAM,EACzB,kBAAkB,EAAE,MAAM,EAC1B,OAAO,EAAE,QAAQ,GAAG,UAAU,EAC9B,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,gBAAgB,GAC9B,OAAO,CAAC,aAAa,CAAC,CA2CxB"}
|
|
@@ -65,19 +65,9 @@ async function checkFunctionModule(connection, functionGroupName, functionModule
|
|
|
65
65
|
headers,
|
|
66
66
|
});
|
|
67
67
|
const checkResult = (0, checkRun_1.parseCheckRunResponse)(response);
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
// Only throw error if there are actual ERROR or WARNING messages
|
|
72
|
-
// If message indicates object was already checked, it's OK (even if has errors/warnings)
|
|
73
|
-
const isAlreadyChecked = checkResult.message?.toLowerCase().includes('has been checked') ||
|
|
74
|
-
checkResult.message?.toLowerCase().includes('was checked');
|
|
75
|
-
if (isAlreadyChecked) {
|
|
76
|
-
return response; // Object was already checked - this is OK
|
|
77
|
-
}
|
|
78
|
-
// Problems: ERROR (errors) and WARNING (warnings)
|
|
79
|
-
if (checkResult.errors.length > 0) {
|
|
80
|
-
throw new Error(`Function module check failed: ${checkResult.message || 'Unknown error'}`);
|
|
68
|
+
if (checkResult.has_errors) {
|
|
69
|
+
const errorMessages = checkResult.errors.map((err) => err.text).join('; ');
|
|
70
|
+
throw new Error(`Function module check failed: ${errorMessages}`);
|
|
81
71
|
}
|
|
82
72
|
if (checkResult.warnings.length > 0) {
|
|
83
73
|
throw new Error(`Function module check failed: ${checkResult.message || 'Warnings found'}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/core/functionModule/validation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,YAAY,IAAI,aAAa,EAC7B,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAGlC;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,0BAA0B,CAC9C,UAAU,EAAE,eAAe,EAC3B,iBAAiB,EAAE,MAAM,EACzB,kBAAkB,EAAE,MAAM,EAC1B,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,aAAa,CAAC,CAqBxB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,4BAA4B,CAChD,UAAU,EAAE,eAAe,EAC3B,iBAAiB,EAAE,MAAM,EACzB,kBAAkB,EAAE,MAAM,EAC1B,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,GAAE,UAAU,GAAG,QAAmB,GACxC,OAAO,CAAC,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/core/functionModule/validation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,YAAY,IAAI,aAAa,EAC7B,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAGlC;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,0BAA0B,CAC9C,UAAU,EAAE,eAAe,EAC3B,iBAAiB,EAAE,MAAM,EACzB,kBAAkB,EAAE,MAAM,EAC1B,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,aAAa,CAAC,CAqBxB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,4BAA4B,CAChD,UAAU,EAAE,eAAe,EAC3B,iBAAiB,EAAE,MAAM,EACzB,kBAAkB,EAAE,MAAM,EAC1B,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,GAAE,UAAU,GAAG,QAAmB,GACxC,OAAO,CAAC,aAAa,CAAC,CAoDxB"}
|
|
@@ -105,19 +105,9 @@ async function validateFunctionModuleSource(connection, functionGroupName, funct
|
|
|
105
105
|
response = await runCheckRun(connection, objectType, objectName, version, 'abapCheckRun');
|
|
106
106
|
}
|
|
107
107
|
const checkResult = parseCheckRunResponse(response);
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
// Only throw error if there are actual ERROR or WARNING messages
|
|
112
|
-
// If message indicates object was already checked, it's OK (even if has errors/warnings)
|
|
113
|
-
const isAlreadyChecked = checkResult.message?.toLowerCase().includes('has been checked') ||
|
|
114
|
-
checkResult.message?.toLowerCase().includes('was checked');
|
|
115
|
-
if (isAlreadyChecked) {
|
|
116
|
-
return response; // Object was already checked - this is OK
|
|
117
|
-
}
|
|
118
|
-
// Problems: ERROR (errors) and WARNING (warnings)
|
|
119
|
-
if (checkResult.errors.length > 0) {
|
|
120
|
-
throw new Error(`Source validation failed: ${checkResult.message || 'Unknown error'}`);
|
|
108
|
+
if (checkResult.has_errors) {
|
|
109
|
+
const errorMessages = checkResult.errors.map((err) => err.text).join('; ');
|
|
110
|
+
throw new Error(`Source validation failed: ${errorMessages}`);
|
|
121
111
|
}
|
|
122
112
|
if (checkResult.warnings.length > 0) {
|
|
123
113
|
throw new Error(`Source validation failed: ${checkResult.message || 'Warnings found'}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/core/interface/check.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,YAAY,IAAI,aAAa,EAC7B,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAGlC;;GAEG;AACH,wBAAsB,cAAc,CAClC,UAAU,EAAE,eAAe,EAC3B,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,MAAiB,EAC1B,UAAU,CAAC,EAAE,MAAM,EACnB,mBAAmB,CAAC,EAAE,MAAM,GAC3B,OAAO,CAAC,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/core/interface/check.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,YAAY,IAAI,aAAa,EAC7B,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAGlC;;GAEG;AACH,wBAAsB,cAAc,CAClC,UAAU,EAAE,eAAe,EAC3B,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,MAAiB,EAC1B,UAAU,CAAC,EAAE,MAAM,EACnB,mBAAmB,CAAC,EAAE,MAAM,GAC3B,OAAO,CAAC,aAAa,CAAC,CAkBxB"}
|
|
@@ -11,17 +11,9 @@ const checkRun_1 = require("../../utils/checkRun");
|
|
|
11
11
|
async function checkInterface(connection, interfaceName, version = 'active', sourceCode, artifactContentType) {
|
|
12
12
|
const response = await (0, checkRun_1.runCheckRun)(connection, 'interface', interfaceName, version, 'abapCheckRun', sourceCode, artifactContentType);
|
|
13
13
|
const checkResult = (0, checkRun_1.parseCheckRunResponse)(response);
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
checkResult.message?.toLowerCase().includes('was checked') ||
|
|
18
|
-
checkResult.errors.some((err) => (err.text || '').toLowerCase().includes('has been checked'));
|
|
19
|
-
if (hasCheckedMessage) {
|
|
20
|
-
return response; // "has been checked" is a normal response, not an error
|
|
21
|
-
}
|
|
22
|
-
// Only throw error if there are actual problems (ERROR or WARNING)
|
|
23
|
-
if (!checkResult.success && checkResult.has_errors) {
|
|
24
|
-
throw new Error(`Interface check failed: ${checkResult.message}`);
|
|
14
|
+
if (checkResult.has_errors) {
|
|
15
|
+
const errorMessages = checkResult.errors.map((err) => err.text).join('; ');
|
|
16
|
+
throw new Error(`Interface check failed: ${errorMessages}`);
|
|
25
17
|
}
|
|
26
18
|
return response;
|
|
27
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/core/program/check.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,YAAY,IAAI,aAAa,EAC7B,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAGlC;;GAEG;AACH,wBAAsB,YAAY,CAChC,UAAU,EAAE,eAAe,EAC3B,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,MAAiB,EAC1B,UAAU,CAAC,EAAE,MAAM,EACnB,mBAAmB,CAAC,EAAE,MAAM,GAC3B,OAAO,CAAC,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/core/program/check.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,YAAY,IAAI,aAAa,EAC7B,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAGlC;;GAEG;AACH,wBAAsB,YAAY,CAChC,UAAU,EAAE,eAAe,EAC3B,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,MAAiB,EAC1B,UAAU,CAAC,EAAE,MAAM,EACnB,mBAAmB,CAAC,EAAE,MAAM,GAC3B,OAAO,CAAC,aAAa,CAAC,CAkBxB"}
|
|
@@ -11,17 +11,9 @@ const checkRun_1 = require("../../utils/checkRun");
|
|
|
11
11
|
async function checkProgram(connection, programName, version = 'active', sourceCode, artifactContentType) {
|
|
12
12
|
const response = await (0, checkRun_1.runCheckRun)(connection, 'program', programName, version, 'abapCheckRun', sourceCode, artifactContentType);
|
|
13
13
|
const checkResult = (0, checkRun_1.parseCheckRunResponse)(response);
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
checkResult.message?.toLowerCase().includes('was checked') ||
|
|
18
|
-
checkResult.errors.some((err) => (err.text || '').toLowerCase().includes('has been checked'));
|
|
19
|
-
if (hasCheckedMessage) {
|
|
20
|
-
return response; // "has been checked" is a normal response, not an error
|
|
21
|
-
}
|
|
22
|
-
// Only throw error if there are actual problems (ERROR or WARNING)
|
|
23
|
-
if (!checkResult.success && checkResult.has_errors) {
|
|
24
|
-
throw new Error(`Program check failed: ${checkResult.message}`);
|
|
14
|
+
if (checkResult.has_errors) {
|
|
15
|
+
const errorMessages = checkResult.errors.map((err) => err.text).join('; ');
|
|
16
|
+
throw new Error(`Program check failed: ${errorMessages}`);
|
|
25
17
|
}
|
|
26
18
|
return response;
|
|
27
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/core/serviceDefinition/check.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,YAAY,IAAI,aAAa,EAC7B,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAGlC;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,eAAe,EAC3B,qBAAqB,EAAE,MAAM,EAC7B,OAAO,GAAE,MAAmB,EAC5B,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/core/serviceDefinition/check.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,YAAY,IAAI,aAAa,EAC7B,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAGlC;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,eAAe,EAC3B,qBAAqB,EAAE,MAAM,EAC7B,OAAO,GAAE,MAAmB,EAC5B,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,aAAa,CAAC,CAiBxB"}
|
|
@@ -11,17 +11,9 @@ const checkRun_1 = require("../../utils/checkRun");
|
|
|
11
11
|
async function checkServiceDefinition(connection, serviceDefinitionName, version = 'inactive', sourceCode) {
|
|
12
12
|
const response = await (0, checkRun_1.runCheckRun)(connection, 'service_definition', serviceDefinitionName, version, 'abapCheckRun', sourceCode);
|
|
13
13
|
const checkResult = (0, checkRun_1.parseCheckRunResponse)(response);
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
checkResult.message?.toLowerCase().includes('was checked') ||
|
|
18
|
-
checkResult.errors.some((err) => (err.text || '').toLowerCase().includes('has been checked'));
|
|
19
|
-
if (hasCheckedMessage) {
|
|
20
|
-
return response; // "has been checked" is a normal response, not an error
|
|
21
|
-
}
|
|
22
|
-
// Only throw error if there are actual problems (ERROR or WARNING)
|
|
23
|
-
if (!checkResult.success && checkResult.has_errors) {
|
|
24
|
-
throw new Error(`Service definition check failed: ${checkResult.message}`);
|
|
14
|
+
if (checkResult.has_errors) {
|
|
15
|
+
const errorMessages = checkResult.errors.map((err) => err.text).join('; ');
|
|
16
|
+
throw new Error(`Service definition check failed: ${errorMessages}`);
|
|
25
17
|
}
|
|
26
18
|
return response;
|
|
27
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/core/structure/check.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,YAAY,IAAI,aAAa,EAC7B,eAAe,EACf,OAAO,EACR,MAAM,0BAA0B,CAAC;AAGlC;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,UAAU,EAAE,eAAe,EAC3B,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,MAAiB,EAC1B,UAAU,CAAC,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,OAAO,GACf,OAAO,CAAC,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/core/structure/check.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,YAAY,IAAI,aAAa,EAC7B,eAAe,EACf,OAAO,EACR,MAAM,0BAA0B,CAAC;AAGlC;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,UAAU,EAAE,eAAe,EAC3B,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,MAAiB,EAC1B,UAAU,CAAC,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,OAAO,GACf,OAAO,CAAC,aAAa,CAAC,CAqCxB"}
|
|
@@ -14,19 +14,9 @@ async function checkStructure(connection, structureName, version = 'active', sou
|
|
|
14
14
|
const response = await (0, checkRun_1.runCheckRun)(connection, 'structure', structureName, version, 'abapCheckRun', sourceCode);
|
|
15
15
|
const checkResult = (0, checkRun_1.parseCheckRunResponse)(response);
|
|
16
16
|
if (!checkResult.success && checkResult.has_errors) {
|
|
17
|
-
// For DDIC objects, "inactive version does not exist"
|
|
17
|
+
// For DDIC objects, "inactive version does not exist" or "importing from database" errors
|
|
18
18
|
// are often non-critical and can be safely ignored, especially for inactive versions
|
|
19
19
|
const errorMessage = checkResult.message || '';
|
|
20
|
-
// Check both message and errors array for "has been checked" message
|
|
21
|
-
const hasCheckedMessage = errorMessage.toLowerCase().includes('has been checked') ||
|
|
22
|
-
checkResult.errors.some((err) => (err.text || '').toLowerCase().includes('has been checked'));
|
|
23
|
-
if (hasCheckedMessage) {
|
|
24
|
-
// This is expected behavior - structure was already checked, return response anyway
|
|
25
|
-
if (process.env.DEBUG_ADT_LIBS === 'true') {
|
|
26
|
-
logger?.warn?.(`Check warning for structure ${structureName}: ${errorMessage} (structure was already checked)`);
|
|
27
|
-
}
|
|
28
|
-
return response; // Return response anyway
|
|
29
|
-
}
|
|
30
20
|
if ((errorMessage.toLowerCase().includes('inactive version') &&
|
|
31
21
|
errorMessage.toLowerCase().includes('does not exist')) ||
|
|
32
22
|
(errorMessage.toLowerCase().includes('importing') &&
|
|
@@ -38,7 +28,8 @@ async function checkStructure(connection, structureName, version = 'active', sou
|
|
|
38
28
|
}
|
|
39
29
|
return response; // Return response anyway
|
|
40
30
|
}
|
|
41
|
-
|
|
31
|
+
const errorMessages = checkResult.errors.map((err) => err.text).join('; ');
|
|
32
|
+
throw new Error(`Structure check failed: ${errorMessages}`);
|
|
42
33
|
}
|
|
43
34
|
return response;
|
|
44
35
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/core/view/check.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,YAAY,IAAI,aAAa,EAC7B,eAAe,EACf,OAAO,EACR,MAAM,0BAA0B,CAAC;AAuBlC,wBAAsB,SAAS,CAC7B,UAAU,EAAE,eAAe,EAC3B,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,MAAiB,EAC1B,UAAU,CAAC,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,OAAO,GACf,OAAO,CAAC,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/core/view/check.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,YAAY,IAAI,aAAa,EAC7B,eAAe,EACf,OAAO,EACR,MAAM,0BAA0B,CAAC;AAuBlC,wBAAsB,SAAS,CAC7B,UAAU,EAAE,eAAe,EAC3B,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,MAAiB,EAC1B,UAAU,CAAC,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,OAAO,GACf,OAAO,CAAC,aAAa,CAAC,CAkDxB"}
|
package/dist/core/view/check.js
CHANGED
|
@@ -27,14 +27,6 @@ async function checkView(connection, viewName, version = 'active', sourceCode, l
|
|
|
27
27
|
const checkResult = (0, checkRun_1.parseCheckRunResponse)(response);
|
|
28
28
|
if (!checkResult.success && checkResult.has_errors) {
|
|
29
29
|
const errorMessage = checkResult.message || '';
|
|
30
|
-
const hasCheckedMessage = errorMessage.toLowerCase().includes('has been checked') ||
|
|
31
|
-
checkResult.errors.some((err) => (err.text || '').toLowerCase().includes('has been checked'));
|
|
32
|
-
if (hasCheckedMessage) {
|
|
33
|
-
if (process.env.DEBUG_ADT_LIBS === 'true') {
|
|
34
|
-
logger?.warn?.(`Check warning for view ${viewName}: ${errorMessage} (view was already checked)`);
|
|
35
|
-
}
|
|
36
|
-
return response;
|
|
37
|
-
}
|
|
38
30
|
if (attempt === 0 && shouldRetryMissingVersion(checkResult)) {
|
|
39
31
|
if (process.env.DEBUG_ADT_LIBS === 'true') {
|
|
40
32
|
logger?.warn?.(`Check retry for view ${viewName}: ${errorMessage} (waiting for inactive version)`);
|
|
@@ -49,7 +41,10 @@ async function checkView(connection, viewName, version = 'active', sourceCode, l
|
|
|
49
41
|
}
|
|
50
42
|
return response;
|
|
51
43
|
}
|
|
52
|
-
|
|
44
|
+
const errorMessages = checkResult.errors
|
|
45
|
+
.map((err) => err.text)
|
|
46
|
+
.join('; ');
|
|
47
|
+
throw new Error(`View check failed: ${errorMessages}`);
|
|
53
48
|
}
|
|
54
49
|
return response;
|
|
55
50
|
}
|
package/dist/utils/checkRun.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkRun.d.ts","sourceRoot":"","sources":["../../src/utils/checkRun.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,YAAY,IAAI,aAAa,EAC7B,eAAe,EAChB,MAAM,0BAA0B,CAAC;AASlC,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"checkRun.d.ts","sourceRoot":"","sources":["../../src/utils/checkRun.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,YAAY,IAAI,aAAa,EAC7B,eAAe,EAChB,MAAM,0BAA0B,CAAC;AASlC,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAuD3E;AAED;;GAEG;AACH;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,MAAiB,GACzB,MAAM,CAKR;AAED;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,MAAiB,EAC1B,mBAAmB,GAAE,MAAoC,GACxD,MAAM,CAcR;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,aAAa,GAAG;IAC9D,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;CACvB,CA0JA;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,UAAU,EAAE,eAAe,EAC3B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,MAAiB,EAC1B,QAAQ,GAAE,MAAuB,EACjC,UAAU,CAAC,EAAE,MAAM,EACnB,mBAAmB,GAAE,MAAoC,GACxD,OAAO,CAAC,aAAa,CAAC,CAyBxB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,qBAAqB,CACzC,UAAU,EAAE,eAAe,EAC3B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,MAAiB,EAC1B,QAAQ,GAAE,MAAuB,EACjC,mBAAmB,GAAE,MAAoC,GACxD,OAAO,CAAC,aAAa,CAAC,CAuBxB"}
|
package/dist/utils/checkRun.js
CHANGED
|
@@ -175,11 +175,23 @@ function parseCheckRunResponse(response) {
|
|
|
175
175
|
'');
|
|
176
176
|
const line = String(msg['@_line'] || msg.line || '');
|
|
177
177
|
const href = String(msg['@_chkrun:uri'] || msg['@_href'] || msg.href || '');
|
|
178
|
+
const code = String(msg['@_chkrun:code'] || msg['@_code'] || msg.code || '');
|
|
179
|
+
// Extract T100 message key (language-independent error identifier)
|
|
180
|
+
const t100Key = msg['chkrun:t100Key'];
|
|
181
|
+
const msgId = t100Key
|
|
182
|
+
? String(t100Key['@_chkrun:msgid'] || t100Key['@_msgid'] || '')
|
|
183
|
+
: '';
|
|
184
|
+
const msgNo = t100Key
|
|
185
|
+
? String(t100Key['@_chkrun:msgno'] || t100Key['@_msgno'] || '')
|
|
186
|
+
: '';
|
|
178
187
|
const msgObj = {
|
|
179
188
|
type: msgType,
|
|
180
189
|
text: shortText,
|
|
181
190
|
line,
|
|
182
191
|
href,
|
|
192
|
+
...(code && { code }),
|
|
193
|
+
...(msgId && { msgId }),
|
|
194
|
+
...(msgNo && { msgNo }),
|
|
183
195
|
};
|
|
184
196
|
if (msgType === 'E') {
|
|
185
197
|
errors.push(msgObj);
|
|
@@ -191,14 +203,23 @@ function parseCheckRunResponse(response) {
|
|
|
191
203
|
info.push(msgObj);
|
|
192
204
|
}
|
|
193
205
|
});
|
|
206
|
+
// When status='processed', SAP sometimes echoes the statusText as a type="E" message.
|
|
207
|
+
// This is not a real error — it's just the check completion notification (e.g.,
|
|
208
|
+
// "Objekt Z_TEST wurde geprüft" / "Object Z_TEST has been checked").
|
|
209
|
+
// Filter these out by comparing E-type message text with statusText (language-independent).
|
|
210
|
+
let realErrors = errors;
|
|
211
|
+
if (status === 'processed' && statusText && errors.length > 0) {
|
|
212
|
+
const statusLower = statusText.toLowerCase().trim();
|
|
213
|
+
realErrors = errors.filter((err) => err.text.toLowerCase().trim() !== statusLower);
|
|
214
|
+
}
|
|
194
215
|
// If status is 'notProcessed', it's an error (object doesn't exist or can't be validated)
|
|
195
|
-
const hasErrors =
|
|
196
|
-
const isSuccess = status === 'processed' &&
|
|
216
|
+
const hasErrors = realErrors.length > 0 || status === 'notProcessed';
|
|
217
|
+
const isSuccess = status === 'processed' && realErrors.length === 0;
|
|
197
218
|
return {
|
|
198
219
|
success: isSuccess,
|
|
199
220
|
status: status || 'no_report',
|
|
200
221
|
message: statusText,
|
|
201
|
-
errors,
|
|
222
|
+
errors: realErrors,
|
|
202
223
|
warnings,
|
|
203
224
|
info,
|
|
204
225
|
total_messages: messageArray.length,
|