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.
Files changed (235) hide show
  1. package/dist/adt/abapgit.d.ts.map +1 -1
  2. package/dist/adt/abapgit.js +64 -7
  3. package/dist/adt/abapgit.js.map +1 -1
  4. package/dist/adt/aunit.js +4 -4
  5. package/dist/adt/aunit.js.map +1 -1
  6. package/dist/adt/class-structure.d.ts +4 -2
  7. package/dist/adt/class-structure.d.ts.map +1 -1
  8. package/dist/adt/class-structure.js +18 -9
  9. package/dist/adt/class-structure.js.map +1 -1
  10. package/dist/adt/client.d.ts +18 -52
  11. package/dist/adt/client.d.ts.map +1 -1
  12. package/dist/adt/client.js +69 -92
  13. package/dist/adt/client.js.map +1 -1
  14. package/dist/adt/config.d.ts +5 -0
  15. package/dist/adt/config.d.ts.map +1 -1
  16. package/dist/adt/config.js.map +1 -1
  17. package/dist/adt/crud.d.ts +3 -3
  18. package/dist/adt/crud.d.ts.map +1 -1
  19. package/dist/adt/crud.js +21 -6
  20. package/dist/adt/crud.js.map +1 -1
  21. package/dist/adt/data-source-policy.d.ts +20 -8
  22. package/dist/adt/data-source-policy.d.ts.map +1 -1
  23. package/dist/adt/data-source-policy.js +55 -109
  24. package/dist/adt/data-source-policy.js.map +1 -1
  25. package/dist/adt/ddic-xml.d.ts +9 -0
  26. package/dist/adt/ddic-xml.d.ts.map +1 -1
  27. package/dist/adt/ddic-xml.js +17 -3
  28. package/dist/adt/ddic-xml.js.map +1 -1
  29. package/dist/adt/devtools.js +3 -3
  30. package/dist/adt/devtools.js.map +1 -1
  31. package/dist/adt/diagnostics.js +4 -4
  32. package/dist/adt/diagnostics.js.map +1 -1
  33. package/dist/adt/enhancements.d.ts +7 -0
  34. package/dist/adt/enhancements.d.ts.map +1 -0
  35. package/dist/adt/enhancements.js +89 -0
  36. package/dist/adt/enhancements.js.map +1 -0
  37. package/dist/adt/errors.d.ts +19 -10
  38. package/dist/adt/errors.d.ts.map +1 -1
  39. package/dist/adt/errors.js +73 -53
  40. package/dist/adt/errors.js.map +1 -1
  41. package/dist/adt/fm-signature.d.ts +1 -1
  42. package/dist/adt/fm-signature.d.ts.map +1 -1
  43. package/dist/adt/fm-signature.js +9 -1
  44. package/dist/adt/fm-signature.js.map +1 -1
  45. package/dist/adt/http.d.ts +7 -27
  46. package/dist/adt/http.d.ts.map +1 -1
  47. package/dist/adt/http.js +23 -28
  48. package/dist/adt/http.js.map +1 -1
  49. package/dist/adt/internal-data-operations.d.ts +3 -2
  50. package/dist/adt/internal-data-operations.d.ts.map +1 -1
  51. package/dist/adt/internal-data-operations.js +8 -1
  52. package/dist/adt/internal-data-operations.js.map +1 -1
  53. package/dist/adt/lock-object.d.ts +92 -0
  54. package/dist/adt/lock-object.d.ts.map +1 -0
  55. package/dist/adt/lock-object.js +195 -0
  56. package/dist/adt/lock-object.js.map +1 -0
  57. package/dist/adt/rap-generate.d.ts +5 -1
  58. package/dist/adt/rap-generate.d.ts.map +1 -1
  59. package/dist/adt/rap-generate.js +112 -100
  60. package/dist/adt/rap-generate.js.map +1 -1
  61. package/dist/adt/server-driven.d.ts +42 -10
  62. package/dist/adt/server-driven.d.ts.map +1 -1
  63. package/dist/adt/server-driven.js +98 -18
  64. package/dist/adt/server-driven.js.map +1 -1
  65. package/dist/adt/source-precondition.d.ts +3 -0
  66. package/dist/adt/source-precondition.d.ts.map +1 -0
  67. package/dist/adt/source-precondition.js +12 -0
  68. package/dist/adt/source-precondition.js.map +1 -0
  69. package/dist/adt/text-search.js +5 -5
  70. package/dist/adt/text-search.js.map +1 -1
  71. package/dist/adt/transport.js +3 -3
  72. package/dist/adt/transport.js.map +1 -1
  73. package/dist/adt/types.d.ts +19 -1
  74. package/dist/adt/types.d.ts.map +1 -1
  75. package/dist/adt/user-agent.d.ts +4 -0
  76. package/dist/adt/user-agent.d.ts.map +1 -0
  77. package/dist/adt/user-agent.js +11 -0
  78. package/dist/adt/user-agent.js.map +1 -0
  79. package/dist/adt/xml-entities.d.ts +3 -0
  80. package/dist/adt/xml-entities.d.ts.map +1 -0
  81. package/dist/adt/xml-entities.js +19 -0
  82. package/dist/adt/xml-entities.js.map +1 -0
  83. package/dist/adt/xml-parser.d.ts +7 -30
  84. package/dist/adt/xml-parser.d.ts.map +1 -1
  85. package/dist/adt/xml-parser.js +25 -54
  86. package/dist/adt/xml-parser.js.map +1 -1
  87. package/dist/authz/policy.d.ts.map +1 -1
  88. package/dist/authz/policy.js +2 -0
  89. package/dist/authz/policy.js.map +1 -1
  90. package/dist/cache/caching-layer.d.ts.map +1 -1
  91. package/dist/cache/caching-layer.js +5 -10
  92. package/dist/cache/caching-layer.js.map +1 -1
  93. package/dist/cli.js +1 -1
  94. package/dist/cli.js.map +1 -1
  95. package/dist/context/grep.d.ts +14 -0
  96. package/dist/context/grep.d.ts.map +1 -1
  97. package/dist/context/grep.js +49 -0
  98. package/dist/context/grep.js.map +1 -1
  99. package/dist/context/unit-surgery.d.ts +3 -1
  100. package/dist/context/unit-surgery.d.ts.map +1 -1
  101. package/dist/context/unit-surgery.js +52 -5
  102. package/dist/context/unit-surgery.js.map +1 -1
  103. package/dist/handlers/activate.d.ts.map +1 -1
  104. package/dist/handlers/activate.js +7 -20
  105. package/dist/handlers/activate.js.map +1 -1
  106. package/dist/handlers/diagnose.d.ts.map +1 -1
  107. package/dist/handlers/diagnose.js +8 -29
  108. package/dist/handlers/diagnose.js.map +1 -1
  109. package/dist/handlers/dispatch.d.ts.map +1 -1
  110. package/dist/handlers/dispatch.js +20 -4
  111. package/dist/handlers/dispatch.js.map +1 -1
  112. package/dist/handlers/editable-source.d.ts +6 -0
  113. package/dist/handlers/editable-source.d.ts.map +1 -0
  114. package/dist/handlers/editable-source.js +53 -0
  115. package/dist/handlers/editable-source.js.map +1 -0
  116. package/dist/handlers/feature-cache.d.ts +2 -0
  117. package/dist/handlers/feature-cache.d.ts.map +1 -1
  118. package/dist/handlers/feature-cache.js +8 -0
  119. package/dist/handlers/feature-cache.js.map +1 -1
  120. package/dist/handlers/hyperfocused.js +1 -1
  121. package/dist/handlers/hyperfocused.js.map +1 -1
  122. package/dist/handlers/lint.js +1 -1
  123. package/dist/handlers/lint.js.map +1 -1
  124. package/dist/handlers/object-types.d.ts +2 -3
  125. package/dist/handlers/object-types.d.ts.map +1 -1
  126. package/dist/handlers/object-types.js +13 -5
  127. package/dist/handlers/object-types.js.map +1 -1
  128. package/dist/handlers/read.d.ts.map +1 -1
  129. package/dist/handlers/read.js +38 -7
  130. package/dist/handlers/read.js.map +1 -1
  131. package/dist/handlers/schemas.d.ts +39 -0
  132. package/dist/handlers/schemas.d.ts.map +1 -1
  133. package/dist/handlers/schemas.js +50 -7
  134. package/dist/handlers/schemas.js.map +1 -1
  135. package/dist/handlers/syntax.d.ts +5 -0
  136. package/dist/handlers/syntax.d.ts.map +1 -0
  137. package/dist/handlers/syntax.js +35 -0
  138. package/dist/handlers/syntax.js.map +1 -0
  139. package/dist/handlers/tool-descriptions.d.ts.map +1 -1
  140. package/dist/handlers/tool-descriptions.js +7 -5
  141. package/dist/handlers/tool-descriptions.js.map +1 -1
  142. package/dist/handlers/tool-registry.d.ts +4 -4
  143. package/dist/handlers/tool-registry.d.ts.map +1 -1
  144. package/dist/handlers/tool-registry.js +4 -0
  145. package/dist/handlers/tool-registry.js.map +1 -1
  146. package/dist/handlers/tools.d.ts +1 -16
  147. package/dist/handlers/tools.d.ts.map +1 -1
  148. package/dist/handlers/tools.js +40 -51
  149. package/dist/handlers/tools.js.map +1 -1
  150. package/dist/handlers/transport.d.ts.map +1 -1
  151. package/dist/handlers/transport.js +17 -3
  152. package/dist/handlers/transport.js.map +1 -1
  153. package/dist/handlers/where-used.d.ts.map +1 -1
  154. package/dist/handlers/where-used.js +0 -5
  155. package/dist/handlers/where-used.js.map +1 -1
  156. package/dist/handlers/write/class-edit.d.ts +16 -0
  157. package/dist/handlers/write/class-edit.d.ts.map +1 -0
  158. package/dist/handlers/write/class-edit.js +55 -0
  159. package/dist/handlers/write/class-edit.js.map +1 -0
  160. package/dist/handlers/write/class-surgery.d.ts +2 -2
  161. package/dist/handlers/write/class-surgery.d.ts.map +1 -1
  162. package/dist/handlers/write/class-surgery.js +189 -220
  163. package/dist/handlers/write/class-surgery.js.map +1 -1
  164. package/dist/handlers/write/context.d.ts +1 -8
  165. package/dist/handlers/write/context.d.ts.map +1 -1
  166. package/dist/handlers/write/create.d.ts.map +1 -1
  167. package/dist/handlers/write/create.js +11 -4
  168. package/dist/handlers/write/create.js.map +1 -1
  169. package/dist/handlers/write/metadata-update.d.ts +4 -0
  170. package/dist/handlers/write/metadata-update.d.ts.map +1 -0
  171. package/dist/handlers/write/metadata-update.js +58 -0
  172. package/dist/handlers/write/metadata-update.js.map +1 -0
  173. package/dist/handlers/write/rap.d.ts.map +1 -1
  174. package/dist/handlers/write/rap.js +132 -155
  175. package/dist/handlers/write/rap.js.map +1 -1
  176. package/dist/handlers/write/unit-surgery.d.ts +2 -2
  177. package/dist/handlers/write/unit-surgery.d.ts.map +1 -1
  178. package/dist/handlers/write/unit-surgery.js +14 -8
  179. package/dist/handlers/write/unit-surgery.js.map +1 -1
  180. package/dist/handlers/write/update-delete.d.ts.map +1 -1
  181. package/dist/handlers/write/update-delete.js +34 -82
  182. package/dist/handlers/write/update-delete.js.map +1 -1
  183. package/dist/handlers/write-helpers.d.ts +3 -2
  184. package/dist/handlers/write-helpers.d.ts.map +1 -1
  185. package/dist/handlers/write-helpers.js +118 -15
  186. package/dist/handlers/write-helpers.js.map +1 -1
  187. package/dist/handlers/write.d.ts.map +1 -1
  188. package/dist/handlers/write.js +12 -27
  189. package/dist/handlers/write.js.map +1 -1
  190. package/dist/public/read-only-client.d.ts +6 -0
  191. package/dist/public/read-only-client.d.ts.map +1 -0
  192. package/dist/public/read-only-client.js +66 -0
  193. package/dist/public/read-only-client.js.map +1 -0
  194. package/dist/public/types.d.ts +2 -13
  195. package/dist/public/types.d.ts.map +1 -1
  196. package/dist/server/audit.d.ts +6 -1
  197. package/dist/server/audit.d.ts.map +1 -1
  198. package/dist/server/audit.js.map +1 -1
  199. package/dist/server/config.d.ts.map +1 -1
  200. package/dist/server/config.js +3 -0
  201. package/dist/server/config.js.map +1 -1
  202. package/dist/server/deny-actions.d.ts +2 -1
  203. package/dist/server/deny-actions.d.ts.map +1 -1
  204. package/dist/server/deny-actions.js +13 -2
  205. package/dist/server/deny-actions.js.map +1 -1
  206. package/dist/server/logger.d.ts +3 -3
  207. package/dist/server/logger.d.ts.map +1 -1
  208. package/dist/server/logger.js +7 -7
  209. package/dist/server/logger.js.map +1 -1
  210. package/dist/server/multi-target-basic-auth.d.ts.map +1 -1
  211. package/dist/server/multi-target-basic-auth.js +1 -0
  212. package/dist/server/multi-target-basic-auth.js.map +1 -1
  213. package/dist/server/multi-target-runtime.d.ts.map +1 -1
  214. package/dist/server/multi-target-runtime.js +1 -0
  215. package/dist/server/multi-target-runtime.js.map +1 -1
  216. package/dist/server/plugin-loader.d.ts.map +1 -1
  217. package/dist/server/plugin-loader.js +1 -3
  218. package/dist/server/plugin-loader.js.map +1 -1
  219. package/dist/server/safe-http-client.d.ts +6 -12
  220. package/dist/server/safe-http-client.d.ts.map +1 -1
  221. package/dist/server/safe-http-client.js +28 -63
  222. package/dist/server/safe-http-client.js.map +1 -1
  223. package/dist/server/server.d.ts +5 -4
  224. package/dist/server/server.d.ts.map +1 -1
  225. package/dist/server/server.js +30 -23
  226. package/dist/server/server.js.map +1 -1
  227. package/dist/server/types.d.ts +1 -0
  228. package/dist/server/types.d.ts.map +1 -1
  229. package/dist/server/types.js +2 -0
  230. package/dist/server/types.js.map +1 -1
  231. package/dist/version.d.ts +3 -0
  232. package/dist/version.d.ts.map +1 -0
  233. package/dist/version.js +3 -0
  234. package/dist/version.js.map +1 -0
  235. package/package.json +7 -7
