arc-1 1.3.0 → 1.5.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.
- package/README.md +1 -1
- package/dist/adt/abapgit.d.ts.map +1 -1
- package/dist/adt/abapgit.js +64 -7
- package/dist/adt/abapgit.js.map +1 -1
- package/dist/adt/aunit.js +4 -4
- package/dist/adt/aunit.js.map +1 -1
- package/dist/adt/class-structure.d.ts +4 -2
- package/dist/adt/class-structure.d.ts.map +1 -1
- package/dist/adt/class-structure.js +18 -9
- package/dist/adt/class-structure.js.map +1 -1
- package/dist/adt/client.d.ts +18 -52
- package/dist/adt/client.d.ts.map +1 -1
- package/dist/adt/client.js +69 -92
- package/dist/adt/client.js.map +1 -1
- package/dist/adt/config.d.ts +5 -0
- package/dist/adt/config.d.ts.map +1 -1
- package/dist/adt/config.js.map +1 -1
- package/dist/adt/create-request.d.ts +4 -0
- package/dist/adt/create-request.d.ts.map +1 -0
- package/dist/adt/create-request.js +16 -0
- package/dist/adt/create-request.js.map +1 -0
- package/dist/adt/crud.d.ts +3 -3
- package/dist/adt/crud.d.ts.map +1 -1
- package/dist/adt/crud.js +28 -9
- package/dist/adt/crud.js.map +1 -1
- package/dist/adt/data-source-policy.d.ts +20 -8
- package/dist/adt/data-source-policy.d.ts.map +1 -1
- package/dist/adt/data-source-policy.js +55 -109
- package/dist/adt/data-source-policy.js.map +1 -1
- package/dist/adt/ddic-xml.d.ts +9 -0
- package/dist/adt/ddic-xml.d.ts.map +1 -1
- package/dist/adt/ddic-xml.js +17 -3
- package/dist/adt/ddic-xml.js.map +1 -1
- package/dist/adt/devtools.d.ts.map +1 -1
- package/dist/adt/devtools.js +10 -7
- package/dist/adt/devtools.js.map +1 -1
- package/dist/adt/diagnostics.d.ts +11 -9
- package/dist/adt/diagnostics.d.ts.map +1 -1
- package/dist/adt/diagnostics.js +88 -14
- package/dist/adt/diagnostics.js.map +1 -1
- package/dist/adt/enhancements.d.ts +7 -0
- package/dist/adt/enhancements.d.ts.map +1 -0
- package/dist/adt/enhancements.js +89 -0
- package/dist/adt/enhancements.js.map +1 -0
- package/dist/adt/errors.d.ts +21 -10
- package/dist/adt/errors.d.ts.map +1 -1
- package/dist/adt/errors.js +76 -54
- package/dist/adt/errors.js.map +1 -1
- package/dist/adt/features.d.ts.map +1 -1
- package/dist/adt/features.js +2 -0
- package/dist/adt/features.js.map +1 -1
- package/dist/adt/flp.d.ts.map +1 -1
- package/dist/adt/flp.js +5 -4
- package/dist/adt/flp.js.map +1 -1
- package/dist/adt/fm-signature.d.ts +1 -1
- package/dist/adt/fm-signature.d.ts.map +1 -1
- package/dist/adt/fm-signature.js +9 -1
- package/dist/adt/fm-signature.js.map +1 -1
- package/dist/adt/http-deadline.d.ts +2 -0
- package/dist/adt/http-deadline.d.ts.map +1 -1
- package/dist/adt/http-deadline.js.map +1 -1
- package/dist/adt/http.d.ts +12 -29
- package/dist/adt/http.d.ts.map +1 -1
- package/dist/adt/http.js +102 -95
- package/dist/adt/http.js.map +1 -1
- package/dist/adt/internal-data-operations.d.ts +3 -2
- package/dist/adt/internal-data-operations.d.ts.map +1 -1
- package/dist/adt/internal-data-operations.js +8 -1
- package/dist/adt/internal-data-operations.js.map +1 -1
- package/dist/adt/lock-object.d.ts +92 -0
- package/dist/adt/lock-object.d.ts.map +1 -0
- package/dist/adt/lock-object.js +195 -0
- package/dist/adt/lock-object.js.map +1 -0
- package/dist/adt/publish-state.d.ts +4 -0
- package/dist/adt/publish-state.d.ts.map +1 -0
- package/dist/adt/publish-state.js +61 -0
- package/dist/adt/publish-state.js.map +1 -0
- package/dist/adt/rap-generate.d.ts +5 -1
- package/dist/adt/rap-generate.d.ts.map +1 -1
- package/dist/adt/rap-generate.js +112 -100
- package/dist/adt/rap-generate.js.map +1 -1
- package/dist/adt/server-driven.d.ts +56 -13
- package/dist/adt/server-driven.d.ts.map +1 -1
- package/dist/adt/server-driven.js +114 -23
- package/dist/adt/server-driven.js.map +1 -1
- package/dist/adt/source-precondition.d.ts +3 -0
- package/dist/adt/source-precondition.d.ts.map +1 -0
- package/dist/adt/source-precondition.js +12 -0
- package/dist/adt/source-precondition.js.map +1 -0
- package/dist/adt/text-search.js +5 -5
- package/dist/adt/text-search.js.map +1 -1
- package/dist/adt/transport.d.ts +1 -2
- package/dist/adt/transport.d.ts.map +1 -1
- package/dist/adt/transport.js +20 -15
- package/dist/adt/transport.js.map +1 -1
- package/dist/adt/types.d.ts +21 -1
- package/dist/adt/types.d.ts.map +1 -1
- package/dist/adt/user-agent.d.ts +4 -0
- package/dist/adt/user-agent.d.ts.map +1 -0
- package/dist/adt/user-agent.js +11 -0
- package/dist/adt/user-agent.js.map +1 -0
- package/dist/adt/xml-entities.d.ts +3 -0
- package/dist/adt/xml-entities.d.ts.map +1 -0
- package/dist/adt/xml-entities.js +19 -0
- package/dist/adt/xml-entities.js.map +1 -0
- package/dist/adt/xml-parser.d.ts +7 -30
- package/dist/adt/xml-parser.d.ts.map +1 -1
- package/dist/adt/xml-parser.js +25 -54
- package/dist/adt/xml-parser.js.map +1 -1
- package/dist/authz/policy.d.ts.map +1 -1
- package/dist/authz/policy.js +2 -0
- package/dist/authz/policy.js.map +1 -1
- package/dist/cache/caching-layer.d.ts.map +1 -1
- package/dist/cache/caching-layer.js +5 -10
- package/dist/cache/caching-layer.js.map +1 -1
- package/dist/cli.js +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/context/grep.d.ts +14 -0
- package/dist/context/grep.d.ts.map +1 -1
- package/dist/context/grep.js +49 -0
- package/dist/context/grep.js.map +1 -1
- package/dist/context/unit-surgery.d.ts +4 -2
- package/dist/context/unit-surgery.d.ts.map +1 -1
- package/dist/context/unit-surgery.js +54 -6
- package/dist/context/unit-surgery.js.map +1 -1
- package/dist/handlers/activate.d.ts.map +1 -1
- package/dist/handlers/activate.js +11 -20
- package/dist/handlers/activate.js.map +1 -1
- package/dist/handlers/diagnose.d.ts.map +1 -1
- package/dist/handlers/diagnose.js +11 -30
- package/dist/handlers/diagnose.js.map +1 -1
- package/dist/handlers/dispatch.d.ts.map +1 -1
- package/dist/handlers/dispatch.js +63 -8
- package/dist/handlers/dispatch.js.map +1 -1
- package/dist/handlers/editable-source.d.ts +6 -0
- package/dist/handlers/editable-source.d.ts.map +1 -0
- package/dist/handlers/editable-source.js +53 -0
- package/dist/handlers/editable-source.js.map +1 -0
- package/dist/handlers/feature-cache.d.ts +2 -0
- package/dist/handlers/feature-cache.d.ts.map +1 -1
- package/dist/handlers/feature-cache.js +8 -0
- package/dist/handlers/feature-cache.js.map +1 -1
- package/dist/handlers/hyperfocused.js +1 -1
- package/dist/handlers/hyperfocused.js.map +1 -1
- package/dist/handlers/lint.d.ts.map +1 -1
- package/dist/handlers/lint.js +13 -4
- package/dist/handlers/lint.js.map +1 -1
- package/dist/handlers/object-types.d.ts +2 -3
- package/dist/handlers/object-types.d.ts.map +1 -1
- package/dist/handlers/object-types.js +13 -5
- package/dist/handlers/object-types.js.map +1 -1
- package/dist/handlers/publish-failure.d.ts +7 -0
- package/dist/handlers/publish-failure.d.ts.map +1 -0
- package/dist/handlers/publish-failure.js +42 -0
- package/dist/handlers/publish-failure.js.map +1 -0
- package/dist/handlers/read.d.ts.map +1 -1
- package/dist/handlers/read.js +39 -9
- package/dist/handlers/read.js.map +1 -1
- package/dist/handlers/schemas.d.ts +45 -0
- package/dist/handlers/schemas.d.ts.map +1 -1
- package/dist/handlers/schemas.js +50 -7
- package/dist/handlers/schemas.js.map +1 -1
- package/dist/handlers/syntax.d.ts +5 -0
- package/dist/handlers/syntax.d.ts.map +1 -0
- package/dist/handlers/syntax.js +35 -0
- package/dist/handlers/syntax.js.map +1 -0
- package/dist/handlers/tool-descriptions.d.ts.map +1 -1
- package/dist/handlers/tool-descriptions.js +7 -5
- package/dist/handlers/tool-descriptions.js.map +1 -1
- package/dist/handlers/tool-registry.d.ts +4 -4
- package/dist/handlers/tool-registry.d.ts.map +1 -1
- package/dist/handlers/tool-registry.js +4 -0
- package/dist/handlers/tool-registry.js.map +1 -1
- package/dist/handlers/tools.d.ts +1 -16
- package/dist/handlers/tools.d.ts.map +1 -1
- package/dist/handlers/tools.js +44 -55
- package/dist/handlers/tools.js.map +1 -1
- package/dist/handlers/transport.d.ts.map +1 -1
- package/dist/handlers/transport.js +17 -3
- package/dist/handlers/transport.js.map +1 -1
- package/dist/handlers/write/class-edit.d.ts +16 -0
- package/dist/handlers/write/class-edit.d.ts.map +1 -0
- package/dist/handlers/write/class-edit.js +55 -0
- package/dist/handlers/write/class-edit.js.map +1 -0
- package/dist/handlers/write/class-surgery.d.ts +2 -2
- package/dist/handlers/write/class-surgery.d.ts.map +1 -1
- package/dist/handlers/write/class-surgery.js +189 -220
- package/dist/handlers/write/class-surgery.js.map +1 -1
- package/dist/handlers/write/context.d.ts +1 -8
- package/dist/handlers/write/context.d.ts.map +1 -1
- package/dist/handlers/write/create.d.ts.map +1 -1
- package/dist/handlers/write/create.js +11 -4
- package/dist/handlers/write/create.js.map +1 -1
- package/dist/handlers/write/metadata-update.d.ts +4 -0
- package/dist/handlers/write/metadata-update.d.ts.map +1 -0
- package/dist/handlers/write/metadata-update.js +58 -0
- package/dist/handlers/write/metadata-update.js.map +1 -0
- package/dist/handlers/write/rap.d.ts.map +1 -1
- package/dist/handlers/write/rap.js +132 -155
- package/dist/handlers/write/rap.js.map +1 -1
- package/dist/handlers/write/unit-surgery.d.ts +2 -2
- package/dist/handlers/write/unit-surgery.d.ts.map +1 -1
- package/dist/handlers/write/unit-surgery.js +58 -34
- package/dist/handlers/write/unit-surgery.js.map +1 -1
- package/dist/handlers/write/update-delete.d.ts.map +1 -1
- package/dist/handlers/write/update-delete.js +34 -82
- package/dist/handlers/write/update-delete.js.map +1 -1
- package/dist/handlers/write-helpers.d.ts +4 -3
- package/dist/handlers/write-helpers.d.ts.map +1 -1
- package/dist/handlers/write-helpers.js +135 -21
- package/dist/handlers/write-helpers.js.map +1 -1
- package/dist/handlers/write.d.ts.map +1 -1
- package/dist/handlers/write.js +13 -31
- package/dist/handlers/write.js.map +1 -1
- package/dist/lint/config-builder.d.ts +10 -1
- package/dist/lint/config-builder.d.ts.map +1 -1
- package/dist/lint/config-builder.js +4 -0
- package/dist/lint/config-builder.js.map +1 -1
- package/dist/lint/lint.d.ts +3 -1
- package/dist/lint/lint.d.ts.map +1 -1
- package/dist/lint/lint.js +2 -1
- package/dist/lint/lint.js.map +1 -1
- package/dist/public/read-only-client.d.ts +6 -0
- package/dist/public/read-only-client.d.ts.map +1 -0
- package/dist/public/read-only-client.js +66 -0
- package/dist/public/read-only-client.js.map +1 -0
- package/dist/public/testing.d.ts +4 -0
- package/dist/public/testing.d.ts.map +1 -1
- package/dist/public/testing.js +6 -0
- package/dist/public/testing.js.map +1 -1
- package/dist/public/types.d.ts +14 -15
- package/dist/public/types.d.ts.map +1 -1
- package/dist/server/audit.d.ts +6 -1
- package/dist/server/audit.d.ts.map +1 -1
- package/dist/server/audit.js.map +1 -1
- package/dist/server/config.d.ts.map +1 -1
- package/dist/server/config.js +9 -2
- package/dist/server/config.js.map +1 -1
- package/dist/server/deny-actions.d.ts +2 -1
- package/dist/server/deny-actions.d.ts.map +1 -1
- package/dist/server/deny-actions.js +13 -2
- package/dist/server/deny-actions.js.map +1 -1
- package/dist/server/http.d.ts.map +1 -1
- package/dist/server/http.js +7 -5
- package/dist/server/http.js.map +1 -1
- package/dist/server/logger.d.ts +3 -3
- package/dist/server/logger.d.ts.map +1 -1
- package/dist/server/logger.js +7 -7
- package/dist/server/logger.js.map +1 -1
- package/dist/server/multi-target-basic-auth.d.ts.map +1 -1
- package/dist/server/multi-target-basic-auth.js +1 -0
- package/dist/server/multi-target-basic-auth.js.map +1 -1
- package/dist/server/multi-target-runtime.d.ts.map +1 -1
- package/dist/server/multi-target-runtime.js +1 -0
- package/dist/server/multi-target-runtime.js.map +1 -1
- package/dist/server/oauth-redirect-policy.d.ts +13 -0
- package/dist/server/oauth-redirect-policy.d.ts.map +1 -0
- package/dist/server/oauth-redirect-policy.js +21 -0
- package/dist/server/oauth-redirect-policy.js.map +1 -0
- package/dist/server/plugin-loader.d.ts.map +1 -1
- package/dist/server/plugin-loader.js +1 -3
- package/dist/server/plugin-loader.js.map +1 -1
- package/dist/server/safe-http-client.d.ts +8 -14
- package/dist/server/safe-http-client.d.ts.map +1 -1
- package/dist/server/safe-http-client.js +51 -73
- package/dist/server/safe-http-client.js.map +1 -1
- package/dist/server/server.d.ts +5 -4
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +36 -27
- package/dist/server/server.js.map +1 -1
- package/dist/server/types.d.ts +6 -4
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/types.js +2 -0
- package/dist/server/types.js.map +1 -1
- package/dist/version.d.ts +3 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +3 -0
- package/dist/version.js.map +1 -0
- package/package.json +15 -15
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
* SAPWrite actions — update + delete.
|
|
3
3
|
*/
|
|
4
4
|
import { isTextElementObjectType, TEXT_ELEMENT_OBJECT_TYPES, TEXT_ELEMENT_PARTS, } from '../../adt/client.js';
|
|
5
|
-
import { deleteObject, lockObject, safeUpdateClassInclude,
|
|
6
|
-
import { formatKtdWriteReport, rewriteKtdDocument, } from '../../adt/ddic-xml.js';
|
|
5
|
+
import { deleteObject, lockObject, safeUpdateClassInclude, safeUpdateSource, unlockObject } from '../../adt/crud.js';
|
|
7
6
|
import { AdtApiError } from '../../adt/errors.js';
|
|
8
7
|
import { spliceFmSignature } from '../../adt/fm-signature.js';
|
|
9
8
|
import { buildCdsDeleteDependencyHint, buildCdsUpdateCrudHint, CDS_DEPENDENCY_SENSITIVE_TYPES, guardCdsSyntax, } from '../cds-hints.js';
|
|
10
9
|
import { getCachedFeatures } from '../feature-cache.js';
|
|
11
10
|
import { CLASS_WRITE_INCLUDES, canonicalTablType, classIncludeUrl } from '../object-types.js';
|
|
12
11
|
import { errorResult, textResult } from '../shared.js';
|
|
13
|
-
import {
|
|
12
|
+
import { isMetadataWriteType, mergePreWriteWarnings, runPreWriteLint, runPreWriteSyntaxCheck, runRapPreflightValidation, stripFmParamCommentBlock, } from '../write-helpers.js';
|
|
13
|
+
import { writeMetadataUpdate } from './metadata-update.js';
|
|
14
14
|
function isDeleteDependencyError(err) {
|
|
15
15
|
const clean = AdtApiError.extractCleanMessage(err.responseBody ?? err.message).toLowerCase();
|
|
16
16
|
const body = (err.responseBody ?? '').toLowerCase();
|
|
@@ -39,54 +39,13 @@ export async function writeActionUpdate(ctx) {
|
|
|
39
39
|
// the testclasses (CCAU) include is absent — a content PUT alone fails
|
|
40
40
|
// with HTTP 500 "…CCAU does not have any inactive version". safeUpdateClassInclude
|
|
41
41
|
// probes the include and POST-creates it (under the same lock) before the PUT.
|
|
42
|
-
const { initialized } = await safeUpdateClassInclude(client.http, client.safety, objectUrl, classIncludeUrl(name, include), source, transport, getCachedFeatures()?.abapRelease);
|
|
42
|
+
const { initialized } = await safeUpdateClassInclude(client.http, client.safety, objectUrl, classIncludeUrl(name, include), source, transport, getCachedFeatures()?.abapRelease, args.expectedSourceHash);
|
|
43
43
|
invalidateWrittenObject(type, name);
|
|
44
44
|
const initNote = initialized ? ` (initialised the ${include} include first)` : '';
|
|
45
45
|
return textResult(`Successfully updated ${type} ${name} include ${include}${initNote}. Active version remains unchanged until activation; read with SAPRead(version="inactive") to verify the draft.`);
|
|
46
46
|
}
|
|
47
|
-
if (type === 'SKTD') {
|
|
48
|
-
|
|
49
|
-
// body base64-encoded inside <sktd:text>, PUT with
|
|
50
|
-
// `application/vnd.sap.adt.sktdv2+xml`. PUTting raw text/plain silently
|
|
51
|
-
// no-ops (or 415s on strict systems). Fetch the current envelope,
|
|
52
|
-
// replace only the <sktd:text> body, and PUT it back — preserves
|
|
53
|
-
// responsible/masterLanguage/packageRef/refObject metadata.
|
|
54
|
-
//
|
|
55
|
-
// Deliberately no `version`: ADT's default view already carries the pending
|
|
56
|
-
// inactive draft, so consecutive node writes without an activation in between
|
|
57
|
-
// accumulate instead of reverting to the active version (live-verified
|
|
58
|
-
// 2026-09-02). SAPRead defaults to "active", so its node list can lag this one;
|
|
59
|
-
// every refusal raised below lists the ids of the envelope it actually merged.
|
|
60
|
-
const { source: currentEnvelope } = await client.getKtd(name);
|
|
61
|
-
const report = { proseHeadings: [] };
|
|
62
|
-
const body = rewriteKtdDocument(currentEnvelope, hasSource ? source : undefined, args.shortTexts, report);
|
|
63
|
-
// Report both changed nodes and headings retained as prose so a new body exposes its routing.
|
|
64
|
-
const summary = formatKtdWriteReport(currentEnvelope, body, report, args.dryRun === true);
|
|
65
|
-
// A KTD update is a merge: only the addressed nodes change. dryRun runs the identical
|
|
66
|
-
// validation and reports the outcome without the PUT, so a 90-node edit can be checked
|
|
67
|
-
// before it touches SAP.
|
|
68
|
-
if (args.dryRun === true) {
|
|
69
|
-
return textResult(`Dry run for ${type} ${name} — nothing was written.\n${summary}`);
|
|
70
|
-
}
|
|
71
|
-
await safeUpdateObject(client.http, client.safety, objectUrl, body, SKTD_V2_CONTENT_TYPE, transport, getCachedFeatures()?.abapRelease);
|
|
72
|
-
invalidateWrittenObject(type, name);
|
|
73
|
-
return textResult(`Successfully updated ${type} ${name}.\n${summary}`);
|
|
74
|
-
}
|
|
75
|
-
if (isMetadataWriteType(type)) {
|
|
76
|
-
// Metadata updates are full-XML-replace — we must fetch existing metadata
|
|
77
|
-
// and merge with provided fields so omitted fields keep their current values.
|
|
78
|
-
// Without this, updating just labels would reset dataType/typeKind to defaults.
|
|
79
|
-
const metadataProps = getMetadataWriteProperties(args);
|
|
80
|
-
const mergedProps = await mergeMetadataWriteProperties(client, type, name, metadataProps);
|
|
81
|
-
const description = String(args.description ?? mergedProps._description ?? name);
|
|
82
|
-
const pkg = String(args.package ?? existingPackage ?? mergedProps._package ?? '$TMP');
|
|
83
|
-
// Keep the full-XML-replace body cloud-correct on BTP (G-3); resolve the user from the JWT (G-5).
|
|
84
|
-
const systemType = resolveWriteSystemType(config, client);
|
|
85
|
-
const responsible = config.username || (await client.getEffectiveUser());
|
|
86
|
-
const body = buildCreateXml(type, name, pkg, description, mergedProps, config.language, responsible, systemType === 'btp');
|
|
87
|
-
await safeUpdateObject(client.http, client.safety, objectUrl, body, vendorContentTypeForType(type), transport, getCachedFeatures()?.abapRelease);
|
|
88
|
-
invalidateWrittenObject(type, name);
|
|
89
|
-
return textResult(`Successfully updated ${type} ${name}.`);
|
|
47
|
+
if (type === 'SKTD' || isMetadataWriteType(type)) {
|
|
48
|
+
return writeMetadataUpdate(ctx, existingPackage);
|
|
90
49
|
}
|
|
91
50
|
// RAP deterministic preflight validation
|
|
92
51
|
const preflightWarnings = runRapPreflightValidation(source, type, name, getCachedFeatures(), config.systemType, preflightOverride);
|
|
@@ -104,59 +63,52 @@ export async function writeActionUpdate(ctx) {
|
|
|
104
63
|
//
|
|
105
64
|
// Issue #252: when `parameters` is supplied as a structured array, splice
|
|
106
65
|
// it into the FM source as ABAP-source-based signature syntax. If `source`
|
|
107
|
-
// is omitted entirely,
|
|
66
|
+
// is omitted entirely, read the existing source under the lock to preserve the
|
|
108
67
|
// body. The structured clause replaces any existing signature region.
|
|
109
68
|
let effectiveSource = source;
|
|
110
69
|
let fmParamStripWarning;
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
if (parameters !== undefined)
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
let baseSource = source;
|
|
118
|
-
if (!baseSource || baseSource.trim() === '') {
|
|
119
|
-
const groupName = String(args.group ?? '');
|
|
120
|
-
const fetched = await client.getFunction(groupName, name).catch(() => null);
|
|
121
|
-
baseSource = fetched?.source ?? `FUNCTION ${name}.\nENDFUNCTION.\n`;
|
|
122
|
-
}
|
|
123
|
-
else if (!/^\s*FUNCTION\s+/i.test(baseSource)) {
|
|
124
|
-
// Body-only source: wrap in FUNCTION/ENDFUNCTION so the splicer has
|
|
125
|
-
// something to work with. Common shape from LLMs: just the body.
|
|
126
|
-
baseSource = `FUNCTION ${name}.\n${baseSource}\nENDFUNCTION.\n`;
|
|
127
|
-
}
|
|
128
|
-
try {
|
|
129
|
-
effectiveSource = spliceFmSignature(baseSource, name, parameters);
|
|
130
|
-
}
|
|
131
|
-
catch {
|
|
132
|
-
// No FUNCTION token in the supplied source — fall back to user's source.
|
|
133
|
-
effectiveSource = baseSource;
|
|
134
|
-
fmParamMergeWarning =
|
|
135
|
-
'Could not splice structured parameters: source did not start with FUNCTION keyword. Used the supplied source verbatim.';
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
// Defense-in-depth: strip *" comment blocks even after splicing — the
|
|
139
|
-
// user's body may contain them (e.g. pasted from SAPGUI).
|
|
140
|
-
const stripped = stripFmParamCommentBlock(effectiveSource);
|
|
141
|
-
effectiveSource = stripped.source;
|
|
70
|
+
const parameters = args.parameters;
|
|
71
|
+
const needsCurrentFunctionSource = type === 'FUNC' && parameters !== undefined && !source.trim();
|
|
72
|
+
const prepareFunctionSource = (baseSource) => {
|
|
73
|
+
if (parameters !== undefined)
|
|
74
|
+
baseSource = spliceFmSignature(baseSource, name, parameters);
|
|
75
|
+
const stripped = stripFmParamCommentBlock(baseSource);
|
|
142
76
|
if (stripped.wasStripped) {
|
|
143
77
|
fmParamStripWarning =
|
|
144
78
|
'Stripped *"…IMPORTING/EXPORTING…*" parameter comment blocks (SAP rejects them on PUT — pass `parameters` as a structured array instead).';
|
|
145
79
|
}
|
|
80
|
+
return stripped.source;
|
|
81
|
+
};
|
|
82
|
+
if (type === 'FUNC' && !needsCurrentFunctionSource) {
|
|
83
|
+
// Only caller-supplied body text may be wrapped. A fetched source must contain the real FUNCTION envelope.
|
|
84
|
+
const bodyOnly = parameters !== undefined && !/^\s*FUNCTION\s+/i.test(source);
|
|
85
|
+
effectiveSource = prepareFunctionSource(bodyOnly ? `FUNCTION ${name}.\n${source}\nENDFUNCTION.\n` : source);
|
|
86
|
+
}
|
|
87
|
+
if (!needsCurrentFunctionSource && !effectiveSource.trim()) {
|
|
88
|
+
return errorResult(`"source" is required for action="update" on ${type} ${name}; no write was made.`);
|
|
146
89
|
}
|
|
147
90
|
// Pre-write lint validation (uses sanitized source for FUNC)
|
|
148
91
|
const lintWarnings = runPreWriteLint(effectiveSource, type, name, config, lintOverride);
|
|
149
92
|
if (lintWarnings.blocked)
|
|
150
93
|
return lintWarnings.result;
|
|
151
94
|
// Pre-write server-side syntax check (opt-in; never blocks — warnings only).
|
|
152
|
-
|
|
95
|
+
let checkNotes = '';
|
|
96
|
+
const checkSource = async (candidate, http = client.http) => {
|
|
97
|
+
checkNotes = await runPreWriteSyntaxCheck({ http, safety: client.safety }, type, candidate, objectUrl, config, checkOverride);
|
|
98
|
+
return candidate;
|
|
99
|
+
};
|
|
100
|
+
// A signature-only FUNC edit derives its replacement from fresh bytes under the lock.
|
|
101
|
+
// A failed read aborts; there is no empty-body fallback or unlocked source read.
|
|
102
|
+
const replacement = needsCurrentFunctionSource
|
|
103
|
+
? (current, session) => checkSource(prepareFunctionSource(current), session)
|
|
104
|
+
: await checkSource(effectiveSource);
|
|
153
105
|
// If safeUpdateSource throws (lock conflict, network error, etc.), checkNotes
|
|
154
106
|
// is intentionally discarded — pre-check warnings only matter when the write succeeded.
|
|
155
|
-
await safeUpdateSource(client.http, client.safety, objectUrl, srcUrl,
|
|
107
|
+
await safeUpdateSource(client.http, client.safety, objectUrl, srcUrl, replacement, transport, getCachedFeatures()?.abapRelease, args.expectedSourceHash);
|
|
156
108
|
invalidateWrittenObject(type, name);
|
|
157
109
|
const msg = `Successfully updated ${type} ${name}.`;
|
|
158
110
|
const cdsUpdateHint = type === 'DDLS' ? await buildCdsUpdateCrudHint(client, name, objectUrl) : undefined;
|
|
159
|
-
const warnings = mergePreWriteWarnings(preflightWarnings.warnings, lintWarnings.warnings, checkNotes, cdsUpdateHint, fmParamStripWarning
|
|
111
|
+
const warnings = mergePreWriteWarnings(preflightWarnings.warnings, lintWarnings.warnings, checkNotes, cdsUpdateHint, fmParamStripWarning);
|
|
160
112
|
return warnings ? textResult(`${msg}\n\n${warnings}`) : textResult(msg);
|
|
161
113
|
}
|
|
162
114
|
export async function writeActionDelete(ctx) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-delete.js","sourceRoot":"","sources":["../../../src/handlers/write/update-delete.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"update-delete.js","sourceRoot":"","sources":["../../../src/handlers/write/update-delete.ts"],"names":[],"mappings":"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"}
|
|
@@ -103,8 +103,8 @@ export declare function enforceAllowedPackageForObjectUrl(client: AdtClient, obj
|
|
|
103
103
|
* (create gates the caller-supplied package like every create; update/delete resolve the object's true
|
|
104
104
|
* package under the metadata Accept). The `source` param carries AFF JSON or DDL text per the type's
|
|
105
105
|
* registry sourceFormat — the JSON ones are parse-validated before the
|
|
106
|
-
* PUT; ABAP-specific pre-write steps (lint, RAP preflight, CDS guard) do not apply.
|
|
107
|
-
*
|
|
106
|
+
* PUT; ABAP-specific pre-write steps (lint, RAP preflight, CDS guard) do not apply. SAP controls
|
|
107
|
+
* activation: APLO saves are immediately active; other types need SAPActivate.
|
|
108
108
|
*/
|
|
109
109
|
export declare function handleServerDrivenObjectWrite(client: AdtClient, action: string, type: string, name: string, args: Record<string, unknown>, cachingLayer: CachingLayer | undefined, cacheSecurity: CacheSecurityContext): Promise<ToolResult>;
|
|
110
110
|
/** Pre-write lint check result */
|
|
@@ -157,12 +157,13 @@ export declare function runPreWriteLint(source: string, type: string, name: stri
|
|
|
157
157
|
* intermediate writes legitimately trip compile errors that resolve once the whole
|
|
158
158
|
* sequence lands. Real blocking is deferred to SAPActivate, which runs after all
|
|
159
159
|
* dependencies are in place. Best-effort: network/endpoint failures return ''. */
|
|
160
|
-
export declare function runPreWriteSyntaxCheck(client: AdtClient, type: string, source: string, objectUrl: string, config: ServerConfig, perCallOverride?: boolean): Promise<string>;
|
|
160
|
+
export declare function runPreWriteSyntaxCheck(client: Pick<AdtClient, 'http' | 'safety'>, type: string, source: string, objectUrl: string, config: ServerConfig, perCallOverride?: boolean): Promise<string>;
|
|
161
161
|
/** Run a syntax check on the inactive version and format the errors for appending to an
|
|
162
162
|
* error message. Returns '' on any failure or when no errors are reported. */
|
|
163
163
|
export declare function inactiveSyntaxDiagnostic(client: AdtClient, type: string, name: string): Promise<string>;
|
|
164
164
|
export declare function tryPostSaveSyntaxCheck(client: AdtClient, type: string, name: string): Promise<string>;
|
|
165
165
|
export declare const TABL_DT_WRITE_UNAVAILABLE_HINT: string;
|
|
166
|
+
export declare const ENQU_WRITE_UNAVAILABLE_HINT: string;
|
|
166
167
|
export declare const TTYP_WRITE_UNAVAILABLE_HINT: string;
|
|
167
168
|
export declare const DOMA_WRITE_UNAVAILABLE_HINT: string;
|
|
168
169
|
export declare const DEVC_WRITE_UNAVAILABLE_HINT: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"write-helpers.d.ts","sourceRoot":"","sources":["../../src/handlers/write-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"write-helpers.d.ts","sourceRoot":"","sources":["../../src/handlers/write-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { adtResponsibleAttr, buildDataElementXml, buildDomainXml, buildMessageClassXml, buildServiceBindingXml, buildTableTypeXml, normalizeAdtLanguage, normalizeAdtResponsible, } from '../adt/ddic-xml.js';
|
|
9
9
|
import { syntaxCheck } from '../adt/devtools.js';
|
|
10
|
-
import { AdtSafetyError } from '../adt/errors.js';
|
|
10
|
+
import { AdtError, AdtSafetyError } from '../adt/errors.js';
|
|
11
|
+
import { buildLockObjectXml, getLockObject, LOCKOBJECT_CONTENT_TYPE, mergeLockObjectDefinition, parseLockObjectDefinition, } from '../adt/lock-object.js';
|
|
11
12
|
import { formatRapPreflightFindings, validateRapSource } from '../adt/rap-preflight.js';
|
|
12
13
|
import { checkPackage } from '../adt/safety.js';
|
|
13
14
|
import { createServerDrivenObject, deleteServerDrivenObject, ensureServerDrivenSupport, serverDrivenMetadataContentType, serverDrivenObjectUrl, serverDrivenSourceFormat, serverDrivenUnavailableMessage, updateServerDrivenObjectSource, } from '../adt/server-driven.js';
|
|
@@ -28,10 +29,18 @@ import { errorResult, textResult } from './shared.js';
|
|
|
28
29
|
*/
|
|
29
30
|
export function buildLintConfigOptions(config, ruleOverrides) {
|
|
30
31
|
// Probe-detected system type is most accurate; fall back to CLI config
|
|
31
|
-
const
|
|
32
|
+
const cachedFeatures = getCachedFeatures();
|
|
33
|
+
const systemType = cachedFeatures?.systemType ?? (config.systemType !== 'auto' ? config.systemType : undefined);
|
|
34
|
+
const systemTypeSource = cachedFeatures?.systemType
|
|
35
|
+
? (cachedFeatures.systemTypeSource ?? 'probe')
|
|
36
|
+
: config.systemType !== 'auto'
|
|
37
|
+
? 'config'
|
|
38
|
+
: 'default';
|
|
32
39
|
return {
|
|
33
40
|
systemType,
|
|
34
|
-
|
|
41
|
+
systemTypeSource,
|
|
42
|
+
abapRelease: cachedFeatures?.abapRelease ?? config.abapRelease,
|
|
43
|
+
abapReleaseSource: cachedFeatures?.abapRelease ? 'probe' : config.abapRelease ? 'config' : 'unknown',
|
|
35
44
|
configFile: config.abaplintConfig,
|
|
36
45
|
ruleOverrides,
|
|
37
46
|
};
|
|
@@ -60,7 +69,7 @@ const FUNCTION_MODULE_CONTENT_TYPE = 'application/vnd.sap.adt.functions.fmodules
|
|
|
60
69
|
// "Supported Media Types: …fincludes.v2+xml" — verified on npl 7.50 and a4h 758.
|
|
61
70
|
const FUNCTION_INCLUDE_CONTENT_TYPE = 'application/vnd.sap.adt.functions.fincludes.v2+xml';
|
|
62
71
|
export function isMetadataWriteType(type) {
|
|
63
|
-
return type === 'DOMA' || type === 'DTEL' || type === 'MSAG' || type === 'SRVB' || type === 'TTYP';
|
|
72
|
+
return type === 'DOMA' || type === 'DTEL' || type === 'MSAG' || type === 'SRVB' || type === 'TTYP' || type === 'ENQU';
|
|
64
73
|
}
|
|
65
74
|
/** Types that require a specific vendor content type for creation (not application/*) */
|
|
66
75
|
function needsVendorContentType(type) {
|
|
@@ -70,6 +79,7 @@ function needsVendorContentType(type) {
|
|
|
70
79
|
type === 'MSAG' ||
|
|
71
80
|
type === 'SKTD' ||
|
|
72
81
|
type === 'TTYP' ||
|
|
82
|
+
type === 'ENQU' ||
|
|
73
83
|
type === 'FUGR' ||
|
|
74
84
|
type === 'FUNC');
|
|
75
85
|
}
|
|
@@ -106,6 +116,8 @@ export function vendorContentTypeForType(type) {
|
|
|
106
116
|
return SKTD_V2_CONTENT_TYPE;
|
|
107
117
|
case 'TTYP':
|
|
108
118
|
return TABLETYPE_CONTENT_TYPE;
|
|
119
|
+
case 'ENQU':
|
|
120
|
+
return LOCKOBJECT_CONTENT_TYPE;
|
|
109
121
|
case 'FUGR':
|
|
110
122
|
return FUNCTION_GROUP_CONTENT_TYPE;
|
|
111
123
|
case 'FUNC':
|
|
@@ -174,6 +186,8 @@ export function getMetadataWriteProperties(input) {
|
|
|
174
186
|
// /source/main. Preserve the ADT wire values exactly.
|
|
175
187
|
processingType: input.processingType,
|
|
176
188
|
updateTaskKind: input.updateTaskKind,
|
|
189
|
+
// ENQU carries its definition as JSON in "source" (the same shape SAPRead returns).
|
|
190
|
+
lockObjectSource: input.source,
|
|
177
191
|
};
|
|
178
192
|
return props;
|
|
179
193
|
}
|
|
@@ -259,6 +273,19 @@ export async function mergeMetadataWriteProperties(client, type, name, provided)
|
|
|
259
273
|
deactivateBIDIFiltering: existing.deactivateBIDIFiltering,
|
|
260
274
|
};
|
|
261
275
|
}
|
|
276
|
+
if (type === 'ENQU') {
|
|
277
|
+
// Merge over the developer view so consecutive unactivated edits accumulate.
|
|
278
|
+
const existing = await getLockObject(client.http, client.safety, name);
|
|
279
|
+
const source = provided.lockObjectSource;
|
|
280
|
+
const definition = source === undefined || source === null || String(source).trim() === ''
|
|
281
|
+
? {}
|
|
282
|
+
: parseLockObjectDefinition(String(source));
|
|
283
|
+
return {
|
|
284
|
+
_description: existing.description,
|
|
285
|
+
_package: existing.package,
|
|
286
|
+
lockObjectDefinition: mergeLockObjectDefinition(existing, definition),
|
|
287
|
+
};
|
|
288
|
+
}
|
|
262
289
|
if (type === 'SRVB') {
|
|
263
290
|
const { source: existingRaw } = await client.getSrvb(name);
|
|
264
291
|
const existing = JSON.parse(existingRaw);
|
|
@@ -272,6 +299,40 @@ export async function mergeMetadataWriteProperties(client, type, name, provided)
|
|
|
272
299
|
odataVersion: provided.odataVersion ?? existing.odataVersion,
|
|
273
300
|
};
|
|
274
301
|
}
|
|
302
|
+
if (type === 'TTYP') {
|
|
303
|
+
const existing = await client.getTableType(name).catch((err) => {
|
|
304
|
+
// SAP and transport failures are reported as they are; an unreadable shape has to say why the update stops.
|
|
305
|
+
if (err instanceof AdtError)
|
|
306
|
+
throw err;
|
|
307
|
+
throw new Error(`Cannot update TTYP ${name}: ARC-1 could not read its stored metadata ` +
|
|
308
|
+
`(${err instanceof Error ? err.message : String(err)}) and will not overwrite it blind. ` +
|
|
309
|
+
'Nothing was written. Change this table type in ADT or SE11.');
|
|
310
|
+
});
|
|
311
|
+
// The two row kinds buildTableTypeXml writes, as rowTypeKind values. Ref and range rows have none.
|
|
312
|
+
const storedKind = existing.rowTypeKind === 'predefinedAbapType'
|
|
313
|
+
? 'builtin'
|
|
314
|
+
: existing.rowTypeKind === 'dictionaryType'
|
|
315
|
+
? 'structure'
|
|
316
|
+
: undefined;
|
|
317
|
+
const requested = String(provided.rowType ?? '').trim();
|
|
318
|
+
// Without rowType the caller keeps the stored definition, so ARC-1 must be able to write it back unchanged.
|
|
319
|
+
if (!requested && !(storedKind && existing.plainStandardTable)) {
|
|
320
|
+
const lost = storedKind ? 'its access type, keys or initial row count' : `its ${existing.rowTypeKind} row type`;
|
|
321
|
+
throw new Error(`Cannot update TTYP ${name} without "rowType": ARC-1 rewrites a table type as a standard table with a ` +
|
|
322
|
+
`non-unique standard key and cannot keep ${lost}. Nothing was written. ` +
|
|
323
|
+
'Pass rowType to accept that rewrite, or change this table type in ADT or SE11.');
|
|
324
|
+
}
|
|
325
|
+
// The stored kind and built-in length describe the stored row type: keep them only while it is unchanged.
|
|
326
|
+
const unchanged = !!storedKind && (!requested || requested.toUpperCase() === existing.rowType.toUpperCase());
|
|
327
|
+
return {
|
|
328
|
+
_description: existing.description,
|
|
329
|
+
_package: existing.package,
|
|
330
|
+
rowType: requested || existing.rowType,
|
|
331
|
+
rowTypeKind: provided.rowTypeKind ?? (unchanged ? storedKind : undefined),
|
|
332
|
+
rowTypeLength: unchanged ? existing.rowTypeLength : undefined,
|
|
333
|
+
rowTypeDecimals: unchanged ? existing.rowTypeDecimals : undefined,
|
|
334
|
+
};
|
|
335
|
+
}
|
|
275
336
|
return provided;
|
|
276
337
|
}
|
|
277
338
|
/**
|
|
@@ -548,10 +609,18 @@ function buildCreateXmlBody(type, name, pkg, description, properties, language,
|
|
|
548
609
|
package: pkg,
|
|
549
610
|
rowType,
|
|
550
611
|
rowTypeKind,
|
|
612
|
+
rowTypeLength: properties?.rowTypeLength,
|
|
613
|
+
rowTypeDecimals: properties?.rowTypeDecimals,
|
|
551
614
|
language: masterLanguage,
|
|
552
615
|
responsible: responsibleUser,
|
|
553
616
|
});
|
|
554
617
|
}
|
|
618
|
+
case 'ENQU': {
|
|
619
|
+
// Update passes the merged definition; create parses the caller's JSON source.
|
|
620
|
+
const definition = properties?.lockObjectDefinition ??
|
|
621
|
+
parseLockObjectDefinition(String(properties?.lockObjectSource ?? '{}'));
|
|
622
|
+
return buildLockObjectXml({ name, description, package: pkg, definition, masterLanguage, responsibleAttr });
|
|
623
|
+
}
|
|
555
624
|
case 'DTEL': {
|
|
556
625
|
const typeKindRaw = String(properties?.typeKind ?? '');
|
|
557
626
|
const typeKind = typeKindRaw === 'domain' || typeKindRaw === 'predefinedAbapType' ? typeKindRaw : undefined;
|
|
@@ -691,6 +760,7 @@ export const NAME_CASE_GUARD_ACTIONS = new Set([
|
|
|
691
760
|
'update',
|
|
692
761
|
'edit_method',
|
|
693
762
|
'edit_unit',
|
|
763
|
+
'add_unit',
|
|
694
764
|
'delete',
|
|
695
765
|
'edit_text_symbols',
|
|
696
766
|
]);
|
|
@@ -724,8 +794,8 @@ export async function enforceAllowedPackageForObjectUrl(client, objectUrl, label
|
|
|
724
794
|
* (create gates the caller-supplied package like every create; update/delete resolve the object's true
|
|
725
795
|
* package under the metadata Accept). The `source` param carries AFF JSON or DDL text per the type's
|
|
726
796
|
* registry sourceFormat — the JSON ones are parse-validated before the
|
|
727
|
-
* PUT; ABAP-specific pre-write steps (lint, RAP preflight, CDS guard) do not apply.
|
|
728
|
-
*
|
|
797
|
+
* PUT; ABAP-specific pre-write steps (lint, RAP preflight, CDS guard) do not apply. SAP controls
|
|
798
|
+
* activation: APLO saves are immediately active; other types need SAPActivate.
|
|
729
799
|
*/
|
|
730
800
|
export async function handleServerDrivenObjectWrite(client, action, type, name, args, cachingLayer, cacheSecurity) {
|
|
731
801
|
// Discovery gate — mirror handleSAPRead's server-driven branch.
|
|
@@ -735,12 +805,15 @@ export async function handleServerDrivenObjectWrite(client, action, type, name,
|
|
|
735
805
|
const transport = args.transport;
|
|
736
806
|
const objUrl = serverDrivenObjectUrl(type, name);
|
|
737
807
|
const metadataAccept = serverDrivenMetadataContentType(type);
|
|
808
|
+
const activationHint = type === 'APLO'
|
|
809
|
+
? 'APLO changes are active immediately; no activation is required.'
|
|
810
|
+
: `Next step: SAPActivate(type="${type}", name="${name}").`;
|
|
738
811
|
const invalidate = () => {
|
|
739
812
|
cachingLayer?.invalidate(type, name, 'all');
|
|
740
813
|
invalidateInactiveList(cachingLayer, client, cacheSecurity);
|
|
741
814
|
};
|
|
742
|
-
//
|
|
743
|
-
//
|
|
815
|
+
// Only parse-validate entries whose sourceFormat is 'json'. Validating DDL text as JSON
|
|
816
|
+
// would reject every valid source.
|
|
744
817
|
const validateSource = () => {
|
|
745
818
|
const src = String(args.source ?? '');
|
|
746
819
|
if (serverDrivenSourceFormat(type) === 'json') {
|
|
@@ -762,25 +835,51 @@ export async function handleServerDrivenObjectWrite(client, action, type, name,
|
|
|
762
835
|
case 'create': {
|
|
763
836
|
const pkg = String(args.package ?? '$TMP');
|
|
764
837
|
await checkPackage(client.safety, pkg, client.getPackageHierarchyResolver());
|
|
838
|
+
if (type === 'APLO' && name.length > 20) {
|
|
839
|
+
return errorResult('APLO names must be at most 20 characters. Nothing was created.');
|
|
840
|
+
}
|
|
765
841
|
const description = String(args.description ?? name);
|
|
766
842
|
// Validate BEFORE the create POST — validating after would leave an inactive orphan on SAP
|
|
767
843
|
// that the caller never asked for and has to clean up by hand.
|
|
768
844
|
const validated = hasSourceArg ? validateSource() : undefined;
|
|
769
845
|
if (validated && !validated.ok)
|
|
770
846
|
return validated.result;
|
|
847
|
+
// The job creation wizard requires this reference before the source PUT (notably on 758).
|
|
848
|
+
let creationProperties;
|
|
849
|
+
if (type === 'SAJC' || type === 'SAJT') {
|
|
850
|
+
const field = type === 'SAJC' ? 'className' : 'catalogName';
|
|
851
|
+
const reference = validated?.ok ? JSON.parse(validated.source)?.generalInformation?.[field] : undefined;
|
|
852
|
+
if (typeof reference !== 'string' || !reference.trim()) {
|
|
853
|
+
return errorResult(`Creating ${type} requires source.generalInformation.${field} in the AFF JSON source.`);
|
|
854
|
+
}
|
|
855
|
+
creationProperties = { [field]: reference };
|
|
856
|
+
}
|
|
771
857
|
await createServerDrivenObject(client.http, client.safety, type, name, {
|
|
772
858
|
package: pkg,
|
|
773
859
|
description,
|
|
774
860
|
transport,
|
|
861
|
+
creationProperties,
|
|
775
862
|
});
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
863
|
+
try {
|
|
864
|
+
if (validated?.ok) {
|
|
865
|
+
await updateServerDrivenObjectSource(client.http, client.safety, type, name, validated.source, { transport });
|
|
866
|
+
}
|
|
780
867
|
}
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
868
|
+
catch (cause) {
|
|
869
|
+
// The POST succeeded; both HTTP and network failures can leave the object with a partial source.
|
|
870
|
+
const err = cause instanceof AdtError ? cause : new AdtError(cause instanceof Error ? cause.message : String(cause));
|
|
871
|
+
err.extraHint = `${type} ${name} was created in package ${pkg}${type === 'APLO' ? ' and is active' : ''}, but the follow-up source step failed. Check it with SAPRead before using SAPWrite(action="update") — do not repeat create.`;
|
|
872
|
+
throw err;
|
|
873
|
+
}
|
|
874
|
+
finally {
|
|
875
|
+
try {
|
|
876
|
+
invalidate();
|
|
877
|
+
}
|
|
878
|
+
catch {
|
|
879
|
+
// Cache bookkeeping must not replace the confirmed create outcome or its original failure.
|
|
880
|
+
}
|
|
881
|
+
}
|
|
882
|
+
return textResult(`Created ${type} ${name} in package ${pkg}${validated?.ok ? ' and wrote source' : ''}.\n${activationHint}`);
|
|
784
883
|
}
|
|
785
884
|
case 'update': {
|
|
786
885
|
if (!hasSourceArg) {
|
|
@@ -792,17 +891,26 @@ export async function handleServerDrivenObjectWrite(client, action, type, name,
|
|
|
792
891
|
await enforceAllowedPackageForObjectUrl(client, objUrl, `Operations on ${type} '${name}'`, metadataAccept);
|
|
793
892
|
await updateServerDrivenObjectSource(client.http, client.safety, type, name, v.source, { transport });
|
|
794
893
|
invalidate();
|
|
795
|
-
return textResult(`Updated source of ${type} ${name}.\
|
|
894
|
+
return textResult(`Updated source of ${type} ${name}.\n${activationHint}`);
|
|
796
895
|
}
|
|
797
896
|
case 'delete': {
|
|
798
897
|
await enforceAllowedPackageForObjectUrl(client, objUrl, `Operations on ${type} '${name}'`, metadataAccept);
|
|
799
|
-
|
|
800
|
-
|
|
898
|
+
try {
|
|
899
|
+
await deleteServerDrivenObject(client.http, client.safety, type, name, { transport });
|
|
900
|
+
}
|
|
901
|
+
finally {
|
|
902
|
+
try {
|
|
903
|
+
invalidate();
|
|
904
|
+
}
|
|
905
|
+
catch {
|
|
906
|
+
// Best-effort cleanup must not mask partial deletion or prevent the audit event.
|
|
907
|
+
}
|
|
908
|
+
}
|
|
801
909
|
return textResult(`Deleted ${type} ${name}.`);
|
|
802
910
|
}
|
|
803
911
|
default:
|
|
804
912
|
return errorResult(`Action "${action}" is not supported for server-driven object type ${type}. ` +
|
|
805
|
-
'Supported: create, update, delete
|
|
913
|
+
'Supported: create, update, delete.');
|
|
806
914
|
}
|
|
807
915
|
}
|
|
808
916
|
/**
|
|
@@ -900,8 +1008,11 @@ export function runPreWriteLint(source, type, name, config, perCallOverride) {
|
|
|
900
1008
|
const errorLines = result.errors.map((e) => ` Line ${e.line}: [${e.rule}] ${e.message}`).join('\n');
|
|
901
1009
|
return {
|
|
902
1010
|
blocked: true,
|
|
903
|
-
result: errorResult(`Pre-write lint check failed for ${type} ${name}
|
|
904
|
-
|
|
1011
|
+
result: errorResult(`Pre-write lint check failed for ${type} ${name} (abaplint syntax ${JSON.stringify(result.syntaxVersion)}). ` +
|
|
1012
|
+
`Fix these errors before writing:\n${errorLines}\n\n` +
|
|
1013
|
+
'For parser/version findings, check SAPLint action="list_rules" and the target SAP release before ' +
|
|
1014
|
+
'changing valid source. Use SAPLint action="lint_and_fix" for fixable findings, or ' +
|
|
1015
|
+
'lintBeforeWrite=false to skip this check for this call.'),
|
|
905
1016
|
};
|
|
906
1017
|
}
|
|
907
1018
|
if (result.warnings.length > 0) {
|
|
@@ -1007,6 +1118,9 @@ export const TABL_DT_WRITE_UNAVAILABLE_HINT = 'Transparent table writes via ADT
|
|
|
1007
1118
|
'Use SE11 in SAPGUI, or connect ARC-1 to an SAP_BASIS ≥ 7.52 system. ' +
|
|
1008
1119
|
'Writing the source via /sap/bc/adt/ddic/structures/ would silently flip ' +
|
|
1009
1120
|
'DD02L-TABCLASS to INTTAB and corrupt the table.';
|
|
1121
|
+
export const ENQU_WRITE_UNAVAILABLE_HINT = 'Lock object (ENQU) writes are not available on this system ' +
|
|
1122
|
+
'(/sap/bc/adt/ddic/lockobjects/sources is not exposed by ADT discovery). ' +
|
|
1123
|
+
'Use SE11 in SAPGUI, or connect ARC-1 to a system that exposes the lock-object endpoint.';
|
|
1010
1124
|
export const TTYP_WRITE_UNAVAILABLE_HINT = 'Table type (TTYP) writes are not available on this system ' +
|
|
1011
1125
|
'(/sap/bc/adt/ddic/tabletypes/ is not exposed by ADT discovery — verified absent on NW 7.50). ' +
|
|
1012
1126
|
'Use SE11 in SAPGUI, or connect ARC-1 to a system that exposes the table-type endpoint (S/4HANA 2023 / ABAP Platform 2025 verified).';
|