arc-1 1.4.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/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/crud.d.ts +3 -3
- package/dist/adt/crud.d.ts.map +1 -1
- package/dist/adt/crud.js +21 -6
- 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.js +3 -3
- package/dist/adt/devtools.js.map +1 -1
- package/dist/adt/diagnostics.js +4 -4
- 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 +19 -10
- package/dist/adt/errors.d.ts.map +1 -1
- package/dist/adt/errors.js +73 -53
- package/dist/adt/errors.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.d.ts +7 -27
- package/dist/adt/http.d.ts.map +1 -1
- package/dist/adt/http.js +23 -28
- 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/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 +42 -10
- package/dist/adt/server-driven.d.ts.map +1 -1
- package/dist/adt/server-driven.js +98 -18
- 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.js +3 -3
- package/dist/adt/transport.js.map +1 -1
- package/dist/adt/types.d.ts +19 -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 +3 -1
- package/dist/context/unit-surgery.d.ts.map +1 -1
- package/dist/context/unit-surgery.js +52 -5
- package/dist/context/unit-surgery.js.map +1 -1
- package/dist/handlers/activate.d.ts.map +1 -1
- package/dist/handlers/activate.js +7 -20
- package/dist/handlers/activate.js.map +1 -1
- package/dist/handlers/diagnose.d.ts.map +1 -1
- package/dist/handlers/diagnose.js +8 -29
- package/dist/handlers/diagnose.js.map +1 -1
- package/dist/handlers/dispatch.d.ts.map +1 -1
- package/dist/handlers/dispatch.js +20 -4
- 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.js +1 -1
- 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/read.d.ts.map +1 -1
- package/dist/handlers/read.js +38 -7
- package/dist/handlers/read.js.map +1 -1
- package/dist/handlers/schemas.d.ts +39 -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 +40 -51
- 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/where-used.d.ts.map +1 -1
- package/dist/handlers/where-used.js +0 -5
- package/dist/handlers/where-used.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 +14 -8
- 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 +3 -2
- package/dist/handlers/write-helpers.d.ts.map +1 -1
- package/dist/handlers/write-helpers.js +118 -15
- package/dist/handlers/write-helpers.js.map +1 -1
- package/dist/handlers/write.d.ts.map +1 -1
- package/dist/handlers/write.js +12 -27
- package/dist/handlers/write.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/types.d.ts +2 -13
- 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 +3 -0
- 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/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/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 +6 -12
- package/dist/server/safe-http-client.d.ts.map +1 -1
- package/dist/server/safe-http-client.js +28 -63
- 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 +30 -23
- package/dist/server/server.js.map +1 -1
- package/dist/server/types.d.ts +1 -0
- 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 +7 -7
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* SAPWrite actions — RAP behavior scaffolding.
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
5
|
-
import { generateBehaviorImplementation, isRapGenerateResultSuccess } from '../../adt/rap-generate.js';
|
|
4
|
+
import { generateBehaviorImplementation, isRapGenerateResultSuccess, readRapClassSources, } from '../../adt/rap-generate.js';
|
|
6
5
|
import { applyRapHandlerScaffold, extractRapHandlerRequirements, findMissingRapHandlerImplementationStubs, findMissingRapHandlerRequirements, } from '../../adt/rap-handlers.js';
|
|
7
|
-
import { getCachedFeatures } from '../feature-cache.js';
|
|
8
6
|
import { classIncludeUrl } from '../object-types.js';
|
|
9
7
|
import { errorResult, textResult, toolJson } from '../shared.js';
|
|
10
8
|
import { mergePreWriteWarnings, runPreWriteLint } from '../write-helpers.js';
|
|
9
|
+
import { withClassEdit } from './class-edit.js';
|
|
11
10
|
export async function writeActionScaffoldRapHandlers(ctx) {
|
|
12
|
-
const { client, args, config, cachingLayer, type, name,
|
|
11
|
+
const { client, args, config, cachingLayer, type, name, lintOverride, srcUrl, enforcePackageForExistingObject } = ctx;
|
|
13
12
|
// What this action does:
|
|
14
13
|
// Given a behavior-pool class (ZBP_*) and its interface BDEF, inspect
|
|
15
14
|
// the class for every `lhc_<alias>` local handler class and make
|
|
@@ -40,76 +39,114 @@ export async function writeActionScaffoldRapHandlers(ctx) {
|
|
|
40
39
|
if (autoApply) {
|
|
41
40
|
await enforcePackageForExistingObject();
|
|
42
41
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
missingImplementationStubs
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
42
|
+
const scaffold = async (session, save) => {
|
|
43
|
+
const classStructured = await readRapClassSources(session, client.safety, name);
|
|
44
|
+
const classMainSource = classStructured.main;
|
|
45
|
+
const classDefinitionsSource = classStructured.definitions ?? '';
|
|
46
|
+
const classImplementationsSource = classStructured.implementations ?? '';
|
|
47
|
+
const classCombinedSource = [classMainSource, classDefinitionsSource, classImplementationsSource]
|
|
48
|
+
.filter(Boolean)
|
|
49
|
+
.join('\n\n');
|
|
50
|
+
const bdefSource = cachingLayer
|
|
51
|
+
? (await cachingLayer.getSource('BDEF', bdefName, (ifNoneMatch) => client.getBdef(bdefName, { ifNoneMatch })))
|
|
52
|
+
.source
|
|
53
|
+
: (await client.getBdef(bdefName)).source;
|
|
54
|
+
let requirements = extractRapHandlerRequirements(bdefSource);
|
|
55
|
+
if (targetAlias) {
|
|
56
|
+
requirements = requirements.filter((req) => req.entityAlias.toLowerCase() === targetAlias);
|
|
57
|
+
}
|
|
58
|
+
if (requirements.length === 0) {
|
|
59
|
+
const allAliases = Array.from(new Set(extractRapHandlerRequirements(bdefSource).map((req) => req.entityAlias)));
|
|
60
|
+
const aliasHint = targetAlias && allAliases.length > 0
|
|
61
|
+
? ` Available aliases in ${bdefName}: ${allAliases.join(', ')}.`
|
|
62
|
+
: ' No RAP action/determination/validation/auth handler declarations were found in the BDEF source.';
|
|
63
|
+
return errorResult(`No RAP handler requirements were found for the requested scope.${aliasHint}`);
|
|
64
|
+
}
|
|
65
|
+
const missing = findMissingRapHandlerRequirements(requirements, classCombinedSource);
|
|
66
|
+
const missingImplementationStubs = findMissingRapHandlerImplementationStubs(requirements, classCombinedSource);
|
|
67
|
+
const summary = {
|
|
68
|
+
className: name,
|
|
69
|
+
bdefName,
|
|
70
|
+
targetAlias: targetAlias || undefined,
|
|
71
|
+
scannedSections: [
|
|
72
|
+
'main',
|
|
73
|
+
classDefinitionsSource ? 'definitions' : undefined,
|
|
74
|
+
classImplementationsSource ? 'implementations' : undefined,
|
|
75
|
+
].filter(Boolean),
|
|
76
|
+
requiredCount: requirements.length,
|
|
77
|
+
missingCount: missing.length,
|
|
78
|
+
missing,
|
|
79
|
+
missingImplementationStubCount: missingImplementationStubs.length,
|
|
80
|
+
missingImplementationStubs,
|
|
81
|
+
};
|
|
82
|
+
if (!save || (missing.length === 0 && missingImplementationStubs.length === 0)) {
|
|
83
|
+
return textResult(toolJson({ ...summary, applied: false }));
|
|
84
|
+
}
|
|
85
|
+
// Pure RAP transformation planning lives in rap-handlers.ts. Keep this
|
|
86
|
+
// handler focused on MCP/ADT concerns: safety, linting, locking, writes.
|
|
87
|
+
const scaffoldPlan = applyRapHandlerScaffold({
|
|
88
|
+
main: classMainSource,
|
|
89
|
+
definitions: classDefinitionsSource || undefined,
|
|
90
|
+
implementations: classImplementationsSource || undefined,
|
|
91
|
+
}, missing, missingImplementationStubs);
|
|
92
|
+
if (scaffoldPlan.changedSections.length === 0) {
|
|
93
|
+
const unresolvedHandlerClasses = Array.from(new Set(scaffoldPlan.unresolved.map((req) => req.targetHandlerClass)));
|
|
94
|
+
const unresolvedHint = unresolvedHandlerClasses.length > 0
|
|
95
|
+
? `No source changes were applied because handler class skeleton(s) ${unresolvedHandlerClasses.join(', ')} were not found in main, definitions, or implementations. Create the local handler class skeleton(s) first (for example with the ADT quick fix "Create local handler class"), then rerun with autoApply=true.`
|
|
96
|
+
: undefined;
|
|
97
|
+
return textResult(toolJson({
|
|
98
|
+
...summary,
|
|
99
|
+
applied: false,
|
|
100
|
+
hint: unresolvedHint,
|
|
101
|
+
applyResult: {
|
|
102
|
+
skeletons: scaffoldPlan.skeletons,
|
|
103
|
+
main: scaffoldPlan.signatures.main,
|
|
104
|
+
definitions: scaffoldPlan.signatures.definitions,
|
|
105
|
+
implementations: scaffoldPlan.signatures.implementations,
|
|
106
|
+
implementationStubs: scaffoldPlan.implementationStubs,
|
|
107
|
+
unresolved: scaffoldPlan.unresolved,
|
|
108
|
+
},
|
|
109
|
+
}));
|
|
110
|
+
}
|
|
111
|
+
const finalMainSource = scaffoldPlan.sections.main;
|
|
112
|
+
const finalDefinitionsSource = scaffoldPlan.sections.definitions;
|
|
113
|
+
const finalImplementationsSource = scaffoldPlan.sections.implementations;
|
|
114
|
+
const { changed } = scaffoldPlan;
|
|
115
|
+
// Run lint for every section we are about to update; block before any write to avoid partial state.
|
|
116
|
+
let lintWarningsMain;
|
|
117
|
+
if (changed.main) {
|
|
118
|
+
lintWarningsMain = runPreWriteLint(finalMainSource, type, name, config, lintOverride);
|
|
119
|
+
if (lintWarningsMain.blocked)
|
|
120
|
+
return lintWarningsMain.result;
|
|
121
|
+
}
|
|
122
|
+
let lintWarningsDefinitions;
|
|
123
|
+
if (changed.definitions && finalDefinitionsSource) {
|
|
124
|
+
lintWarningsDefinitions = runPreWriteLint(finalDefinitionsSource, type, name, config, lintOverride);
|
|
125
|
+
if (lintWarningsDefinitions.blocked)
|
|
126
|
+
return lintWarningsDefinitions.result;
|
|
127
|
+
}
|
|
128
|
+
let lintWarningsImplementations;
|
|
129
|
+
if (changed.implementations && finalImplementationsSource) {
|
|
130
|
+
lintWarningsImplementations = runPreWriteLint(finalImplementationsSource, type, name, config, lintOverride);
|
|
131
|
+
if (lintWarningsImplementations.blocked)
|
|
132
|
+
return lintWarningsImplementations.result;
|
|
133
|
+
}
|
|
134
|
+
// The shared class lifecycle invalidates caches even after a partial save.
|
|
135
|
+
if (changed.main)
|
|
136
|
+
await save(srcUrl, finalMainSource);
|
|
137
|
+
if (changed.definitions && finalDefinitionsSource) {
|
|
138
|
+
await save(classIncludeUrl(name, 'definitions'), finalDefinitionsSource);
|
|
139
|
+
}
|
|
140
|
+
if (changed.implementations && finalImplementationsSource) {
|
|
141
|
+
await save(classIncludeUrl(name, 'implementations'), finalImplementationsSource);
|
|
142
|
+
}
|
|
143
|
+
const msg = `Scaffolded ${scaffoldPlan.insertedSignatureCount} RAP handler signature(s) and ${scaffoldPlan.insertedImplementationStubCount} implementation stub(s) in ${type} ${name} from BDEF ${bdefName}. ` +
|
|
144
|
+
`Auto-created ${scaffoldPlan.skeletons.createdDefinitions.length + scaffoldPlan.skeletons.createdImplementations.length} handler skeleton section(s). ` +
|
|
145
|
+
`Updated section(s): ${scaffoldPlan.changedSections.join(', ')}.`;
|
|
146
|
+
const warnings = mergePreWriteWarnings(lintWarningsMain?.warnings, lintWarningsDefinitions?.warnings, lintWarningsImplementations?.warnings);
|
|
147
|
+
const details = toolJson({
|
|
110
148
|
...summary,
|
|
111
|
-
applied:
|
|
112
|
-
hint: unresolvedHint,
|
|
149
|
+
applied: true,
|
|
113
150
|
applyResult: {
|
|
114
151
|
skeletons: scaffoldPlan.skeletons,
|
|
115
152
|
main: scaffoldPlan.signatures.main,
|
|
@@ -118,80 +155,13 @@ export async function writeActionScaffoldRapHandlers(ctx) {
|
|
|
118
155
|
implementationStubs: scaffoldPlan.implementationStubs,
|
|
119
156
|
unresolved: scaffoldPlan.unresolved,
|
|
120
157
|
},
|
|
121
|
-
})
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
let lintWarningsMain;
|
|
129
|
-
if (changed.main) {
|
|
130
|
-
lintWarningsMain = runPreWriteLint(finalMainSource, type, name, config, lintOverride);
|
|
131
|
-
if (lintWarningsMain.blocked)
|
|
132
|
-
return lintWarningsMain.result;
|
|
133
|
-
}
|
|
134
|
-
let lintWarningsDefinitions;
|
|
135
|
-
if (changed.definitions && finalDefinitionsSource) {
|
|
136
|
-
lintWarningsDefinitions = runPreWriteLint(finalDefinitionsSource, type, name, config, lintOverride);
|
|
137
|
-
if (lintWarningsDefinitions.blocked)
|
|
138
|
-
return lintWarningsDefinitions.result;
|
|
139
|
-
}
|
|
140
|
-
let lintWarningsImplementations;
|
|
141
|
-
if (changed.implementations && finalImplementationsSource) {
|
|
142
|
-
lintWarningsImplementations = runPreWriteLint(finalImplementationsSource, type, name, config, lintOverride);
|
|
143
|
-
if (lintWarningsImplementations.blocked)
|
|
144
|
-
return lintWarningsImplementations.result;
|
|
145
|
-
}
|
|
146
|
-
// All modified includes share one lock so we never end up in a partial-state
|
|
147
|
-
// (e.g. main written, implementations errored → handler class declares but
|
|
148
|
-
// doesn't implement methods → class cannot activate). The lock is taken once
|
|
149
|
-
// at the class object URL, and every include PUT carries the same lockHandle.
|
|
150
|
-
// This mirrors how ADT-in-Eclipse saves a multi-include class in one commit.
|
|
151
|
-
await client.http.withStatefulSession(async (session) => {
|
|
152
|
-
const lock = await lockObject(session, client.safety, objectUrl, 'MODIFY', getCachedFeatures()?.abapRelease);
|
|
153
|
-
const effectiveTransport = transport ?? (lock.corrNr || undefined);
|
|
154
|
-
try {
|
|
155
|
-
if (changed.main) {
|
|
156
|
-
await updateSource(session, client.safety, srcUrl, finalMainSource, lock.lockHandle, effectiveTransport);
|
|
157
|
-
}
|
|
158
|
-
if (changed.definitions && finalDefinitionsSource) {
|
|
159
|
-
await updateSource(session, client.safety, classIncludeUrl(name, 'definitions'), finalDefinitionsSource, lock.lockHandle, effectiveTransport);
|
|
160
|
-
}
|
|
161
|
-
if (changed.implementations && finalImplementationsSource) {
|
|
162
|
-
await updateSource(session, client.safety, classIncludeUrl(name, 'implementations'), finalImplementationsSource, lock.lockHandle, effectiveTransport);
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
finally {
|
|
166
|
-
// Best-effort unlock — if the object was already removed or the session
|
|
167
|
-
// expired, we still want to surface the original error instead of masking
|
|
168
|
-
// it with an unlock failure.
|
|
169
|
-
try {
|
|
170
|
-
await unlockObject(session, objectUrl, lock.lockHandle);
|
|
171
|
-
}
|
|
172
|
-
catch {
|
|
173
|
-
// Swallowed intentionally; see comment above.
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
});
|
|
177
|
-
invalidateWrittenObject();
|
|
178
|
-
const msg = `Scaffolded ${scaffoldPlan.insertedSignatureCount} RAP handler signature(s) and ${scaffoldPlan.insertedImplementationStubCount} implementation stub(s) in ${type} ${name} from BDEF ${bdefName}. ` +
|
|
179
|
-
`Auto-created ${scaffoldPlan.skeletons.createdDefinitions.length + scaffoldPlan.skeletons.createdImplementations.length} handler skeleton section(s). ` +
|
|
180
|
-
`Updated section(s): ${scaffoldPlan.changedSections.join(', ')}.`;
|
|
181
|
-
const warnings = mergePreWriteWarnings(lintWarningsMain?.warnings, lintWarningsDefinitions?.warnings, lintWarningsImplementations?.warnings);
|
|
182
|
-
const details = toolJson({
|
|
183
|
-
...summary,
|
|
184
|
-
applied: true,
|
|
185
|
-
applyResult: {
|
|
186
|
-
skeletons: scaffoldPlan.skeletons,
|
|
187
|
-
main: scaffoldPlan.signatures.main,
|
|
188
|
-
definitions: scaffoldPlan.signatures.definitions,
|
|
189
|
-
implementations: scaffoldPlan.signatures.implementations,
|
|
190
|
-
implementationStubs: scaffoldPlan.implementationStubs,
|
|
191
|
-
unresolved: scaffoldPlan.unresolved,
|
|
192
|
-
},
|
|
193
|
-
});
|
|
194
|
-
return warnings ? textResult(`${msg}\n\n${warnings}\n\n${details}`) : textResult(`${msg}\n\n${details}`);
|
|
158
|
+
});
|
|
159
|
+
return warnings ? textResult(`${msg}\n\n${warnings}\n\n${details}`) : textResult(`${msg}\n\n${details}`);
|
|
160
|
+
};
|
|
161
|
+
if (!autoApply)
|
|
162
|
+
return scaffold(client.http);
|
|
163
|
+
// Even unchanged auto-apply calls need the lock to establish a current no-op.
|
|
164
|
+
return withClassEdit(ctx, ({ http, save }) => scaffold(http, save));
|
|
195
165
|
}
|
|
196
166
|
export async function writeActionGenerateBehaviorImplementation(ctx) {
|
|
197
167
|
const { client, args, type, name, transport, invalidateWrittenObject, enforcePackageForExistingObject } = ctx;
|
|
@@ -217,14 +187,21 @@ export async function writeActionGenerateBehaviorImplementation(ctx) {
|
|
|
217
187
|
if (!dryRun) {
|
|
218
188
|
await enforcePackageForExistingObject();
|
|
219
189
|
}
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
190
|
+
let result;
|
|
191
|
+
try {
|
|
192
|
+
result = await generateBehaviorImplementation(client, name, {
|
|
193
|
+
bdefName: explicitBdef,
|
|
194
|
+
targetAlias,
|
|
195
|
+
activate,
|
|
196
|
+
dryRun,
|
|
197
|
+
transport,
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
finally {
|
|
201
|
+
// Generation can leave saved includes even when a later PUT/unlock/activation fails.
|
|
202
|
+
if (!dryRun)
|
|
203
|
+
invalidateWrittenObject();
|
|
204
|
+
}
|
|
228
205
|
// MCP result-code mapping via the exported helper — see
|
|
229
206
|
// `isRapGenerateResultSuccess` for the success/error contract (Codex review on PR #260, P1).
|
|
230
207
|
// The structured JSON is preserved in both branches so the caller can still see what
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rap.js","sourceRoot":"","sources":["../../../src/handlers/write/rap.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"rap.js","sourceRoot":"","sources":["../../../src/handlers/write/rap.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/** SAPWrite action for surgical FORM/MODULE replacement in PROG and INCL sources. */
|
|
1
|
+
/** SAPWrite action for surgical FORM/MODULE replacement and insertion in PROG and INCL sources. */
|
|
2
2
|
import { type ToolResult } from '../shared.js';
|
|
3
3
|
import type { SapWriteContext } from './context.js';
|
|
4
|
-
export declare function
|
|
4
|
+
export declare function writeActionUnit(ctx: SapWriteContext): Promise<ToolResult>;
|
|
5
5
|
//# sourceMappingURL=unit-surgery.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unit-surgery.d.ts","sourceRoot":"","sources":["../../../src/handlers/write/unit-surgery.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"unit-surgery.d.ts","sourceRoot":"","sources":["../../../src/handlers/write/unit-surgery.ts"],"names":[],"mappings":"AAAA,mGAAmG;AAQnG,OAAO,EAAe,KAAK,UAAU,EAAc,MAAM,cAAc,CAAC;AAExE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,wBAAsB,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CAsF/E"}
|
|
@@ -1,21 +1,24 @@
|
|
|
1
|
-
/** SAPWrite action for surgical FORM/MODULE replacement in PROG and INCL sources. */
|
|
1
|
+
/** SAPWrite action for surgical FORM/MODULE replacement and insertion in PROG and INCL sources. */
|
|
2
2
|
import { lockObject, unlockObject, updateSource } from '../../adt/crud.js';
|
|
3
3
|
import { ABAPLINT_MAX_RELEASE, mapSapReleaseToAbaplintVersion } from '../../adt/features.js';
|
|
4
4
|
import { checkOperation, OperationType } from '../../adt/safety.js';
|
|
5
|
-
import {
|
|
5
|
+
import { assertSourceHash } from '../../adt/source-precondition.js';
|
|
6
|
+
import { insertUnit, spliceUnit } from '../../context/unit-surgery.js';
|
|
6
7
|
import { getCachedFeatures } from '../feature-cache.js';
|
|
7
8
|
import { errorResult, textResult } from '../shared.js';
|
|
8
9
|
import { runPreWriteLint, runPreWriteSyntaxCheck } from '../write-helpers.js';
|
|
9
|
-
export async function
|
|
10
|
+
export async function writeActionUnit(ctx) {
|
|
10
11
|
const { client, args, config, type, name, source, transport, lintOverride, checkOverride, objectUrl, srcUrl, invalidateWrittenObject, enforcePackageForExistingObject, } = ctx;
|
|
12
|
+
const action = String(args.action);
|
|
13
|
+
const adding = action === 'add_unit';
|
|
11
14
|
const unit = String(args.unit ?? '').trim();
|
|
12
15
|
if (!unit)
|
|
13
|
-
return errorResult(
|
|
16
|
+
return errorResult(`"unit" is required for ${action} action.`);
|
|
14
17
|
if (!source.trim()) {
|
|
15
|
-
return errorResult(
|
|
18
|
+
return errorResult(`"source" (complete FORM...ENDFORM or MODULE...ENDMODULE block) is required for ${action}.`);
|
|
16
19
|
}
|
|
17
20
|
if (type !== 'PROG' && type !== 'INCL') {
|
|
18
|
-
return errorResult(
|
|
21
|
+
return errorResult(`${action} is only supported for type=PROG or type=INCL.`);
|
|
19
22
|
}
|
|
20
23
|
checkOperation(client.safety, OperationType.Update, 'EditUnit');
|
|
21
24
|
await enforcePackageForExistingObject();
|
|
@@ -32,7 +35,10 @@ export async function writeActionEditUnit(ctx) {
|
|
|
32
35
|
// Omit version: SAP returns the editable draft, or active source when no draft exists.
|
|
33
36
|
// Read after locking, without source or inactive-list caches.
|
|
34
37
|
const currentSource = (await session.get(srcUrl, { 'Cache-Control': 'no-cache' })).body;
|
|
35
|
-
|
|
38
|
+
assertSourceHash(currentSource, args.expectedSourceHash, srcUrl);
|
|
39
|
+
const spliced = adding
|
|
40
|
+
? insertUnit(currentSource, name, unit, source, abaplintVersion)
|
|
41
|
+
: spliceUnit(currentSource, name, unit, source, abaplintVersion);
|
|
36
42
|
if (!spliced.success)
|
|
37
43
|
return errorResult(spliced.error ?? `Failed to splice unit "${unit}" in ${name}.`);
|
|
38
44
|
const lint = runPreWriteLint(spliced.newSource, type, name, { ...config, abapRelease: release }, lintOverride);
|
|
@@ -46,7 +52,7 @@ export async function writeActionEditUnit(ctx) {
|
|
|
46
52
|
const activationHint = type === 'INCL' && group
|
|
47
53
|
? ` Activate this structural include with SAPActivate(type="INCL", name="${name}", group="${group}").`
|
|
48
54
|
: '';
|
|
49
|
-
const message = `Successfully updated ${kind} "${unit}" in ${type} ${name}.${activationHint}`;
|
|
55
|
+
const message = `Successfully ${adding ? 'added' : 'updated'} ${kind} "${unit}" in ${type} ${name}.${activationHint}`;
|
|
50
56
|
const extras = [lint.warnings, checkNotes].filter(Boolean).join('\n\n');
|
|
51
57
|
return extras ? textResult(`${message}\n\n${extras}`) : textResult(message);
|
|
52
58
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unit-surgery.js","sourceRoot":"","sources":["../../../src/handlers/write/unit-surgery.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"unit-surgery.js","sourceRoot":"","sources":["../../../src/handlers/write/unit-surgery.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-delete.d.ts","sourceRoot":"","sources":["../../../src/handlers/write/update-delete.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"update-delete.d.ts","sourceRoot":"","sources":["../../../src/handlers/write/update-delete.ts"],"names":[],"mappings":"AAAA;;GAEG;AAoBH,OAAO,EAAe,KAAK,UAAU,EAAc,MAAM,cAAc,CAAC;AASxE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAepD,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CA2JjF;AAED,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CA2DjF;AAED;;;;;4FAK4F;AAC5F,wBAAsB,0BAA0B,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CAgC1F"}
|