@@ -1,23 +1,24 @@
1
1
  /**
2
2
  * SAPWrite actions — class-section surgery (issue #303).
3
3
  *
4
- * These actions share a common shape: fetch objectstructure → optional diff/refuse → splice into
5
- * /source/main (or /includes/<inc> when include= is set) → PUT under lock → no auto-activate.
4
+ * These actions share a common shape: lock → fresh source/structure → optional diff/refuse → splice into
5
+ * /source/main (or /includes/<inc> when include= is set) → PUT → unlock, with no auto-activation.
6
6
  * Pre-write lint runs on the SPLICED FULL source (not the partial input fragment) because a raw
7
7
  * DEFINITION block alone fails abaplint with "Expected CLASSIMPLEMENTATION" (verified live on a4h);
8
8
  * lint is skipped for include= writes (same precedent as the `update include=` path).
9
9
  */
10
- import { diffMethodSets, extractMethodNameFromClause, findSectionAnchor, insertMethodPair, moveMethodDefinition, removeMethodPair, spliceClassDefinition, spliceMethodSignature, } from '../../adt/class-structure.js';
11
- import { safeUpdateClassInclude, safeUpdateSource } from '../../adt/crud.js';
10
+ import { diffMethodSets, extractMethodNameFromClause, findSectionAnchor, insertMethodPair, isMethodRedefinition, moveMethodDefinition, removeMethodPair, spliceClassDefinition, spliceMethodSignature, } from '../../adt/class-structure.js';
11
+ import { safeUpdateClassInclude } from '../../adt/crud.js';
12
+ import { isNotFoundError } from '../../adt/errors.js';
12
13
  import { mapSapReleaseToAbaplintVersion } from '../../adt/features.js';
13
14
  import { spliceMethod } from '../../context/method-surgery.js';
14
15
  import { getCachedFeatures } from '../feature-cache.js';
15
- import { CLASS_WRITE_INCLUDES, classIncludeUrl, detectLocalHandlerInclude, stripIncludeHeader, } from '../object-types.js';
16
- import { resolveVersionAndDraftInfo } from '../read.js';
16
+ import { CLASS_WRITE_INCLUDES, classIncludeUrl, detectLocalHandlerInclude, } from '../object-types.js';
17
17
  import { errorResult, textResult } from '../shared.js';
18
18
  import { runPreWriteLint, runPreWriteSyntaxCheck } from '../write-helpers.js';
