@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.
@@ -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,CA6BxB"}
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
- // "has been checked" or "was checked" messages are normal responses, not errors
12
- const hasCheckedMessage = checkResult.message?.toLowerCase().includes('has been checked') ||
13
- checkResult.message?.toLowerCase().includes('was checked') ||
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,CAmDxB;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"}
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"}
@@ -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
- // Check only for type E messages - HTTP 200 is normal, errors are in XML response
74
- // Ignore "has been checked" messages (normal response, not an error)
75
- if (checkResult.errors.length > 0) {
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,CA4ExB"}
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.errors.length > 0) {
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('has been checked') ||
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,CAwExB"}
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 (!checkResult.success && checkResult.has_errors) {
59
- // "has been checked" is a non-critical warning - domain was already checked
60
- const errorMessage = checkResult.message || '';
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,CAkExB"}
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.errors.length > 0) {
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 || isAlreadyChecked || isEmptyFunctionGroupError;
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,CA2DxB"}
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
- // Check result is OK if:
69
- // 1. Message says "has been checked" or "was checked" - object was already checked, this is OK
70
- // Problems are: ERROR and WARNING
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,CAoExB"}
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
- // Check result is OK if:
109
- // 1. Message says "has been checked" or "was checked" - object was already checked, this is OK
110
- // Problems are: ERROR and WARNING
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,CA+BxB"}
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
- // "has been checked" or "was checked" messages are normal responses, not errors
15
- // Check both message and errors array for these messages
16
- const hasCheckedMessage = checkResult.message?.toLowerCase().includes('has been checked') ||
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,CA+BxB"}
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
- // "has been checked" or "was checked" messages are normal responses, not errors
15
- // Check both message and errors array for these messages
16
- const hasCheckedMessage = checkResult.message?.toLowerCase().includes('has been checked') ||
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,CA8BxB"}
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
- // "has been checked" or "was checked" messages are normal responses, not errors
15
- // Check both message and errors array for these messages
16
- const hasCheckedMessage = checkResult.message?.toLowerCase().includes('has been checked') ||
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,CAmDxB"}
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", "importing from database", or "has been checked" errors
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
- throw new Error(`Structure check failed: ${checkResult.message}`);
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,CA6DxB"}
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"}
@@ -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
- throw new Error(`View check failed: ${checkResult.message}`);
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
  }
@@ -7,6 +7,9 @@ interface CheckMessage {
7
7
  text: string;
8
8
  line: string;
9
9
  href: string;
10
+ code?: string;
11
+ msgId?: string;
12
+ msgNo?: string;
10
13
  }
11
14
  /**
12
15
  * Get ADT URI for object type
@@ -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;CACd;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,CA6HA;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"}
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"}
@@ -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 = errors.length > 0 || status === 'notProcessed';
196
- const isSuccess = status === 'processed' && errors.length === 0;
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,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mcp-abap-adt/adt-clients",
3
- "version": "3.8.6",
3
+ "version": "3.8.7",
4
4
  "description": "ADT clients for SAP ABAP systems - AdtClient and AdtRuntimeClient",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",