19
+ import { withClassEdit } from './class-edit.js';
19
20
  export async function writeActionEditMethod(ctx) {
20
- const { client, args, config, cachingLayer, cacheSecurity, type, name, source, include, transport, lintOverride, checkOverride, objectUrl, srcUrl, invalidateWrittenObject, enforcePackageForExistingObject, } = ctx;
21
+ const { client, args, config, type, name, source, include, lintOverride, checkOverride, objectUrl, srcUrl, enforcePackageForExistingObject, } = ctx;
21
22
  const method = String(args.method ?? '');
22
23
  if (!method)
23
24
  return errorResult('"method" is required for edit_method action.');
@@ -41,83 +42,58 @@ export async function writeActionEditMethod(ctx) {
41
42
  }
42
43
  const detectedInclude = include ? undefined : detectLocalHandlerInclude(method);
43
44
  const resolvedInclude = include ?? detectedInclude;
44
- // Fetch the source that contains the method.
45
- // Note: include reads bypass the source cache because the cache key is
46
- // `(type, name, active|inactive)` and does not differentiate by include.
47
- // Mixing MAIN and CCIMP bytes under the same key would silently corrupt
48
- // subsequent reads. Future enhancement: extend cache key with include.
49
- let currentSource;
50
- if (resolvedInclude) {
51
- // **Draft-aware include reads (PR-D review fix, P1).**
52
- // After `SAPWrite update include=...` or `scaffold_rap_handlers`, the
53
- // edited CCDEF/CCIMP lives as an inactive draft; the active include
54
- // is often still the empty placeholder. Reading "active" here would
55
- // splice against stale content (and frequently "method not found").
56
- // Use the standard inactive-list lookup to pick the right version —
57
- // same auto-resolution semantics SAPRead exposes via `version='auto'`.
58
- const { effectiveVersion } = await resolveVersionAndDraftInfo(client, cachingLayer, 'CLAS', name, 'auto', cacheSecurity);
59
- const fetched = await client.getClass(name, resolvedInclude, { version: effectiveVersion });
60
- currentSource = stripIncludeHeader(fetched.source);
61
- // If the include itself has no draft (only MAIN does), SAP returns the
62
- // active include body for `?version=inactive`. That's correct — we
63
- // splice whatever the editor would see. If the include source isn't
64
- // available at all (response contains the "not available" placeholder
65
- // injected by client.getClass on 404), splice will surface a clean
66
- // "method not found" with the include name.
67
- }
68
- else {
69
- currentSource = cachingLayer
70
- ? (await cachingLayer.getSource('CLAS', name, (ifNoneMatch) => client.getClass(name, undefined, { ifNoneMatch })))
71
- .source
72
- : (await client.getClass(name)).source;
73
- }
74
- // Use detected ABAP version from probe if available
75
- const probedAbapRelease = getCachedFeatures()?.abapRelease;
76
- const abaplintVer = probedAbapRelease ? mapSapReleaseToAbaplintVersion(probedAbapRelease) : undefined;
77
- // Splice in the new method body
78
- const spliced = spliceMethod(currentSource, name, method, source, abaplintVer);
79
- if (!spliced.success) {
80
- // Augment the error with which include was searched, so the LLM can
81
- // either correct the method specifier or override include= explicitly.
82
- const where = resolvedInclude ? `include "${resolvedInclude}"` : 'main source';
83
- const baseError = spliced.error ?? `Failed to splice method "${method}" in ${name}.`;
84
- const hint = detectedInclude ? ` (auto-routed via "${method}" prefix; pass include= explicitly to override).` : '';
85
- return errorResult(`${baseError} Searched ${where} of ${name}.${hint}`);
86
- }
87
- // Pre-write lint + server-side syntax check on the spliced source.
88
- //
89
- // Skip BOTH for include= writes. abaplint cannot parse a CCIMP/CCDEF
90
- // fragment as a complete class (the DEFINITION/IMPLEMENTATION halves
91
- // live in different files), so it would block legitimate writes with
92
- // "Expected CLASSDEFINITION" errors. The existing `case 'update'` include=
93
- // path also bypasses these checks for the same reason — keep parity.
94
- // The full-class activation pass after the write is the authoritative
95
- // syntax check.
96
- let lintWarnings = { blocked: false };
97
- let checkNotes = '';
98
- if (!resolvedInclude) {
99
- lintWarnings = runPreWriteLint(spliced.newSource, type, name, config, lintOverride);
100
- if (lintWarnings.blocked)
101
- return lintWarnings.result;
102
- checkNotes = await runPreWriteSyntaxCheck(client, type, spliced.newSource, objectUrl, config, checkOverride);
103
- }
104
- // Write the full source back. Include writes use the class-include helper so
105
- // a missing CCAU/CCDEF/CCIMP/CCMAC include is initialised under the same lock
106
- // before the content PUT.
107
- if (resolvedInclude) {
108
- await safeUpdateClassInclude(client.http, client.safety, objectUrl, classIncludeUrl(name, resolvedInclude), spliced.newSource, transport, getCachedFeatures()?.abapRelease);
109
- }
110
- else {
111
- await safeUpdateSource(client.http, client.safety, objectUrl, srcUrl, spliced.newSource, transport, getCachedFeatures()?.abapRelease);
112
- }
113
- invalidateWrittenObject(type, name);
114
- const where = resolvedInclude ? ` (include: ${resolvedInclude})` : '';
115
- const msg = `Successfully updated method "${method}" in ${type} ${name}${where}.`;
116
- const extras = [lintWarnings.warnings, checkNotes].filter(Boolean).join('\n\n');
117
- return extras ? textResult(`${msg}\n\n${extras}`) : textResult(msg);
45
+ return withClassEdit(ctx, async (edit) => {
46
+ const writeUrl = resolvedInclude ? classIncludeUrl(name, resolvedInclude) : srcUrl;
47
+ let currentSource;
48
+ try {
49
+ currentSource = await edit.read(writeUrl);
50
+ }
51
+ catch (error) {
52
+ if (!resolvedInclude || !isNotFoundError(error))
53
+ throw error;
54
+ return errorResult(`Include "${resolvedInclude}" does not exist in ${name}. Create it with SAPWrite(action="update", type="CLAS", name="${name}", include="${resolvedInclude}", source=...) before editing a method in it.`);
55
+ }
56
+ // Use detected ABAP version from probe if available
57
+ const probedAbapRelease = getCachedFeatures()?.abapRelease;
58
+ const abaplintVer = probedAbapRelease ? mapSapReleaseToAbaplintVersion(probedAbapRelease) : undefined;
59
+ // Splice in the new method body
60
+ const spliced = spliceMethod(currentSource, name, method, source, abaplintVer);
61
+ if (!spliced.success) {
62
+ // Augment the error with which include was searched, so the LLM can
63
+ // either correct the method specifier or override include= explicitly.
64
+ const where = resolvedInclude ? `include "${resolvedInclude}"` : 'main source';
65
+ const baseError = spliced.error ?? `Failed to splice method "${method}" in ${name}.`;
66
+ const hint = detectedInclude
67
+ ? ` (auto-routed via "${method}" prefix; pass include= explicitly to override).`
68
+ : '';
69
+ return errorResult(`${baseError} Searched ${where} of ${name}.${hint}`);
70
+ }
71
+ // Pre-write lint + server-side syntax check on the spliced source.
72
+ //
73
+ // Skip BOTH for include= writes. abaplint cannot parse a CCIMP/CCDEF
74
+ // fragment as a complete class (the DEFINITION/IMPLEMENTATION halves
75
+ // live in different files), so it would block legitimate writes with
76
+ // "Expected CLASSDEFINITION" errors. The existing `case 'update'` include=
77
+ // path also bypasses these checks for the same reason — keep parity.
78
+ // The full-class activation pass after the write is the authoritative
79
+ // syntax check.
80
+ let lintWarnings = { blocked: false };
81
+ let checkNotes = '';
82
+ if (!resolvedInclude) {
83
+ lintWarnings = runPreWriteLint(spliced.newSource, type, name, config, lintOverride);
84
+ if (lintWarnings.blocked)
85
+ return lintWarnings.result;
86
+ checkNotes = await runPreWriteSyntaxCheck({ http: edit.http, safety: client.safety }, type, spliced.newSource, objectUrl, config, checkOverride);
87
+ }
88
+ await edit.save(writeUrl, spliced.newSource);
89
+ const where = resolvedInclude ? ` (include: ${resolvedInclude})` : '';
90
+ const msg = `Successfully updated method "${method}" in ${type} ${name}${where}.`;
91
+ const extras = [lintWarnings.warnings, checkNotes].filter(Boolean).join('\n\n');
92
+ return extras ? textResult(`${msg}\n\n${extras}`) : textResult(msg);
93
+ });
118
94
  }
119
95
  export async function writeActionEditClassDefinition(ctx) {
120
- const { client, args, config, type, name, source, hasSource, include, includeProvided, transport, lintOverride, objectUrl, srcUrl, invalidateWrittenObject, enforcePackageForExistingObject, fetchClassStructureAndMain, } = ctx;
96
+ const { client, args, config, type, name, source, hasSource, include, includeProvided, transport, lintOverride, objectUrl, srcUrl, invalidateWrittenObject, enforcePackageForExistingObject, } = ctx;
121
97
  if (type !== 'CLAS')
122
98
  return errorResult('edit_class_definition is only supported for type=CLAS.');
123
99
  if (!hasSource)
@@ -126,21 +102,16 @@ export async function writeActionEditClassDefinition(ctx) {
126
102
  return errorResult(`Invalid CLAS include "${String(args.include)}". Valid values: ${CLASS_WRITE_INCLUDES.join(', ')}.`);
127
103
  }
128
104
  await enforcePackageForExistingObject();
129
- const writeUrl = include ? classIncludeUrl(name, include) : srcUrl;
130
- let spliced;
131
105
  if (include) {
132
- // include= path: whole-replace the local include (CCDEF/CCIMP/macros/
133
- // testclasses). The structure-based diff/refuse doesn't apply — the
134
- // /objectstructure endpoint reports the GLOBAL class, not the local
135
- // include's split DEFINITION/IMPLEMENTATION halves. SAP activation is the
136
- // validator here (same precedent as `update include=`). No structure or
137
- // source fetch is needed: the caller's `source` IS the new include body.
138
- spliced = source.endsWith('\n') ? source : `${source}\n`;
139
- }
140
- else {
141
- // MAIN path: fetch structure + source at the same effective version so
142
- // the spliced line ranges align with the bytes being edited.
143
- const { structure, main } = await fetchClassStructureAndMain(name);
106
+ // Whole include replacement has no read/modify race; retain missing-include initialization.
107
+ const spliced = source.endsWith('\n') ? source : `${source}\n`;
108
+ const initialized = await safeUpdateClassInclude(client.http, client.safety, objectUrl, classIncludeUrl(name, include), spliced, transport, getCachedFeatures()?.abapRelease, args.expectedSourceHash);
109
+ invalidateWrittenObject(type, name);
110
+ const initNote = initialized.initialized ? ` Initialised the ${include} include first.` : '';
111
+ return textResult(`Successfully updated include ${include} of ${type} ${name}.${initNote} Active version unchanged until activation; read with SAPRead(version="inactive") to verify, then SAPActivate.`);
112
+ }
113
+ return withClassEdit(ctx, async (edit) => {
114
+ const { structure, main } = await edit.readMainAndStructure();
144
115
  // Refuse-policy: compute the method-set diff against the NEW DEFINITION.
145
116
  const diff = diffMethodSets(structure, source);
146
117
  const missingImpls = [];
@@ -149,13 +120,8 @@ export async function writeActionEditClassDefinition(ctx) {
149
120
  // Exempt declarations that never have a METHOD…ENDMETHOD body.
150
121
  if (add.isAbstract || add.isEvent || add.isInterface || add.isAlias)
151
122
  continue;
152
- // Does IMPLEMENTATION already have a METHOD <name> header? Match the
153
- // method name followed by a word-boundary so AMDP / event-handler /
154
- // multi-line headers (`METHOD x BY DATABASE PROCEDURE…`, `METHOD x FOR
155
- // EVENT…`, `METHOD x\n IMPORTING…`) are recognized — NOT only the bare
156
- // `METHOD x.` form. \b after the name prevents matching a longer name
157
- // with the same prefix (METHOD x_helper for added X).
158
- const re = new RegExp(`^\\s*METHOD\\s+${add.name}\\b`, 'im');
123
+ // Match a complete method name, including AMDP / event-handler headers.
124
+ const re = new RegExp(`^[ \\t]*METHOD\\s+${add.name}(?=\\s|\\.)`, 'im');
159
125
  if (!re.test(main))
160
126
  missingImpls.push(add.name);
161
127
  }
@@ -175,28 +141,16 @@ export async function writeActionEditClassDefinition(ctx) {
175
141
  }
176
142
  return errorResult(parts.join('\n\n'));
177
143
  }
178
- spliced = spliceClassDefinition(main, structure, source);
179
- }
180
- // Pre-write lint on the spliced full source (MAIN path only — include=
181
- // fragments can't be lint-parsed standalone).
182
- if (!include) {
144
+ const spliced = spliceClassDefinition(main, structure, source);
183
145
  const lintWarnings = runPreWriteLint(spliced, type, name, config, lintOverride);
184
146
  if (lintWarnings.blocked)
185
147
  return lintWarnings.result;
186
- }
187
- const includeInit = include
188
- ? await safeUpdateClassInclude(client.http, client.safety, objectUrl, writeUrl, spliced, transport, getCachedFeatures()?.abapRelease)
189
- : undefined;
190
- if (!include) {
191
- await safeUpdateSource(client.http, client.safety, objectUrl, writeUrl, spliced, transport, getCachedFeatures()?.abapRelease);
192
- }
193
- invalidateWrittenObject(type, name);
194
- const initNote = includeInit?.initialized ? ` Initialised the ${include} include first.` : '';
195
- const targetLabel = include ? `include ${include} of ${type} ${name}` : `DEFINITION of ${type} ${name}`;
196
- return textResult(`Successfully updated ${targetLabel}.${initNote} Active version unchanged until activation; read with SAPRead(version="inactive") to verify, then SAPActivate.`);
148
+ await edit.save(srcUrl, spliced);
149
+ return textResult(`Successfully updated DEFINITION of ${type} ${name}. Active version unchanged until activation; read with SAPRead(version="inactive") to verify, then SAPActivate.`);
150
+ });
197
151
  }
198
152
  export async function writeActionEditMethodSignature(ctx) {
199
- const { client, args, type, name, source, hasSource, includeProvided, transport, objectUrl, srcUrl, invalidateWrittenObject, enforcePackageForExistingObject, fetchClassStructureAndMain, } = ctx;
153
+ const { args, type, name, source, hasSource, includeProvided, srcUrl, enforcePackageForExistingObject } = ctx;
200
154
  if (type !== 'CLAS')
201
155
  return errorResult('edit_method_signature is only supported for type=CLAS.');
202
156
  const methodSpecifier = String(args.method ?? '').trim();
@@ -213,28 +167,29 @@ export async function writeActionEditMethodSignature(ctx) {
213
167
  return errorResult('edit_method_signature targets the global class DEFINITION (/source/main). For local-class (CCDEF) signatures, use edit_class_definition with include=definitions.');
214
168
  }
215
169
  await enforcePackageForExistingObject();
216
- const { structure, main } = await fetchClassStructureAndMain(name);
217
- const upperName = methodSpecifier.toUpperCase();
218
- const method = structure.methods.find((m) => m.name === upperName);
219
- if (!method) {
220
- const available = structure.methods.map((m) => m.name).join(', ');
221
- const hint = methodSpecifier.includes('~')
222
- ? ' Interface-qualified names (e.g. "zif_x~m") are not addressable here — objectstructure lists the implementing method under its bare name; for interface/local-handler bodies use edit_method.'
223
- : '';
224
- return errorResult(`Method "${methodSpecifier}" not found in CLAS ${name}. Available methods: ${available || '(none)'}.${hint}`);
225
- }
226
- const spliced = spliceMethodSignature(main, method, source);
227
- // No pre-write lint: edit_method_signature changes ONLY the declaration; the
228
- // method body still references the old signature until the caller follows up
229
- // with edit_method. Linting the spliced full source here would flag legitimate
230
- // in-progress renames (e.g. "param `name` not declared"). SAP activation is the
231
- // authoritative check — same rationale as the include= lint skip on edit_method.
232
- await safeUpdateSource(client.http, client.safety, objectUrl, srcUrl, spliced, transport, getCachedFeatures()?.abapRelease);
233
- invalidateWrittenObject(type, name);
234
- return textResult(`Successfully updated signature of method "${method.name}" in ${type} ${name}. Active version unchanged until activation; if the body still references the old signature, follow up with edit_method, then SAPActivate.`);
170
+ return withClassEdit(ctx, async (edit) => {
171
+ const { structure, main } = await edit.readMainAndStructure();
172
+ const upperName = methodSpecifier.toUpperCase();
173
+ const method = structure.methods.find((m) => m.name === upperName);
174
+ if (!method) {
175
+ const available = structure.methods.map((m) => m.name).join(', ');
176
+ const hint = methodSpecifier.includes('~')
177
+ ? ' Methods supplied by INTERFACES have no separate METHODS declaration here. Change their signature in the interface; use edit_method for an existing body.'
178
+ : '';
179
+ return errorResult(`Method "${methodSpecifier}" not found in CLAS ${name}. Available methods: ${available || '(none)'}.${hint}`);
180
+ }
181
+ const spliced = spliceMethodSignature(main, method, source);
182
+ // No pre-write lint: edit_method_signature changes ONLY the declaration; the
183
+ // method body still references the old signature until the caller follows up
184
+ // with edit_method. Linting the spliced full source here would flag legitimate
185
+ // in-progress renames (e.g. "param `name` not declared"). SAP activation is the
186
+ // authoritative check — same rationale as the include= lint skip on edit_method.
187
+ await edit.save(srcUrl, spliced);
188
+ return textResult(`Successfully updated signature of method "${method.name}" in ${type} ${name}. Active version unchanged until activation; if the body still references the old signature, follow up with edit_method, then SAPActivate.`);
189
+ });
235
190
  }
236
191
  export async function writeActionAddMethod(ctx) {
237
- const { client, args, config, type, name, includeProvided, transport, lintOverride, objectUrl, srcUrl, invalidateWrittenObject, enforcePackageForExistingObject, fetchClassStructureAndMain, } = ctx;
192
+ const { args, config, type, name, includeProvided, lintOverride, srcUrl, enforcePackageForExistingObject } = ctx;
238
193
  if (type !== 'CLAS')
239
194
  return errorResult('add_method is only supported for type=CLAS.');
240
195
  const clause = String(args.method ?? '');
@@ -245,13 +200,14 @@ export async function writeActionAddMethod(ctx) {
245
200
  if (!methodName) {
246
201
  return errorResult('Could not extract method name from the METHODS clause. Provide a clause starting with "METHODS <name>" or "CLASS-METHODS <name>".');
247
202
  }
248
- // Interface-qualified names (lhc_x~y, zif_x~m) can't be added to a global
249
- // class's DEFINITION/IMPLEMENTATION — `~` is interface-method scope and would
250
- // produce invalid ABAP in the METHOD stub. Reject with a clear pointer.
251
- if (methodName.includes('~')) {
252
- return errorResult(`add_method cannot add the interface-qualified method "${methodName}" to a global class. Implement the interface via "INTERFACES <name>." in the DEFINITION (use edit_class_definition), then provide the body with edit_method.`);
203
+ // New interface methods belong to INTERFACES; inherited ones can be redefined.
204
+ if (methodName.includes('~') && (!isMethodRedefinition(clause) || args.abstract === true)) {
205
+ return errorResult(`To add the inherited interface-qualified method "${methodName}", use "METHODS <name> REDEFINITION." with visibility="public" and without abstract=true. Methods of an interface this class implements itself are declared by "INTERFACES <name>."; add their bodies with SAPWrite(action="update"), preserving the full source. edit_method only replaces an existing body.`);
253
206
  }
254
207
  const visibility = args.visibility ?? 'public';
208
+ if (methodName.includes('~') && visibility !== 'public') {
209
+ return errorResult('Interface method redefinitions must keep public visibility. Use visibility="public".');
210
+ }
255
211
  const isAbstract = args.abstract === true;
256
212
  // MAIN-only action: include= is rejected at the schema layer (not in
257
213
  // SAPWRITE_INCLUDE_AWARE_ACTIONS). Defensive guard for direct CLI calls.
@@ -259,38 +215,43 @@ export async function writeActionAddMethod(ctx) {
259
215
  return errorResult('add_method targets the global class DEFINITION (/source/main). For local-class (CCDEF) method additions, use edit_class_definition with include=definitions.');
260
216
  }
261
217
  await enforcePackageForExistingObject();
262
- const { structure, main } = await fetchClassStructureAndMain(name);
263
- // Refuse if method already exists (would silently duplicate).
264
- if (structure.methods.some((m) => m.name === methodName)) {
265
- return errorResult(`Method "${methodName}" already exists in CLAS ${name}. Use SAPWrite(action="edit_method_signature", method="${methodName}", source="<new METHODS clause>") to change its signature.`);
266
- }
267
- // A concrete (non-abstract) method needs an IMPLEMENTATION block to receive
268
- // its METHOD…ENDMETHOD stub. A purely-abstract class has no IMPLEMENTATION
269
- // half, so inserting a concrete declaration there would leave it unimplemented.
270
- if (!isAbstract && !structure.classImplementationBlock) {
271
- return errorResult(`CLAS ${name} has no IMPLEMENTATION block (purely abstract class). Pass abstract=true to add an abstract method, or add the IMPLEMENTATION half first via edit_class_definition.`);
272
- }
273
- // Refuse with hint if the target visibility section header is missing.
274
- const anchor = findSectionAnchor(main, structure, visibility);
275
- if (!anchor) {
276
- return errorResult(`No ${visibility.toUpperCase()} SECTION exists in CLAS ${name}. Use SAPWrite(action="edit_class_definition") to add the section header first, then re-run add_method.`);
277
- }
278
- const spliced = insertMethodPair(main, structure, {
279
- decl: clause,
280
- visibility,
281
- methodName,
282
- isAbstract,
218
+ return withClassEdit(ctx, async (edit) => {
219
+ const { structure, main } = await edit.readMainAndStructure();
220
+ // Refuse if method already exists (would silently duplicate).
221
+ if (structure.methods.some((m) => m.name === methodName)) {
222
+ return errorResult(`Method "${methodName}" already exists in CLAS ${name}. Use SAPWrite(action="edit_method_signature", method="${methodName}", source="<new METHODS clause>") to change its signature.`);
223
+ }
224
+ // Bodies supplied by INTERFACES have no METHODS declaration range in objectstructure.
225
+ if (new RegExp(`^[ \\t]*METHOD\\s+${methodName}(?=\\s|\\.)`, 'im').test(main)) {
226
+ return errorResult(`CLAS ${name} already implements "${methodName}". Use SAPWrite(action="edit_method", method="${methodName}") to change its body.`);
227
+ }
228
+ // A concrete (non-abstract) method needs an IMPLEMENTATION block to receive
229
+ // its METHOD…ENDMETHOD stub. A purely-abstract class has no IMPLEMENTATION
230
+ // half, so inserting a concrete declaration there would leave it unimplemented.
231
+ if (!isAbstract && !structure.classImplementationBlock) {
232
+ return errorResult(`CLAS ${name} has no IMPLEMENTATION block (purely abstract class). Pass abstract=true to add an abstract method, or add the IMPLEMENTATION half first via edit_class_definition.`);
233
+ }
234
+ // Refuse with hint if the target visibility section header is missing.
235
+ const anchor = findSectionAnchor(main, structure, visibility);
236
+ if (!anchor) {
237
+ return errorResult(`No ${visibility.toUpperCase()} SECTION exists in CLAS ${name}. Use SAPWrite(action="edit_class_definition") to add the section header first, then re-run add_method.`);
238
+ }
239
+ const spliced = insertMethodPair(main, structure, {
240
+ decl: clause,
241
+ visibility,
242
+ methodName,
243
+ isAbstract,
244
+ });
245
+ const lintWarnings = runPreWriteLint(spliced, type, name, config, lintOverride);
246
+ if (lintWarnings.blocked)
247
+ return lintWarnings.result;
248
+ await edit.save(srcUrl, spliced);
249
+ const stubNote = isAbstract ? ' (abstract — no IMPL stub inserted)' : '';
250
+ return textResult(`Successfully added method "${methodName}" (${visibility}) to ${type} ${name}${stubNote}. Active version unchanged until activation; SAPActivate next.`);
283
251
  });
284
- const lintWarnings = runPreWriteLint(spliced, type, name, config, lintOverride);
285
- if (lintWarnings.blocked)
286
- return lintWarnings.result;
287
- await safeUpdateSource(client.http, client.safety, objectUrl, srcUrl, spliced, transport, getCachedFeatures()?.abapRelease);
288
- invalidateWrittenObject(type, name);
289
- const stubNote = isAbstract ? ' (abstract — no IMPL stub inserted)' : '';
290
- return textResult(`Successfully added method "${methodName}" (${visibility}) to ${type} ${name}${stubNote}. Active version unchanged until activation; SAPActivate next.`);
291
252
  }
292
253
  export async function writeActionDeleteMethod(ctx) {
293
- const { client, args, config, type, name, includeProvided, transport, lintOverride, objectUrl, srcUrl, invalidateWrittenObject, enforcePackageForExistingObject, fetchClassStructureAndMain, } = ctx;
254
+ const { args, config, type, name, includeProvided, lintOverride, srcUrl, enforcePackageForExistingObject } = ctx;
294
255
  if (type !== 'CLAS')
295
256
  return errorResult('delete_method is only supported for type=CLAS.');
296
257
  const methodSpecifier = String(args.method ?? '').trim();
@@ -303,27 +264,28 @@ export async function writeActionDeleteMethod(ctx) {
303
264
  return errorResult('delete_method targets the global class DEFINITION (/source/main). For local-class (CCDEF/CCIMP) method removal, use edit_class_definition with include=...');
304
265
  }
305
266
  await enforcePackageForExistingObject();
306
- const { structure, main } = await fetchClassStructureAndMain(name);
307
- const upperName = methodSpecifier.toUpperCase();
308
- const method = structure.methods.find((m) => m.name === upperName);
309
- if (!method) {
310
- const available = structure.methods.map((m) => m.name).join(', ');
311
- const hint = methodSpecifier.includes('~')
312
- ? ' Interface-qualified names (e.g. "zif_x~m") are not addressable here; objectstructure lists methods under their bare names.'
313
- : '';
314
- return errorResult(`Method "${methodSpecifier}" not found in CLAS ${name}. Available methods: ${available || '(none)'}.${hint}`);
315
- }
316
- const spliced = removeMethodPair(main, method);
317
- const lintWarnings = runPreWriteLint(spliced, type, name, config, lintOverride);
318
- if (lintWarnings.blocked)
319
- return lintWarnings.result;
320
- await safeUpdateSource(client.http, client.safety, objectUrl, srcUrl, spliced, transport, getCachedFeatures()?.abapRelease);
321
- invalidateWrittenObject(type, name);
322
- const where = method.implementation ? ' (DEFINITION + IMPLEMENTATION)' : ' (DEFINITION only — was ABSTRACT)';
323
- return textResult(`Successfully deleted method "${method.name}" from ${type} ${name}${where}. Active version unchanged until activation; SAPActivate next.`);
267
+ return withClassEdit(ctx, async (edit) => {
268
+ const { structure, main } = await edit.readMainAndStructure();
269
+ const upperName = methodSpecifier.toUpperCase();
270
+ const method = structure.methods.find((m) => m.name === upperName);
271
+ if (!method) {
272
+ const available = structure.methods.map((m) => m.name).join(', ');
273
+ const hint = methodSpecifier.includes('~')
274
+ ? ' Methods supplied by INTERFACES have no separate METHODS declaration to delete here; removing the interface requires a consistent full-source update.'
275
+ : '';
276
+ return errorResult(`Method "${methodSpecifier}" not found in CLAS ${name}. Available methods: ${available || '(none)'}.${hint}`);
277
+ }
278
+ const spliced = removeMethodPair(main, method);
279
+ const lintWarnings = runPreWriteLint(spliced, type, name, config, lintOverride);
280
+ if (lintWarnings.blocked)
281
+ return lintWarnings.result;
282
+ await edit.save(srcUrl, spliced);
283
+ const where = method.implementation ? ' (DEFINITION + IMPLEMENTATION)' : ' (DEFINITION only — was ABSTRACT)';
284
+ return textResult(`Successfully deleted method "${method.name}" from ${type} ${name}${where}. Active version unchanged until activation; SAPActivate next.`);
285
+ });
324
286
  }
325
287
  export async function writeActionChangeMethodVisibility(ctx) {
326
- const { client, args, config, type, name, includeProvided, transport, lintOverride, objectUrl, srcUrl, invalidateWrittenObject, enforcePackageForExistingObject, fetchClassStructureAndMain, } = ctx;
288
+ const { args, config, type, name, includeProvided, lintOverride, srcUrl, enforcePackageForExistingObject } = ctx;
327
289
  // Body-preserving visibility move (issue #303 follow-up). Moves the METHODS
328
290
  // clause from its current section to the target section; the IMPLEMENTATION
329
291
  // block is never touched, so the method body survives. This is the safe
@@ -344,32 +306,39 @@ export async function writeActionChangeMethodVisibility(ctx) {
344
306
  return errorResult('change_method_visibility targets the global class DEFINITION (/source/main). For local-class (CCDEF) methods, use edit_class_definition with include=definitions.');
345
307
  }
346
308
  await enforcePackageForExistingObject();
347
- const { structure, main } = await fetchClassStructureAndMain(name);
348
- const upperName = methodSpecifier.toUpperCase();
349
- const method = structure.methods.find((m) => m.name === upperName);
350
- if (!method) {
351
- const available = structure.methods.map((m) => m.name).join(', ');
352
- const hint = methodSpecifier.includes('~')
353
- ? ' Interface-qualified names (e.g. "zif_x~m") are not addressable here; objectstructure lists methods under their bare names.'
354
- : '';
355
- return errorResult(`Method "${methodSpecifier}" not found in CLAS ${name}. Available methods: ${available || '(none)'}.${hint}`);
356
- }
357
- // Idempotent: already in the requested section → no write.
358
- if (method.visibility === target) {
359
- return textResult(`Method "${method.name}" is already in the ${target.toUpperCase()} SECTION of ${type} ${name}. No change made.`);
360
- }
361
- // The target section header must already exist (same constraint as add_method).
362
- const anchor = findSectionAnchor(main, structure, target);
363
- if (!anchor) {
364
- return errorResult(`No ${target.toUpperCase()} SECTION exists in CLAS ${name}. Use SAPWrite(action="edit_class_definition") to add the section header first, then re-run change_method_visibility.`);
365
- }
366
- // DEFINITION-only move — IMPLEMENTATION (the method body) is preserved verbatim.
367
- const spliced = moveMethodDefinition(main, method, anchor.afterLine);
368
- const lintWarnings = runPreWriteLint(spliced, type, name, config, lintOverride);
369
- if (lintWarnings.blocked)
370
- return lintWarnings.result;
371
- await safeUpdateSource(client.http, client.safety, objectUrl, srcUrl, spliced, transport, getCachedFeatures()?.abapRelease);
372
- invalidateWrittenObject(type, name);
373
- return textResult(`Successfully moved method "${method.name}" from ${method.visibility.toUpperCase()} to ${target.toUpperCase()} SECTION of ${type} ${name} (IMPLEMENTATION preserved). Active version unchanged until activation; SAPActivate next.`);
309
+ return withClassEdit(ctx, async (edit) => {
310
+ const { structure, main } = await edit.readMainAndStructure();
311
+ const upperName = methodSpecifier.toUpperCase();
312
+ const method = structure.methods.find((m) => m.name === upperName);
313
+ if (!method) {
314
+ const available = structure.methods.map((m) => m.name).join(', ');
315
+ const hint = methodSpecifier.includes('~')
316
+ ? ' Methods supplied by INTERFACES have no separate METHODS declaration to move; interface components retain public visibility.'
317
+ : '';
318
+ return errorResult(`Method "${methodSpecifier}" not found in CLAS ${name}. Available methods: ${available || '(none)'}.${hint}`);
319
+ }
320
+ if (method.name.includes('~') && target !== 'public') {
321
+ return errorResult('Interface method redefinitions must keep public visibility.');
322
+ }
323
+ // Idempotent: already in the requested section → no write.
324
+ if (method.visibility === target) {
325
+ return textResult(`Method "${method.name}" is already in the ${target.toUpperCase()} SECTION of ${type} ${name}. No change made.`);
326
+ }
327
+ if (method.redefinition) {
328
+ return errorResult('Redefined methods must keep their inherited visibility. To repair an invalid draft, use edit_class_definition with the visibility declared by the superclass.');
329
+ }
330
+ // The target section header must already exist (same constraint as add_method).
331
+ const anchor = findSectionAnchor(main, structure, target);
332
+ if (!anchor) {
333
+ return errorResult(`No ${target.toUpperCase()} SECTION exists in CLAS ${name}. Use SAPWrite(action="edit_class_definition") to add the section header first, then re-run change_method_visibility.`);
334
+ }
335
+ // DEFINITION-only move — IMPLEMENTATION (the method body) is preserved verbatim.
336
+ const spliced = moveMethodDefinition(main, method, anchor.afterLine);
337
+ const lintWarnings = runPreWriteLint(spliced, type, name, config, lintOverride);
338
+ if (lintWarnings.blocked)
339
+ return lintWarnings.result;
340
+ await edit.save(srcUrl, spliced);
341
+ return textResult(`Successfully moved method "${method.name}" from ${method.visibility.toUpperCase()} to ${target.toUpperCase()} SECTION of ${type} ${name} (IMPLEMENTATION preserved). Active version unchanged until activation; SAPActivate next.`);
342
+ });
374
343
  }
375
344
  //# sourceMappingURL=class-surgery.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"class-surgery.js","sourceRoot":"","sources":["../../../src/handlers/write/class-surgery.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,cAAc,EACd,2BAA2B,EAC3B,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,8BAA8B,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EACL,oBAAoB,EAEpB,eAAe,EACf,yBAAyB,EACzB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,WAAW,EAAmB,UAAU,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAG9E,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,GAAoB;IAC9D,MAAM,EACJ,MAAM,EACN,IAAI,EACJ,MAAM,EACN,YAAY,EACZ,aAAa,EACb,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,OAAO,EACP,SAAS,EACT,YAAY,EACZ,aAAa,EACb,SAAS,EACT,MAAM,EACN,uBAAuB,EACvB,+BAA+B,GAChC,GAAG,GAAG,CAAC;IACR,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IACzC,IAAI,CAAC,MAAM;QAAE,OAAO,WAAW,CAAC,8CAA8C,CAAC,CAAC;IAChF,IAAI,CAAC,MAAM;QAAE,OAAO,WAAW,CAAC,gEAAgE,CAAC,CAAC;IAClG,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,WAAW,CAAC,8CAA8C,CAAC,CAAC;IACxF,MAAM,+BAA+B,EAAE,CAAC;IAExC,6DAA6D;IAC7D,SAAS;IACT,yEAAyE;IACzE,mEAAmE;IACnE,oDAAoD;IACpD,iEAAiE;IACjE,qEAAqE;IACrE,+EAA+E;IAC/E,uEAAuE;IACvE,wDAAwD;IACxD,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,OAAO,EAAE,CAAC;QAC3C,OAAO,WAAW,CAChB,yBAAyB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACpG,CAAC;IACJ,CAAC;IACD,MAAM,eAAe,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAChF,MAAM,eAAe,GAAkC,OAAO,IAAI,eAAe,CAAC;IAElF,6CAA6C;IAC7C,uEAAuE;IACvE,yEAAyE;IACzE,wEAAwE;IACxE,uEAAuE;IACvE,IAAI,aAAqB,CAAC;IAC1B,IAAI,eAAe,EAAE,CAAC;QACpB,uDAAuD;QACvD,sEAAsE;QACtE,oEAAoE;QACpE,oEAAoE;QACpE,oEAAoE;QACpE,oEAAoE;QACpE,uEAAuE;QACvE,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,0BAA0B,CAC3D,MAAM,EACN,YAAY,EACZ,MAAM,EACN,IAAI,EACJ,MAAM,EACN,aAAa,CACd,CAAC;QACF,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,eAAe,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAC5F,aAAa,GAAG,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACnD,uEAAuE;QACvE,mEAAmE;QACnE,oEAAoE;QACpE,sEAAsE;QACtE,mEAAmE;QACnE,4CAA4C;IAC9C,CAAC;SAAM,CAAC;QACN,aAAa,GAAG,YAAY;YAC1B,CAAC,CAAC,CAAC,MAAM,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;iBAC7G,MAAM;YACX,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;IAC3C,CAAC;IAED,oDAAoD;IACpD,MAAM,iBAAiB,GAAG,iBAAiB,EAAE,EAAE,WAAW,CAAC;IAC3D,MAAM,WAAW,GAAG,iBAAiB,CAAC,CAAC,CAAC,8BAA8B,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEtG,gCAAgC;IAChC,MAAM,OAAO,GAAG,YAAY,CAAC,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IAC/E,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,oEAAoE;QACpE,uEAAuE;QACvE,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,YAAY,eAAe,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC;QAC/E,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,IAAI,4BAA4B,MAAM,QAAQ,IAAI,GAAG,CAAC;QACrF,MAAM,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC,sBAAsB,MAAM,kDAAkD,CAAC,CAAC,CAAC,EAAE,CAAC;QACnH,OAAO,WAAW,CAAC,GAAG,SAAS,aAAa,KAAK,OAAO,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,mEAAmE;IACnE,EAAE;IACF,qEAAqE;IACrE,qEAAqE;IACrE,qEAAqE;IACrE,2EAA2E;IAC3E,qEAAqE;IACrE,sEAAsE;IACtE,gBAAgB;IAChB,IAAI,YAAY,GAAuC,EAAE,OAAO,EAAE,KAAK,EAAwC,CAAC;IAChH,IAAI,UAAU,GAAG,EAAE,CAAC;IACpB,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,YAAY,GAAG,eAAe,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;QACpF,IAAI,YAAY,CAAC,OAAO;YAAE,OAAO,YAAY,CAAC,MAAO,CAAC;QAEtD,UAAU,GAAG,MAAM,sBAAsB,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;IAC/G,CAAC;IAED,6EAA6E;IAC7E,8EAA8E;IAC9E,0BAA0B;IAC1B,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,sBAAsB,CAC1B,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,MAAM,EACb,SAAS,EACT,eAAe,CAAC,IAAI,EAAE,eAAe,CAAC,EACtC,OAAO,CAAC,SAAS,EACjB,SAAS,EACT,iBAAiB,EAAE,EAAE,WAAW,CACjC,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,gBAAgB,CACpB,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,MAAM,EACb,SAAS,EACT,MAAM,EACN,OAAO,CAAC,SAAS,EACjB,SAAS,EACT,iBAAiB,EAAE,EAAE,WAAW,CACjC,CAAC;IACJ,CAAC;IACD,uBAAuB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,cAAc,eAAe,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACtE,MAAM,GAAG,GAAG,gCAAgC,MAAM,QAAQ,IAAI,IAAI,IAAI,GAAG,KAAK,GAAG,CAAC;IAClF,MAAM,MAAM,GAAG,CAAC,YAAY,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChF,OAAO,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,GAAG,OAAO,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAAC,GAAoB;IACvE,MAAM,EACJ,MAAM,EACN,IAAI,EACJ,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,SAAS,EACT,OAAO,EACP,eAAe,EACf,SAAS,EACT,YAAY,EACZ,SAAS,EACT,MAAM,EACN,uBAAuB,EACvB,+BAA+B,EAC/B,0BAA0B,GAC3B,GAAG,GAAG,CAAC;IACR,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,WAAW,CAAC,wDAAwD,CAAC,CAAC;IAClG,IAAI,CAAC,SAAS;QAAE,OAAO,WAAW,CAAC,8EAA8E,CAAC,CAAC;IACnH,IAAI,eAAe,IAAI,CAAC,OAAO,EAAE,CAAC;QAChC,OAAO,WAAW,CAChB,yBAAyB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACpG,CAAC;IACJ,CAAC;IACD,MAAM,+BAA+B,EAAE,CAAC;IAExC,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACnE,IAAI,OAAe,CAAC;IACpB,IAAI,OAAO,EAAE,CAAC;QACZ,sEAAsE;QACtE,oEAAoE;QACpE,oEAAoE;QACpE,0EAA0E;QAC1E,wEAAwE;QACxE,yEAAyE;QACzE,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC;IAC3D,CAAC;SAAM,CAAC;QACN,uEAAuE;QACvE,6DAA6D;QAC7D,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,MAAM,0BAA0B,CAAC,IAAI,CAAC,CAAC;QAEnE,yEAAyE;QACzE,MAAM,IAAI,GAAG,cAAc,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC/C,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,MAAM,WAAW,GAAa,EAAE,CAAC;QACjC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC7B,+DAA+D;YAC/D,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,OAAO;gBAAE,SAAS;YAC9E,qEAAqE;YACrE,oEAAoE;YACpE,uEAAuE;YACvE,wEAAwE;YACxE,sEAAsE;YACtE,sDAAsD;YACtD,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,kBAAkB,GAAG,CAAC,IAAI,KAAK,EAAE,IAAI,CAAC,CAAC;YAC7D,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClD,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC/B,IAAI,GAAG,CAAC,cAAc,EAAE,CAAC;gBACvB,sEAAsE;gBACtE,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QACD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtD,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,KAAK,CAAC,IAAI,CACR,6EAA6E,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,kNAAkN,IAAI,8DAA8D,CACzX,CAAC;YACJ,CAAC;YACD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,KAAK,CAAC,IAAI,CACR,4EAA4E,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,4MAA4M,IAAI,kDAAkD,CACrW,CAAC;YACJ,CAAC;YACD,OAAO,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACzC,CAAC;QACD,OAAO,GAAG,qBAAqB,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAC3D,CAAC;IAED,uEAAuE;IACvE,8CAA8C;IAC9C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,YAAY,GAAG,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;QAChF,IAAI,YAAY,CAAC,OAAO;YAAE,OAAO,YAAY,CAAC,MAAO,CAAC;IACxD,CAAC;IAED,MAAM,WAAW,GAAG,OAAO;QACzB,CAAC,CAAC,MAAM,sBAAsB,CAC1B,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,MAAM,EACb,SAAS,EACT,QAAQ,EACR,OAAO,EACP,SAAS,EACT,iBAAiB,EAAE,EAAE,WAAW,CACjC;QACH,CAAC,CAAC,SAAS,CAAC;IACd,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,gBAAgB,CACpB,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,MAAM,EACb,SAAS,EACT,QAAQ,EACR,OAAO,EACP,SAAS,EACT,iBAAiB,EAAE,EAAE,WAAW,CACjC,CAAC;IACJ,CAAC;IACD,uBAAuB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,oBAAoB,OAAO,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9F,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,WAAW,OAAO,OAAO,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,iBAAiB,IAAI,IAAI,IAAI,EAAE,CAAC;IACxG,OAAO,UAAU,CACf,wBAAwB,WAAW,IAAI,QAAQ,gHAAgH,CAChK,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAAC,GAAoB;IACvE,MAAM,EACJ,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,SAAS,EACT,eAAe,EACf,SAAS,EACT,SAAS,EACT,MAAM,EACN,uBAAuB,EACvB,+BAA+B,EAC/B,0BAA0B,GAC3B,GAAG,GAAG,CAAC;IACR,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,WAAW,CAAC,wDAAwD,CAAC,CAAC;IAClG,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACzD,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,OAAO,WAAW,CAAC,8EAA8E,CAAC,CAAC;IACrG,CAAC;IACD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,WAAW,CAAC,0EAA0E,CAAC,CAAC;IACjG,CAAC;IACD,6EAA6E;IAC7E,+EAA+E;IAC/E,mBAAmB;IACnB,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,WAAW,CAChB,mKAAmK,CACpK,CAAC;IACJ,CAAC;IACD,MAAM,+BAA+B,EAAE,CAAC;IAExC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,MAAM,0BAA0B,CAAC,IAAI,CAAC,CAAC;IACnE,MAAM,SAAS,GAAG,eAAe,CAAC,WAAW,EAAE,CAAC;IAChD,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IACnE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClE,MAAM,IAAI,GAAG,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC;YACxC,CAAC,CAAC,+LAA+L;YACjM,CAAC,CAAC,EAAE,CAAC;QACP,OAAO,WAAW,CAChB,WAAW,eAAe,uBAAuB,IAAI,wBAAwB,SAAS,IAAI,QAAQ,IAAI,IAAI,EAAE,CAC7G,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5D,6EAA6E;IAC7E,6EAA6E;IAC7E,+EAA+E;IAC/E,gFAAgF;IAChF,iFAAiF;IACjF,MAAM,gBAAgB,CACpB,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,MAAM,EACb,SAAS,EACT,MAAM,EACN,OAAO,EACP,SAAS,EACT,iBAAiB,EAAE,EAAE,WAAW,CACjC,CAAC;IACF,uBAAuB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACpC,OAAO,UAAU,CACf,6CAA6C,MAAM,CAAC,IAAI,QAAQ,IAAI,IAAI,IAAI,4IAA4I,CACzN,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,GAAoB;IAC7D,MAAM,EACJ,MAAM,EACN,IAAI,EACJ,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,eAAe,EACf,SAAS,EACT,YAAY,EACZ,SAAS,EACT,MAAM,EACN,uBAAuB,EACvB,+BAA+B,EAC/B,0BAA0B,GAC3B,GAAG,GAAG,CAAC;IACR,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,WAAW,CAAC,6CAA6C,CAAC,CAAC;IACvF,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IACzC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QACnB,OAAO,WAAW,CAChB,iHAAiH,CAClH,CAAC;IACJ,CAAC;IACD,MAAM,UAAU,GAAG,2BAA2B,CAAC,MAAM,CAAC,CAAC;IACvD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,WAAW,CAChB,mIAAmI,CACpI,CAAC;IACJ,CAAC;IACD,0EAA0E;IAC1E,8EAA8E;IAC9E,wEAAwE;IACxE,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,WAAW,CAChB,yDAAyD,UAAU,8JAA8J,CAClO,CAAC;IACJ,CAAC;IACD,MAAM,UAAU,GAAI,IAAI,CAAC,UAA6D,IAAI,QAAQ,CAAC;IACnG,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC;IAC1C,qEAAqE;IACrE,yEAAyE;IACzE,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,WAAW,CAChB,8JAA8J,CAC/J,CAAC;IACJ,CAAC;IACD,MAAM,+BAA+B,EAAE,CAAC;IAExC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,MAAM,0BAA0B,CAAC,IAAI,CAAC,CAAC;IACnE,8DAA8D;IAC9D,IAAI,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,EAAE,CAAC;QACzD,OAAO,WAAW,CAChB,WAAW,UAAU,4BAA4B,IAAI,0DAA0D,UAAU,4DAA4D,CACtL,CAAC;IACJ,CAAC;IAED,4EAA4E;IAC5E,2EAA2E;IAC3E,gFAAgF;IAChF,IAAI,CAAC,UAAU,IAAI,CAAC,SAAS,CAAC,wBAAwB,EAAE,CAAC;QACvD,OAAO,WAAW,CAChB,QAAQ,IAAI,qKAAqK,CAClL,CAAC;IACJ,CAAC;IAED,uEAAuE;IACvE,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAC9D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,WAAW,CAChB,MAAM,UAAU,CAAC,WAAW,EAAE,2BAA2B,IAAI,yGAAyG,CACvK,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE;QAChD,IAAI,EAAE,MAAM;QACZ,UAAU;QACV,UAAU;QACV,UAAU;KACX,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;IAChF,IAAI,YAAY,CAAC,OAAO;QAAE,OAAO,YAAY,CAAC,MAAO,CAAC;IAEtD,MAAM,gBAAgB,CACpB,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,MAAM,EACb,SAAS,EACT,MAAM,EACN,OAAO,EACP,SAAS,EACT,iBAAiB,EAAE,EAAE,WAAW,CACjC,CAAC;IACF,uBAAuB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,qCAAqC,CAAC,CAAC,CAAC,EAAE,CAAC;IACzE,OAAO,UAAU,CACf,8BAA8B,UAAU,MAAM,UAAU,QAAQ,IAAI,IAAI,IAAI,GAAG,QAAQ,gEAAgE,CACxJ,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,GAAoB;IAChE,MAAM,EACJ,MAAM,EACN,IAAI,EACJ,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,eAAe,EACf,SAAS,EACT,YAAY,EACZ,SAAS,EACT,MAAM,EACN,uBAAuB,EACvB,+BAA+B,EAC/B,0BAA0B,GAC3B,GAAG,GAAG,CAAC;IACR,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,WAAW,CAAC,gDAAgD,CAAC,CAAC;IAC1F,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACzD,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,OAAO,WAAW,CAAC,qEAAqE,CAAC,CAAC;IAC5F,CAAC;IACD,qEAAqE;IACrE,yEAAyE;IACzE,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,WAAW,CAChB,4JAA4J,CAC7J,CAAC;IACJ,CAAC;IACD,MAAM,+BAA+B,EAAE,CAAC;IAExC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,MAAM,0BAA0B,CAAC,IAAI,CAAC,CAAC;IACnE,MAAM,SAAS,GAAG,eAAe,CAAC,WAAW,EAAE,CAAC;IAChD,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IACnE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClE,MAAM,IAAI,GAAG,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC;YACxC,CAAC,CAAC,6HAA6H;YAC/H,CAAC,CAAC,EAAE,CAAC;QACP,OAAO,WAAW,CAChB,WAAW,eAAe,uBAAuB,IAAI,wBAAwB,SAAS,IAAI,QAAQ,IAAI,IAAI,EAAE,CAC7G,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC/C,MAAM,YAAY,GAAG,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;IAChF,IAAI,YAAY,CAAC,OAAO;QAAE,OAAO,YAAY,CAAC,MAAO,CAAC;IAEtD,MAAM,gBAAgB,CACpB,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,MAAM,EACb,SAAS,EACT,MAAM,EACN,OAAO,EACP,SAAS,EACT,iBAAiB,EAAE,EAAE,WAAW,CACjC,CAAC;IACF,uBAAuB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC,mCAAmC,CAAC;IAC7G,OAAO,UAAU,CACf,gCAAgC,MAAM,CAAC,IAAI,UAAU,IAAI,IAAI,IAAI,GAAG,KAAK,gEAAgE,CAC1I,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iCAAiC,CAAC,GAAoB;IAC1E,MAAM,EACJ,MAAM,EACN,IAAI,EACJ,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,eAAe,EACf,SAAS,EACT,YAAY,EACZ,SAAS,EACT,MAAM,EACN,uBAAuB,EACvB,+BAA+B,EAC/B,0BAA0B,GAC3B,GAAG,GAAG,CAAC;IACR,4EAA4E;IAC5E,4EAA4E;IAC5E,wEAAwE;IACxE,uEAAuE;IACvE,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,WAAW,CAAC,2DAA2D,CAAC,CAAC;IACrG,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACzD,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,OAAO,WAAW,CAAC,8EAA8E,CAAC,CAAC;IACrG,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,UAA4D,CAAC;IACjF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,WAAW,CAChB,wGAAwG,CACzG,CAAC;IACJ,CAAC;IACD,qEAAqE;IACrE,yEAAyE;IACzE,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,WAAW,CAChB,mKAAmK,CACpK,CAAC;IACJ,CAAC;IACD,MAAM,+BAA+B,EAAE,CAAC;IAExC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,MAAM,0BAA0B,CAAC,IAAI,CAAC,CAAC;IACnE,MAAM,SAAS,GAAG,eAAe,CAAC,WAAW,EAAE,CAAC;IAChD,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IACnE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClE,MAAM,IAAI,GAAG,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC;YACxC,CAAC,CAAC,6HAA6H;YAC/H,CAAC,CAAC,EAAE,CAAC;QACP,OAAO,WAAW,CAChB,WAAW,eAAe,uBAAuB,IAAI,wBAAwB,SAAS,IAAI,QAAQ,IAAI,IAAI,EAAE,CAC7G,CAAC;IACJ,CAAC;IAED,2DAA2D;IAC3D,IAAI,MAAM,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;QACjC,OAAO,UAAU,CACf,WAAW,MAAM,CAAC,IAAI,uBAAuB,MAAM,CAAC,WAAW,EAAE,eAAe,IAAI,IAAI,IAAI,mBAAmB,CAChH,CAAC;IACJ,CAAC;IAED,gFAAgF;IAChF,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAC1D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,WAAW,CAChB,MAAM,MAAM,CAAC,WAAW,EAAE,2BAA2B,IAAI,uHAAuH,CACjL,CAAC;IACJ,CAAC;IAED,iFAAiF;IACjF,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IACrE,MAAM,YAAY,GAAG,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;IAChF,IAAI,YAAY,CAAC,OAAO;QAAE,OAAO,YAAY,CAAC,MAAO,CAAC;IAEtD,MAAM,gBAAgB,CACpB,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,MAAM,EACb,SAAS,EACT,MAAM,EACN,OAAO,EACP,SAAS,EACT,iBAAiB,EAAE,EAAE,WAAW,CACjC,CAAC;IACF,uBAAuB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACpC,OAAO,UAAU,CACf,8BAA8B,MAAM,CAAC,IAAI,UAAU,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,OAAO,MAAM,CAAC,WAAW,EAAE,eAAe,IAAI,IAAI,IAAI,2FAA2F,CACpO,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"class-surgery.js","sourceRoot":"","sources":["../../../src/handlers/write/class-surgery.ts"],"names":[],"mappings":"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"}