arc-1 1.4.0 → 1.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/adt/abapgit.d.ts.map +1 -1
- package/dist/adt/abapgit.js +64 -7
- package/dist/adt/abapgit.js.map +1 -1
- package/dist/adt/aunit.js +4 -4
- package/dist/adt/aunit.js.map +1 -1
- package/dist/adt/class-structure.d.ts +4 -2
- package/dist/adt/class-structure.d.ts.map +1 -1
- package/dist/adt/class-structure.js +18 -9
- package/dist/adt/class-structure.js.map +1 -1
- package/dist/adt/client.d.ts +19 -53
- package/dist/adt/client.d.ts.map +1 -1
- package/dist/adt/client.js +72 -96
- package/dist/adt/client.js.map +1 -1
- package/dist/adt/codeintel.d.ts +1 -1
- package/dist/adt/codeintel.d.ts.map +1 -1
- package/dist/adt/codeintel.js +11 -4
- package/dist/adt/codeintel.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 +21 -13
- package/dist/adt/data-source-policy.d.ts.map +1 -1
- package/dist/adt/data-source-policy.js +63 -114
- 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 +34 -32
- 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/legacy-content-handler.d.ts +3 -0
- package/dist/adt/legacy-content-handler.d.ts.map +1 -0
- package/dist/adt/legacy-content-handler.js +21 -0
- package/dist/adt/legacy-content-handler.js.map +1 -0
- 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 +7 -11
- 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/compressor.d.ts.map +1 -1
- package/dist/context/compressor.js +5 -25
- package/dist/context/compressor.js.map +1 -1
- package/dist/context/deps.d.ts.map +1 -1
- package/dist/context/deps.js +50 -4
- package/dist/context/deps.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 +1 -1
- package/dist/handlers/activate.d.ts.map +1 -1
- package/dist/handlers/activate.js +23 -35
- 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 +21 -5
- 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/navigate.d.ts.map +1 -1
- package/dist/handlers/navigate.js +12 -2
- package/dist/handlers/navigate.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 +8 -6
- package/dist/handlers/tool-descriptions.js.map +1 -1
- package/dist/handlers/tool-registry.d.ts +4 -4
- package/dist/handlers/tool-registry.d.ts.map +1 -1
- package/dist/handlers/tool-registry.js +4 -0
- package/dist/handlers/tool-registry.js.map +1 -1
- package/dist/handlers/tools.d.ts +1 -16
- package/dist/handlers/tools.d.ts.map +1 -1
- package/dist/handlers/tools.js +44 -55
- package/dist/handlers/tools.js.map +1 -1
- package/dist/handlers/transport.d.ts.map +1 -1
- package/dist/handlers/transport.js +17 -3
- package/dist/handlers/transport.js.map +1 -1
- package/dist/handlers/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 +123 -18
- package/dist/handlers/write-helpers.js.map +1 -1
- package/dist/handlers/write.d.ts.map +1 -1
- package/dist/handlers/write.js +15 -29
- 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/http.d.ts.map +1 -1
- package/dist/server/http.js +4 -0
- package/dist/server/http.js.map +1 -1
- package/dist/server/logger.d.ts +3 -3
- package/dist/server/logger.d.ts.map +1 -1
- package/dist/server/logger.js +7 -7
- package/dist/server/logger.js.map +1 -1
- package/dist/server/multi-target-basic-auth.d.ts.map +1 -1
- package/dist/server/multi-target-basic-auth.js +1 -0
- package/dist/server/multi-target-basic-auth.js.map +1 -1
- package/dist/server/multi-target-runtime.d.ts.map +1 -1
- package/dist/server/multi-target-runtime.js +1 -0
- package/dist/server/multi-target-runtime.js.map +1 -1
- package/dist/server/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 +58 -51
- 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
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { checkOperation, OperationType } from './safety.js';
|
|
2
|
+
import { escapeXmlAttr, getNestedArray, parseXml } from './xml-parser.js';
|
|
3
|
+
export const LOCKOBJECT_CONTENT_TYPE = 'application/vnd.sap.adt.lockobjects.v1+xml';
|
|
4
|
+
export const LOCKOBJECT_COLLECTION = '/sap/bc/adt/ddic/lockobjects/sources';
|
|
5
|
+
/** Definition defaults: E/S/X, or no lock for a table used only as a foreign-key link. O is runtime-only. */
|
|
6
|
+
export const LOCK_MODES = ['E', 'S', 'X', ''];
|
|
7
|
+
function asRecord(value) {
|
|
8
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value)
|
|
9
|
+
? value
|
|
10
|
+
: undefined;
|
|
11
|
+
}
|
|
12
|
+
function text(value) {
|
|
13
|
+
return value === undefined || value === null ? '' : String(value).trim();
|
|
14
|
+
}
|
|
15
|
+
function parseLockTable(node) {
|
|
16
|
+
const rec = (node ?? {});
|
|
17
|
+
return { tableName: text(rec.tableName), lockMode: text(rec.lockMode) };
|
|
18
|
+
}
|
|
19
|
+
/** Parse the `<enqu:lockobject>` metadata document. */
|
|
20
|
+
export function parseLockObject(xml) {
|
|
21
|
+
const parsed = parseXml(xml);
|
|
22
|
+
// After NS strip: enqu:lockobject → lockobject
|
|
23
|
+
const root = asRecord(parsed.lockobject);
|
|
24
|
+
if (!root)
|
|
25
|
+
throw new Error('Invalid ENQU response: expected <enqu:lockobject>.');
|
|
26
|
+
const adtType = text(root['@_type']);
|
|
27
|
+
if (adtType && adtType !== 'ENQU/DL') {
|
|
28
|
+
throw new Error(`Invalid ENQU response: expected adtcore:type="ENQU/DL", got "${adtType}".`);
|
|
29
|
+
}
|
|
30
|
+
const content = (root.content ?? {});
|
|
31
|
+
const pkgRef = (root.packageRef ?? {});
|
|
32
|
+
return {
|
|
33
|
+
name: text(root['@_name']),
|
|
34
|
+
description: text(root['@_description']),
|
|
35
|
+
package: text(pkgRef['@_name']),
|
|
36
|
+
version: text(root['@_version']),
|
|
37
|
+
allowRFC: text(content.allowRFC) === 'true',
|
|
38
|
+
primaryTable: parseLockTable(content.primaryTable),
|
|
39
|
+
secondaryTables: getNestedArray(content, 'secondaryTables', 'secondaryTable').map(parseLockTable),
|
|
40
|
+
lockParameters: getNestedArray(content, 'lockParameters', 'lockParameter').map((rec) => ({
|
|
41
|
+
parameterName: text(rec.parameterName),
|
|
42
|
+
tableName: text(rec.tableName),
|
|
43
|
+
fieldName: text(rec.fieldName),
|
|
44
|
+
parameterWanted: text(rec.parameterWanted) !== 'false',
|
|
45
|
+
})),
|
|
46
|
+
lockModules: getNestedArray(content, 'lockModules', 'lockModule')
|
|
47
|
+
.map((rec) => text(rec['@_name']))
|
|
48
|
+
.filter(Boolean),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/** Read a lock object. Omitting `version` returns SAP's developer view (a pending inactive edit). */
|
|
52
|
+
export async function getLockObject(http, safety, name, version) {
|
|
53
|
+
checkOperation(safety, OperationType.Read, 'GetLockObject');
|
|
54
|
+
const query = version ? `?version=${version}` : '';
|
|
55
|
+
const resp = await http.get(`${LOCKOBJECT_COLLECTION}/${encodeURIComponent(name)}${query}`, {
|
|
56
|
+
Accept: LOCKOBJECT_CONTENT_TYPE,
|
|
57
|
+
});
|
|
58
|
+
return parseLockObject(resp.body);
|
|
59
|
+
}
|
|
60
|
+
const DDIC_NAME_RE = /^(?:\/[A-Z0-9_]+\/)?[A-Z0-9_]+$/;
|
|
61
|
+
/** Keys SAPRead emits that are not writable — accepted (and ignored) so read output round-trips. */
|
|
62
|
+
const READ_ONLY_KEYS = ['name', 'description', 'package', 'version', 'lockModules'];
|
|
63
|
+
const WRITABLE_KEYS = ['allowRFC', 'primaryTable', 'secondaryTables', 'lockParameters'];
|
|
64
|
+
function invalid(message) {
|
|
65
|
+
return new Error(`Invalid ENQU source: ${message}`);
|
|
66
|
+
}
|
|
67
|
+
function rejectUnknownKeys(rec, allowed, where) {
|
|
68
|
+
const unknown = Object.keys(rec).filter((key) => !allowed.includes(key));
|
|
69
|
+
if (unknown.length)
|
|
70
|
+
throw invalid(`${where}: unknown key(s) ${unknown.map((key) => `"${key}"`).join(', ')}.`);
|
|
71
|
+
}
|
|
72
|
+
function validateName(value, where) {
|
|
73
|
+
const name = text(value).toUpperCase();
|
|
74
|
+
if (!name)
|
|
75
|
+
throw invalid(`${where} is required.`);
|
|
76
|
+
if (!DDIC_NAME_RE.test(name))
|
|
77
|
+
throw invalid(`${where} "${text(value)}" is not a valid DDIC name.`);
|
|
78
|
+
return name;
|
|
79
|
+
}
|
|
80
|
+
function validateLockTable(value, where) {
|
|
81
|
+
const rec = asRecord(value);
|
|
82
|
+
if (!rec)
|
|
83
|
+
throw invalid(`${where} must be an object {"tableName":"…","lockMode":"E"}.`);
|
|
84
|
+
rejectUnknownKeys(rec, ['tableName', 'lockMode'], where);
|
|
85
|
+
// Required: a supplied entry replaces the stored one, so a default would silently reset S/X/"".
|
|
86
|
+
const lockMode = typeof rec.lockMode === 'string' ? rec.lockMode.trim().toUpperCase() : undefined;
|
|
87
|
+
if (lockMode === undefined || !LOCK_MODES.includes(lockMode)) {
|
|
88
|
+
throw invalid(`${where}.lockMode ${JSON.stringify(rec.lockMode)} must be one of ${LOCK_MODES.map((mode) => JSON.stringify(mode)).join(', ')}. Optimistic mode O is a runtime option, not a definition default.`);
|
|
89
|
+
}
|
|
90
|
+
return { tableName: validateName(rec.tableName, `${where}.tableName`), lockMode };
|
|
91
|
+
}
|
|
92
|
+
function validateBoolean(value, where) {
|
|
93
|
+
if (typeof value === 'boolean')
|
|
94
|
+
return value;
|
|
95
|
+
if (value === 'true' || value === 'false')
|
|
96
|
+
return value === 'true';
|
|
97
|
+
throw invalid(`${where} must be true or false.`);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Parse and validate the JSON definition from SAPWrite "source". Unknown keys are rejected (a typo
|
|
101
|
+
* such as "primarytable" would otherwise silently keep the stored value); SAPRead's read-only keys
|
|
102
|
+
* are ignored so its output can be edited and written back unchanged.
|
|
103
|
+
*/
|
|
104
|
+
export function parseLockObjectDefinition(source) {
|
|
105
|
+
let raw;
|
|
106
|
+
try {
|
|
107
|
+
raw = JSON.parse(source);
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
throw invalid(`expected a JSON object (${err instanceof Error ? err.message : String(err)}).`);
|
|
111
|
+
}
|
|
112
|
+
const rec = asRecord(raw);
|
|
113
|
+
if (!rec)
|
|
114
|
+
throw invalid('expected a JSON object.');
|
|
115
|
+
rejectUnknownKeys(rec, [...WRITABLE_KEYS, ...READ_ONLY_KEYS], 'definition');
|
|
116
|
+
const def = {};
|
|
117
|
+
if (rec.allowRFC !== undefined)
|
|
118
|
+
def.allowRFC = validateBoolean(rec.allowRFC, 'allowRFC');
|
|
119
|
+
if (rec.primaryTable !== undefined)
|
|
120
|
+
def.primaryTable = validateLockTable(rec.primaryTable, 'primaryTable');
|
|
121
|
+
if (rec.secondaryTables !== undefined) {
|
|
122
|
+
if (!Array.isArray(rec.secondaryTables))
|
|
123
|
+
throw invalid('secondaryTables must be an array.');
|
|
124
|
+
def.secondaryTables = rec.secondaryTables.map((t, i) => validateLockTable(t, `secondaryTables[${i}]`));
|
|
125
|
+
}
|
|
126
|
+
if (rec.lockParameters !== undefined) {
|
|
127
|
+
if (!Array.isArray(rec.lockParameters))
|
|
128
|
+
throw invalid('lockParameters must be an array.');
|
|
129
|
+
def.lockParameters = rec.lockParameters.map((p, i) => {
|
|
130
|
+
const where = `lockParameters[${i}]`;
|
|
131
|
+
const prec = asRecord(p);
|
|
132
|
+
if (!prec)
|
|
133
|
+
throw invalid(`${where} must be an object.`);
|
|
134
|
+
rejectUnknownKeys(prec, ['parameterName', 'tableName', 'fieldName', 'parameterWanted'], where);
|
|
135
|
+
return {
|
|
136
|
+
parameterName: validateName(prec.parameterName ?? prec.fieldName, `${where}.parameterName`),
|
|
137
|
+
tableName: validateName(prec.tableName, `${where}.tableName`),
|
|
138
|
+
fieldName: validateName(prec.fieldName, `${where}.fieldName`),
|
|
139
|
+
parameterWanted: validateBoolean(prec.parameterWanted, `${where}.parameterWanted`),
|
|
140
|
+
};
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
return def;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Overlay a (partial) definition on the stored lock object for a full-document PUT. Omitted keys
|
|
147
|
+
* keep their stored value.
|
|
148
|
+
*
|
|
149
|
+
* Changing the table set requires explicit lockParameters: the stored ones name the old tables, and
|
|
150
|
+
* when an UPDATE sends an empty list SAP re-derives them from the key fields with
|
|
151
|
+
* parameterWanted=false (live 8.16; a create derives them with true). That would silently produce
|
|
152
|
+
* ENQUEUE_/DEQUEUE_ modules without key parameters, so we refuse instead of guessing.
|
|
153
|
+
*/
|
|
154
|
+
export function mergeLockObjectDefinition(existing, def) {
|
|
155
|
+
const primaryTable = def.primaryTable ?? existing.primaryTable;
|
|
156
|
+
const secondaryTables = def.secondaryTables ?? existing.secondaryTables;
|
|
157
|
+
const tableKey = (p, s) => [p.tableName, ...s.map((t) => t.tableName)].join(',');
|
|
158
|
+
const tablesChanged = tableKey(primaryTable, secondaryTables) !== tableKey(existing.primaryTable, existing.secondaryTables);
|
|
159
|
+
if (def.lockParameters?.length === 0) {
|
|
160
|
+
throw invalid('"lockParameters": [] is refused on update: SAP re-derives every parameter with parameterWanted=false, ' +
|
|
161
|
+
'so ENQUEUE_ locks generically. List each parameter; set parameterWanted=false to exclude one.');
|
|
162
|
+
}
|
|
163
|
+
if (tablesChanged && def.lockParameters === undefined) {
|
|
164
|
+
throw invalid('changing primaryTable/secondaryTables requires "lockParameters" for the new tables ' +
|
|
165
|
+
'(one {"parameterName","tableName","fieldName","parameterWanted"} per key field). ' +
|
|
166
|
+
'Without them SAP re-derives the parameters with parameterWanted=false.');
|
|
167
|
+
}
|
|
168
|
+
return {
|
|
169
|
+
allowRFC: def.allowRFC ?? existing.allowRFC,
|
|
170
|
+
primaryTable,
|
|
171
|
+
secondaryTables,
|
|
172
|
+
lockParameters: def.lockParameters ?? existing.lockParameters,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Build the create/update body. Element order matches SAP's own GET serialization; the read-only
|
|
177
|
+
* <enqu:lockModules> is omitted (a PUT without it is accepted, live-verified on 8.16).
|
|
178
|
+
*/
|
|
179
|
+
export function buildLockObjectXml(params) {
|
|
180
|
+
const { definition } = params;
|
|
181
|
+
if (!definition.primaryTable) {
|
|
182
|
+
throw invalid('primaryTable is required, e.g. {"primaryTable":{"tableName":"ZMY_TABLE","lockMode":"E"}}.');
|
|
183
|
+
}
|
|
184
|
+
const table = (tag, t) => `<enqu:${tag}><enqu:tableName>${escapeXmlAttr(t.tableName)}</enqu:tableName><enqu:lockMode>${escapeXmlAttr(t.lockMode)}</enqu:lockMode></enqu:${tag}>`;
|
|
185
|
+
const secondary = (definition.secondaryTables ?? []).map((t) => table('secondaryTable', t)).join('');
|
|
186
|
+
const parameters = (definition.lockParameters ?? [])
|
|
187
|
+
.map((p) => `<enqu:lockParameter><enqu:parameterWanted>${p.parameterWanted}</enqu:parameterWanted><enqu:parameterName>${escapeXmlAttr(p.parameterName)}</enqu:parameterName><enqu:tableName>${escapeXmlAttr(p.tableName)}</enqu:tableName><enqu:fieldName>${escapeXmlAttr(p.fieldName)}</enqu:fieldName></enqu:lockParameter>`)
|
|
188
|
+
.join('');
|
|
189
|
+
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
190
|
+
<enqu:lockobject xmlns:enqu="http://www.sap.com/adt/ddic/enqu" xmlns:adtcore="http://www.sap.com/adt/core" adtcore:type="ENQU/DL" adtcore:name="${escapeXmlAttr(params.name)}" adtcore:description="${escapeXmlAttr(params.description)}" adtcore:masterLanguage="${escapeXmlAttr(params.masterLanguage)}"${params.responsibleAttr}>
|
|
191
|
+
<adtcore:packageRef adtcore:name="${escapeXmlAttr(params.package)}"/>
|
|
192
|
+
<enqu:content><enqu:allowRFC>${definition.allowRFC === true}</enqu:allowRFC>${table('primaryTable', definition.primaryTable)}<enqu:secondaryTables>${secondary}</enqu:secondaryTables><enqu:lockParameters>${parameters}</enqu:lockParameters></enqu:content>
|
|
193
|
+
</enqu:lockobject>`;
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=lock-object.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lock-object.js","sourceRoot":"","sources":["../../src/adt/lock-object.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,7 +31,9 @@
|
|
|
31
31
|
* failures rethrow.
|
|
32
32
|
*/
|
|
33
33
|
import type { AdtClient } from './client.js';
|
|
34
|
-
import {
|
|
34
|
+
import type { AdtHttpClient } from './http.js';
|
|
35
|
+
import { type RapHandlerRequirement, type RapHandlerSourceSections } from './rap-handlers.js';
|
|
36
|
+
import { type SafetyConfig } from './safety.js';
|
|
35
37
|
/** Options for `generateBehaviorImplementation`. */
|
|
36
38
|
export interface RapGenerateOptions {
|
|
37
39
|
/** Explicit BDEF name (overrides rootEntityRef auto-discovery). */
|
|
@@ -107,4 +109,6 @@ export declare function isRapGenerateResultSuccess(result: RapGenerateResult): b
|
|
|
107
109
|
* behavior pool class. See module-level docs for the contract.
|
|
108
110
|
*/
|
|
109
111
|
export declare function generateBehaviorImplementation(client: AdtClient, className: string, options?: RapGenerateOptions): Promise<RapGenerateResult>;
|
|
112
|
+
/** Read only the three RAP source sections. Serial reads keep one stateful SAP context in order. */
|
|
113
|
+
export declare function readRapClassSources(http: AdtHttpClient, safety: SafetyConfig, name: string): Promise<RapHandlerSourceSections>;
|
|
110
114
|
//# sourceMappingURL=rap-generate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rap-generate.d.ts","sourceRoot":"","sources":["../../src/adt/rap-generate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAI7C,OAAO,EAKL,KAAK,qBAAqB,
|
|
1
|
+
{"version":3,"file":"rap-generate.d.ts","sourceRoot":"","sources":["../../src/adt/rap-generate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAI7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAKL,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAC9B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAiC,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAE/E,oDAAoD;AACpD,MAAM,WAAW,kBAAkB;IACjC,mEAAmE;IACnE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wEAAwE;IACxE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,0CAA0C;AAC1C,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,qCAAqC;IACrC,MAAM,EAAE,eAAe,GAAG,UAAU,CAAC;IACrC,wDAAwD;IACxD,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IACpC,iGAAiG;IACjG,oBAAoB,EAAE,OAAO,CAAC;IAC9B,gHAAgH;IAChH,cAAc,EAAE,OAAO,CAAC;IACxB,uEAAuE;IACvE,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,2FAA2F;IAC3F,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,oBAAoB,CAAC;IAChC,UAAU,EAAE,qBAAqB,CAAC;IAClC,sEAAsE;IACtE,eAAe,EAAE,OAAO,CAAC;IACzB,kFAAkF;IAClF,eAAe,EAAE,KAAK,CAAC,MAAM,GAAG,aAAa,GAAG,iBAAiB,CAAC,CAAC;IACnE,qDAAqD;IACrD,QAAQ,EAAE;QACR,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,oBAAoB,EAAE,MAAM,CAAC;KAC9B,CAAC;IACF,4EAA4E;IAC5E,QAAQ,EAAE,qBAAqB,EAAE,CAAC;IAClC,wFAAwF;IACxF,UAAU,CAAC,EAAE,qBAAqB,CAAC;IACnC,+DAA+D;IAC/D,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAI7E;AA8CD;;;GAGG;AACH,wBAAsB,8BAA8B,CAClD,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,iBAAiB,CAAC,CAsL5B;AAED,oGAAoG;AACpG,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,aAAa,EACnB,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,wBAAwB,CAAC,CAqBnC"}
|
package/dist/adt/rap-generate.js
CHANGED
|
@@ -32,8 +32,9 @@
|
|
|
32
32
|
*/
|
|
33
33
|
import { lockObject, unlockObject, updateSource } from './crud.js';
|
|
34
34
|
import { activateBatch } from './devtools.js';
|
|
35
|
-
import { AdtApiError, AdtSafetyError } from './errors.js';
|
|
35
|
+
import { AdtApiError, AdtSafetyError, isNotFoundError } from './errors.js';
|
|
36
36
|
import { applyRapHandlerScaffold, extractRapHandlerRequirements, findMissingRapHandlerImplementationStubs, findMissingRapHandlerRequirements, } from './rap-handlers.js';
|
|
37
|
+
import { checkOperation, OperationType } from './safety.js';
|
|
37
38
|
/**
|
|
38
39
|
* Classify a `generate_behavior_implementation` outcome as MCP success vs error.
|
|
39
40
|
*
|
|
@@ -117,108 +118,100 @@ export async function generateBehaviorImplementation(client, className, options
|
|
|
117
118
|
`class metadata has no rootEntityRef. Pass an explicit "bdefName" parameter to override.`);
|
|
118
119
|
}
|
|
119
120
|
bdefName = bdefName.toUpperCase();
|
|
120
|
-
// ── Phase 2: read sources + cross-validate ────────────────────────────
|
|
121
|
-
const structured = await client.getClassStructured(cleanClassName);
|
|
122
|
-
const mainSource = structured.main ?? '';
|
|
123
|
-
const definitionsSource = structured.definitions ?? '';
|
|
124
|
-
const implementationsSource = structured.implementations ?? '';
|
|
125
121
|
const bdefRead = await client.getBdef(bdefName);
|
|
126
122
|
const bdefSource = bdefRead.source;
|
|
127
|
-
const mainBdefMatch = FOR_BEHAVIOR_OF_RE.exec(mainSource);
|
|
128
|
-
const bdefClassMatch = MANAGED_IMPL_RE.exec(bdefSource);
|
|
129
|
-
const mainBdefRef = mainBdefMatch?.[1]?.toUpperCase();
|
|
130
|
-
const bdefClassRef = bdefClassMatch?.[1]?.toUpperCase();
|
|
131
|
-
const validation = {
|
|
132
|
-
mainHasForBehaviorOf: Boolean(mainBdefRef),
|
|
133
|
-
bdefBindsClass: Boolean(bdefClassRef),
|
|
134
|
-
};
|
|
135
|
-
const mismatches = [];
|
|
136
|
-
if (!mainBdefRef) {
|
|
137
|
-
mismatches.push(`MAIN source for ${cleanClassName} does not contain "FOR BEHAVIOR OF <bdef>"`);
|
|
138
|
-
}
|
|
139
|
-
else if (mainBdefRef !== bdefName) {
|
|
140
|
-
mismatches.push(`MAIN binds BDEF ${mainBdefRef} but discovery resolved to ${bdefName}`);
|
|
141
|
-
}
|
|
142
|
-
if (!bdefClassRef) {
|
|
143
|
-
mismatches.push(`BDEF ${bdefName} does not contain "managed implementation in class <class> unique"`);
|
|
144
|
-
}
|
|
145
|
-
else if (bdefClassRef !== cleanClassName.toUpperCase()) {
|
|
146
|
-
mismatches.push(`BDEF ${bdefName} binds class ${bdefClassRef} but we are generating for ${cleanClassName}`);
|
|
147
|
-
}
|
|
148
|
-
if (mismatches.length > 0) {
|
|
149
|
-
validation.mismatchReason = mismatches.join('; ');
|
|
150
|
-
}
|
|
151
|
-
if (validation.mismatchReason && !dryRun) {
|
|
152
|
-
throw new AdtSafetyError(`generate_behavior_implementation: cross-reference validation failed (${validation.mismatchReason}). ` +
|
|
153
|
-
`Refusing to mutate. Re-run with dryRun=true to inspect the report and fix the source files first.`);
|
|
154
|
-
}
|
|
155
|
-
// ── Phase 3: scaffold plan ────────────────────────────────────────────
|
|
156
|
-
let requirements = extractRapHandlerRequirements(bdefSource);
|
|
157
|
-
if (targetAlias) {
|
|
158
|
-
requirements = requirements.filter((req) => req.entityAlias.toLowerCase() === targetAlias);
|
|
159
|
-
}
|
|
160
|
-
const combinedSource = [mainSource, definitionsSource, implementationsSource].filter(Boolean).join('\n\n');
|
|
161
|
-
const missingSignatures = findMissingRapHandlerRequirements(requirements, combinedSource);
|
|
162
|
-
const missingStubs = findMissingRapHandlerImplementationStubs(requirements, combinedSource);
|
|
163
|
-
const scaffoldPlan = applyRapHandlerScaffold({
|
|
164
|
-
main: mainSource,
|
|
165
|
-
definitions: definitionsSource || undefined,
|
|
166
|
-
implementations: implementationsSource || undefined,
|
|
167
|
-
}, missingSignatures, missingStubs);
|
|
168
|
-
const result = {
|
|
169
|
-
discovery: {
|
|
170
|
-
className: cleanClassName,
|
|
171
|
-
bdefName,
|
|
172
|
-
source: discoverySource,
|
|
173
|
-
classCategory: metadata.category,
|
|
174
|
-
},
|
|
175
|
-
validation,
|
|
176
|
-
scaffoldChanged: scaffoldPlan.changedSections.length > 0,
|
|
177
|
-
changedSections: scaffoldPlan.changedSections.filter((section) => section === 'main' || section === 'definitions' || section === 'implementations'),
|
|
178
|
-
inserted: {
|
|
179
|
-
signatures: scaffoldPlan.insertedSignatureCount,
|
|
180
|
-
stubs: scaffoldPlan.insertedImplementationStubCount,
|
|
181
|
-
autoCreatedSkeletons: (scaffoldPlan.skeletons?.createdDefinitions.length ?? 0) +
|
|
182
|
-
(scaffoldPlan.skeletons?.createdImplementations.length ?? 0),
|
|
183
|
-
},
|
|
184
|
-
required: requirements,
|
|
185
|
-
dryRun,
|
|
186
|
-
};
|
|
187
|
-
// Dry-run short-circuits before any side effects.
|
|
188
|
-
if (dryRun) {
|
|
189
|
-
return result;
|
|
190
|
-
}
|
|
191
123
|
const objectUrl = classObjectUrl(cleanClassName);
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
124
|
+
const scaffold = async (session, save) => {
|
|
125
|
+
// Read the editable view through the locked session before deriving replacements.
|
|
126
|
+
const structured = await readRapClassSources(session, client.safety, cleanClassName);
|
|
127
|
+
const mainSource = structured.main;
|
|
128
|
+
const definitionsSource = structured.definitions ?? '';
|
|
129
|
+
const implementationsSource = structured.implementations ?? '';
|
|
130
|
+
const mainBdefMatch = FOR_BEHAVIOR_OF_RE.exec(mainSource);
|
|
131
|
+
const bdefClassMatch = MANAGED_IMPL_RE.exec(bdefSource);
|
|
132
|
+
const mainBdefRef = mainBdefMatch?.[1]?.toUpperCase();
|
|
133
|
+
const bdefClassRef = bdefClassMatch?.[1]?.toUpperCase();
|
|
134
|
+
const validation = {
|
|
135
|
+
mainHasForBehaviorOf: Boolean(mainBdefRef),
|
|
136
|
+
bdefBindsClass: Boolean(bdefClassRef),
|
|
137
|
+
};
|
|
138
|
+
const mismatches = [];
|
|
139
|
+
if (!mainBdefRef) {
|
|
140
|
+
mismatches.push(`MAIN source for ${cleanClassName} does not contain "FOR BEHAVIOR OF <bdef>"`);
|
|
141
|
+
}
|
|
142
|
+
else if (mainBdefRef !== bdefName) {
|
|
143
|
+
mismatches.push(`MAIN binds BDEF ${mainBdefRef} but discovery resolved to ${bdefName}`);
|
|
144
|
+
}
|
|
145
|
+
if (!bdefClassRef) {
|
|
146
|
+
mismatches.push(`BDEF ${bdefName} does not contain "managed implementation in class <class> unique"`);
|
|
147
|
+
}
|
|
148
|
+
else if (bdefClassRef !== cleanClassName.toUpperCase()) {
|
|
149
|
+
mismatches.push(`BDEF ${bdefName} binds class ${bdefClassRef} but we are generating for ${cleanClassName}`);
|
|
150
|
+
}
|
|
151
|
+
if (mismatches.length > 0) {
|
|
152
|
+
validation.mismatchReason = mismatches.join('; ');
|
|
153
|
+
}
|
|
154
|
+
if (validation.mismatchReason && !dryRun) {
|
|
155
|
+
throw new AdtSafetyError(`generate_behavior_implementation: cross-reference validation failed (${validation.mismatchReason}). ` +
|
|
156
|
+
`Refusing to mutate. Re-run with dryRun=true to inspect the report and fix the source files first.`);
|
|
157
|
+
}
|
|
158
|
+
// ── Phase 3: scaffold plan ────────────────────────────────────────────
|
|
159
|
+
let requirements = extractRapHandlerRequirements(bdefSource);
|
|
160
|
+
if (targetAlias) {
|
|
161
|
+
requirements = requirements.filter((req) => req.entityAlias.toLowerCase() === targetAlias);
|
|
162
|
+
}
|
|
163
|
+
const combinedSource = [mainSource, definitionsSource, implementationsSource].filter(Boolean).join('\n\n');
|
|
164
|
+
const missingSignatures = findMissingRapHandlerRequirements(requirements, combinedSource);
|
|
165
|
+
const missingStubs = findMissingRapHandlerImplementationStubs(requirements, combinedSource);
|
|
166
|
+
const scaffoldPlan = applyRapHandlerScaffold({
|
|
167
|
+
main: mainSource,
|
|
168
|
+
definitions: definitionsSource || undefined,
|
|
169
|
+
implementations: implementationsSource || undefined,
|
|
170
|
+
}, missingSignatures, missingStubs);
|
|
171
|
+
const result = {
|
|
172
|
+
discovery: {
|
|
173
|
+
className: cleanClassName,
|
|
174
|
+
bdefName,
|
|
175
|
+
source: discoverySource,
|
|
176
|
+
classCategory: metadata.category,
|
|
177
|
+
},
|
|
178
|
+
validation,
|
|
179
|
+
scaffoldChanged: scaffoldPlan.changedSections.length > 0,
|
|
180
|
+
changedSections: scaffoldPlan.changedSections.filter((section) => section === 'main' || section === 'definitions' || section === 'implementations'),
|
|
181
|
+
inserted: {
|
|
182
|
+
signatures: scaffoldPlan.insertedSignatureCount,
|
|
183
|
+
stubs: scaffoldPlan.insertedImplementationStubCount,
|
|
184
|
+
autoCreatedSkeletons: (scaffoldPlan.skeletons?.createdDefinitions.length ?? 0) +
|
|
185
|
+
(scaffoldPlan.skeletons?.createdImplementations.length ?? 0),
|
|
186
|
+
},
|
|
187
|
+
required: requirements,
|
|
188
|
+
dryRun,
|
|
189
|
+
};
|
|
190
|
+
if (!save)
|
|
191
|
+
return result;
|
|
192
|
+
if (scaffoldPlan.changed.main && scaffoldPlan.sections.main !== mainSource) {
|
|
193
|
+
await save(classMainSourceUrl(cleanClassName), scaffoldPlan.sections.main);
|
|
194
|
+
}
|
|
195
|
+
if (scaffoldPlan.changed.definitions && scaffoldPlan.sections.definitions) {
|
|
196
|
+
await save(classIncludeUrlFor(cleanClassName, 'definitions'), scaffoldPlan.sections.definitions);
|
|
197
|
+
}
|
|
198
|
+
if (scaffoldPlan.changed.implementations && scaffoldPlan.sections.implementations) {
|
|
199
|
+
await save(classIncludeUrlFor(cleanClassName, 'implementations'), scaffoldPlan.sections.implementations);
|
|
200
|
+
}
|
|
201
|
+
return result;
|
|
202
|
+
};
|
|
203
|
+
if (dryRun)
|
|
204
|
+
return scaffold(client.http);
|
|
205
|
+
// Even activation-only reruns need the lock to establish that no source change is needed.
|
|
206
|
+
const result = await client.http.withStatefulSession(async (session) => {
|
|
207
|
+
const lock = await lockObject(session, client.safety, objectUrl, 'MODIFY');
|
|
208
|
+
try {
|
|
209
|
+
return await scaffold(session, (url, source) => updateSource(session, client.safety, url, source, lock.lockHandle, transport ?? (lock.corrNr || undefined)));
|
|
210
|
+
}
|
|
211
|
+
finally {
|
|
212
|
+
await unlockObject(session, objectUrl, lock.lockHandle);
|
|
213
|
+
}
|
|
214
|
+
});
|
|
222
215
|
// ── Phase 5: optional activation ──────────────────────────────────────
|
|
223
216
|
if (activateRequested) {
|
|
224
217
|
try {
|
|
@@ -259,4 +252,23 @@ export async function generateBehaviorImplementation(client, className, options
|
|
|
259
252
|
}
|
|
260
253
|
return result;
|
|
261
254
|
}
|
|
255
|
+
/** Read only the three RAP source sections. Serial reads keep one stateful SAP context in order. */
|
|
256
|
+
export async function readRapClassSources(http, safety, name) {
|
|
257
|
+
checkOperation(safety, OperationType.Read, 'GetRapClassSources');
|
|
258
|
+
const sections = {
|
|
259
|
+
main: (await http.get(classMainSourceUrl(name), { 'Cache-Control': 'no-cache' })).body,
|
|
260
|
+
};
|
|
261
|
+
for (const include of ['definitions', 'implementations']) {
|
|
262
|
+
try {
|
|
263
|
+
sections[include] = (await http.get(classIncludeUrlFor(name, include), { 'Cache-Control': 'no-cache' }, {
|
|
264
|
+
suppressNotFoundLog: true,
|
|
265
|
+
})).body;
|
|
266
|
+
}
|
|
267
|
+
catch (err) {
|
|
268
|
+
if (!isNotFoundError(err))
|
|
269
|
+
throw err;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
return sections;
|
|
273
|
+
}
|
|
262
274
|
//# sourceMappingURL=rap-generate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rap-generate.js","sourceRoot":"","sources":["../../src/adt/rap-generate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAGH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"rap-generate.js","sourceRoot":"","sources":["../../src/adt/rap-generate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAGH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE3E,OAAO,EACL,uBAAuB,EACvB,6BAA6B,EAC7B,wCAAwC,EACxC,iCAAiC,GAGlC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,cAAc,EAAE,aAAa,EAAqB,MAAM,aAAa,CAAC;AAgE/E;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,0BAA0B,CAAC,MAAyB;IAClE,IAAI,CAAC,MAAM,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IACpC,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC3C,OAAO,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACzC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,iBAAiB,GACrB,8FAA8F;IAC9F,gGAAgG;IAChG,uGAAuG;IACvG,sGAAsG;IACtG,+GAA+G;IAC/G,2GAA2G;IAC3G,gHAAgH,CAAC;AAEnH,4GAA4G;AAC5G,SAAS,kBAAkB,CACzB,IAAY,EACZ,OAAqE;IAErE,OAAO,0BAA0B,kBAAkB,CAAC,IAAI,CAAC,aAAa,OAAO,EAAE,CAAC;AAClF,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IAClC,OAAO,0BAA0B,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;AAC9D,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY;IACtC,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC;AAC/C,CAAC;AAED,MAAM,kBAAkB,GAAG,gCAAgC,CAAC;AAC5D,MAAM,eAAe,GAAG,sFAAsF,CAAC;AAC/G;;;;;;GAMG;AACH,MAAM,eAAe,GAAG,oFAAoF,CAAC;AAE7G;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,MAAiB,EACjB,SAAiB,EACjB,OAAO,GAAuB,EAAE;IAEhC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC;IACvC,MAAM,iBAAiB,GAAG,OAAO,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,eAAe;IACrE,MAAM,WAAW,GAAG,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrE,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IAEpC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC;QACvB,MAAM,IAAI,cAAc,CAAC,0DAA0D,CAAC,CAAC;IACvF,CAAC;IACD,MAAM,cAAc,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;IAExC,yEAAyE;IACzE,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;IAC/D,IAAI,QAAQ,CAAC,QAAQ,KAAK,cAAc,EAAE,CAAC;QACzC,MAAM,IAAI,cAAc,CACtB,2CAA2C,cAAc,8BAA8B;YACrF,mBAAmB,QAAQ,CAAC,QAAQ,IAAI,SAAS,yCAAyC;YAC1F,0FAA0F;YAC1F,yFAAyF,CAC5F,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC9C,IAAI,QAAQ,GAAG,YAAY,IAAI,QAAQ,CAAC,aAAa,EAAE,IAAI,IAAI,EAAE,CAAC;IAClE,MAAM,eAAe,GAAiC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC;IAClG,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,cAAc,CACtB,mEAAmE,cAAc,KAAK;YACpF,yFAAyF,CAC5F,CAAC;IACJ,CAAC;IACD,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IAElC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC;IACnC,MAAM,SAAS,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,KAAK,EACpB,OAAsB,EACtB,IAAqD,EACzB,EAAE;QAC9B,kFAAkF;QAClF,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QACrF,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC;QACnC,MAAM,iBAAiB,GAAG,UAAU,CAAC,WAAW,IAAI,EAAE,CAAC;QACvD,MAAM,qBAAqB,GAAG,UAAU,CAAC,eAAe,IAAI,EAAE,CAAC;QAE/D,MAAM,aAAa,GAAG,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1D,MAAM,cAAc,GAAG,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACxD,MAAM,WAAW,GAAG,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;QACtD,MAAM,YAAY,GAAG,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;QAExD,MAAM,UAAU,GAA0B;YACxC,oBAAoB,EAAE,OAAO,CAAC,WAAW,CAAC;YAC1C,cAAc,EAAE,OAAO,CAAC,YAAY,CAAC;SACtC,CAAC;QACF,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,UAAU,CAAC,IAAI,CAAC,mBAAmB,cAAc,4CAA4C,CAAC,CAAC;QACjG,CAAC;aAAM,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;YACpC,UAAU,CAAC,IAAI,CAAC,mBAAmB,WAAW,8BAA8B,QAAQ,EAAE,CAAC,CAAC;QAC1F,CAAC;QACD,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,UAAU,CAAC,IAAI,CAAC,QAAQ,QAAQ,oEAAoE,CAAC,CAAC;QACxG,CAAC;aAAM,IAAI,YAAY,KAAK,cAAc,CAAC,WAAW,EAAE,EAAE,CAAC;YACzD,UAAU,CAAC,IAAI,CAAC,QAAQ,QAAQ,gBAAgB,YAAY,8BAA8B,cAAc,EAAE,CAAC,CAAC;QAC9G,CAAC;QACD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,UAAU,CAAC,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,CAAC;QACD,IAAI,UAAU,CAAC,cAAc,IAAI,CAAC,MAAM,EAAE,CAAC;YACzC,MAAM,IAAI,cAAc,CACtB,wEAAwE,UAAU,CAAC,cAAc,KAAK;gBACpG,mGAAmG,CACtG,CAAC;QACJ,CAAC;QAED,yEAAyE;QACzE,IAAI,YAAY,GAAG,6BAA6B,CAAC,UAAU,CAAC,CAAC;QAC7D,IAAI,WAAW,EAAE,CAAC;YAChB,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,CAAC;QAC7F,CAAC;QAED,MAAM,cAAc,GAAG,CAAC,UAAU,EAAE,iBAAiB,EAAE,qBAAqB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3G,MAAM,iBAAiB,GAAG,iCAAiC,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;QAC1F,MAAM,YAAY,GAAG,wCAAwC,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;QAE5F,MAAM,YAAY,GAAG,uBAAuB,CAC1C;YACE,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,iBAAiB,IAAI,SAAS;YAC3C,eAAe,EAAE,qBAAqB,IAAI,SAAS;SACpD,EACD,iBAAiB,EACjB,YAAY,CACb,CAAC;QAEF,MAAM,MAAM,GAAsB;YAChC,SAAS,EAAE;gBACT,SAAS,EAAE,cAAc;gBACzB,QAAQ;gBACR,MAAM,EAAE,eAAe;gBACvB,aAAa,EAAE,QAAQ,CAAC,QAAQ;aACjC;YACD,UAAU;YACV,eAAe,EAAE,YAAY,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC;YACxD,eAAe,EAAE,YAAY,CAAC,eAAe,CAAC,MAAM,CAClD,CAAC,OAAO,EAAyD,EAAE,CACjE,OAAO,KAAK,MAAM,IAAI,OAAO,KAAK,aAAa,IAAI,OAAO,KAAK,iBAAiB,CACnF;YACD,QAAQ,EAAE;gBACR,UAAU,EAAE,YAAY,CAAC,sBAAsB;gBAC/C,KAAK,EAAE,YAAY,CAAC,+BAA+B;gBACnD,oBAAoB,EAClB,CAAC,YAAY,CAAC,SAAS,EAAE,kBAAkB,CAAC,MAAM,IAAI,CAAC,CAAC;oBACxD,CAAC,YAAY,CAAC,SAAS,EAAE,sBAAsB,CAAC,MAAM,IAAI,CAAC,CAAC;aAC/D;YACD,QAAQ,EAAE,YAAY;YACtB,MAAM;SACP,CAAC;QAEF,IAAI,CAAC,IAAI;YAAE,OAAO,MAAM,CAAC;QACzB,IAAI,YAAY,CAAC,OAAO,CAAC,IAAI,IAAI,YAAY,CAAC,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC3E,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7E,CAAC;QACD,IAAI,YAAY,CAAC,OAAO,CAAC,WAAW,IAAI,YAAY,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YAC1E,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,EAAE,aAAa,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QACnG,CAAC;QACD,IAAI,YAAY,CAAC,OAAO,CAAC,eAAe,IAAI,YAAY,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;YAClF,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,EAAE,iBAAiB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;QAC3G,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IACF,IAAI,MAAM;QAAE,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACzC,0FAA0F;IAC1F,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACrE,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC3E,IAAI,CAAC;YACH,OAAO,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAC7C,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,SAAS,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC,CAC5G,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,MAAM,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,yEAAyE;IACzE,IAAI,iBAAiB,EAAE,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,iBAAiB,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE;gBACxE,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,EAAE;aACzC,CAAC,CAAC;YACH,MAAM,cAAc,GAAG,CAAC,iBAAiB,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC5F,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,iBAAiB,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,GAAG,cAAc,CAAC,CAAC;YAC/E,IAAI,iBAAiB,CAAC,OAAO,EAAE,CAAC;gBAC9B,MAAM,CAAC,UAAU,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;YAC/D,CAAC;iBAAM,CAAC;gBACN,MAAM,kBAAkB,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAChF,MAAM,CAAC,UAAU,GAAG;oBAClB,OAAO,EAAE,KAAK;oBACd,QAAQ,EAAE,WAAW;oBACrB,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS;iBACzD,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,yEAAyE;YACzE,wEAAwE;YACxE,sEAAsE;YACtE,0EAA0E;YAC1E,0EAA0E;YAC1E,IAAI,GAAG,YAAY,WAAW,IAAI,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBACpE,MAAM,CAAC,UAAU,GAAG;oBAClB,OAAO,EAAE,KAAK;oBACd,QAAQ,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC;oBACvB,IAAI,EAAE,iBAAiB;iBACxB,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,oGAAoG;AACpG,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAAmB,EACnB,MAAoB,EACpB,IAAY;IAEZ,cAAc,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;IACjE,MAAM,QAAQ,GAA6B;QACzC,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI;KACvF,CAAC;IACF,KAAK,MAAM,OAAO,IAAI,CAAC,aAAa,EAAE,iBAAiB,CAAU,EAAE,CAAC;QAClE,IAAI,CAAC;YACH,QAAQ,CAAC,OAAO,CAAC,GAAG,CAClB,MAAM,IAAI,CAAC,GAAG,CACZ,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,EACjC,EAAE,eAAe,EAAE,UAAU,EAAE,EAC/B;gBACE,mBAAmB,EAAE,IAAI;aAC1B,CACF,CACF,CAAC,IAAI,CAAC;QACT,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;gBAAE,MAAM,GAAG,CAAC;QACvC,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -55,7 +55,7 @@ export declare function serverDrivenSourceFormat(code: string): SdoSourceFormat;
|
|
|
55
55
|
* here is the ONLY step needed to expose it — `btp: true` by construction (runtime availability is
|
|
56
56
|
* discovery-gated per system, so a type absent on a release degrades cleanly).
|
|
57
57
|
*/
|
|
58
|
-
export declare const SDO_TYPES: readonly ['DESD', 'DTSC', 'CSNM', 'EVTB', 'EVTO', 'COTA', 'DSFD', 'DTDC', 'UIAD', 'DRTY'];
|
|
58
|
+
export declare const SDO_TYPES: readonly ['DESD', 'DTSC', 'CSNM', 'EVTB', 'EVTO', 'COTA', 'DSFD', 'DTDC', 'UIAD', 'DRTY', 'APLO', 'SAJC', 'SAJT'];
|
|
59
59
|
/** Curated registry of high-value server-driven object types — keys are exactly SDO_TYPES. */
|
|
60
60
|
export declare const SDO_REGISTRY: {
|
|
61
61
|
DESD: {
|
|
@@ -168,6 +168,39 @@ export declare const SDO_REGISTRY: {
|
|
|
168
168
|
metadataContentType: string;
|
|
169
169
|
sourceFormat: "text";
|
|
170
170
|
};
|
|
171
|
+
APLO: {
|
|
172
|
+
metadataRootLocalName: 'blueSource';
|
|
173
|
+
metadataRootQName: 'blue:blueSource';
|
|
174
|
+
metadataNamespace: 'http://www.sap.com/wbobj/blue';
|
|
175
|
+
discoveryMarker: 'blues';
|
|
176
|
+
href: string;
|
|
177
|
+
label: string;
|
|
178
|
+
createType: string;
|
|
179
|
+
metadataContentType: string;
|
|
180
|
+
sourceFormat: "json";
|
|
181
|
+
};
|
|
182
|
+
SAJC: {
|
|
183
|
+
metadataRootLocalName: 'blueSource';
|
|
184
|
+
metadataRootQName: 'blue:blueSource';
|
|
185
|
+
metadataNamespace: 'http://www.sap.com/wbobj/blue';
|
|
186
|
+
discoveryMarker: 'blues';
|
|
187
|
+
href: string;
|
|
188
|
+
label: string;
|
|
189
|
+
createType: string;
|
|
190
|
+
metadataContentType: string;
|
|
191
|
+
sourceFormat: "json";
|
|
192
|
+
};
|
|
193
|
+
SAJT: {
|
|
194
|
+
metadataRootLocalName: 'blueSource';
|
|
195
|
+
metadataRootQName: 'blue:blueSource';
|
|
196
|
+
metadataNamespace: 'http://www.sap.com/wbobj/blue';
|
|
197
|
+
discoveryMarker: 'blues';
|
|
198
|
+
href: string;
|
|
199
|
+
label: string;
|
|
200
|
+
createType: string;
|
|
201
|
+
metadataContentType: string;
|
|
202
|
+
sourceFormat: "json";
|
|
203
|
+
};
|
|
171
204
|
};
|
|
172
205
|
/** True when `code` is one of the registered server-driven object types. */
|
|
173
206
|
export declare function isServerDrivenObjectType(code: string): boolean;
|
|
@@ -213,9 +246,10 @@ export declare function serverDrivenUnavailableMessage(tool: string, code: strin
|
|
|
213
246
|
/**
|
|
214
247
|
* Read a server-driven object: its metadata (blue:blueSource or dtdc:dtdcSource) + source (AFF JSON
|
|
215
248
|
* or DDL text). The source is JSON-parsed when possible (raw text otherwise). Throws AdtApiError 404
|
|
216
|
-
* for a nonexistent object.
|
|
249
|
+
* for a nonexistent object. Explicit versions must match the returned metadata; omission keeps
|
|
250
|
+
* SAP's developer view. Gate availability with supportsServerDrivenObject() on unknown systems.
|
|
217
251
|
*/
|
|
218
|
-
export declare function getServerDrivenObject(http: AdtHttpClient, safety: SafetyConfig, code: string, name: string): Promise<ServerDrivenObjectResult>;
|
|
252
|
+
export declare function getServerDrivenObject(http: AdtHttpClient, safety: SafetyConfig, code: string, name: string, version?: 'active' | 'inactive'): Promise<ServerDrivenObjectResult>;
|
|
219
253
|
/**
|
|
220
254
|
* Build the minimal metadata create body for a server-driven object — the per-type root element
|
|
221
255
|
* (blue:blueSource or dtdc:dtdcSource) with the verified `createType` for `adtcore:type`
|
|
@@ -229,7 +263,7 @@ export declare function getServerDrivenObject(http: AdtHttpClient, safety: Safet
|
|
|
229
263
|
* registered type.
|
|
230
264
|
*/
|
|
231
265
|
export type UiadLanguageVersion = 'standard' | 'keyUser' | 'cloudDevelopment';
|
|
232
|
-
export declare function buildServerDrivenMetadataXml(code: string, name: string, pkg: string, description: string, uiadLanguageVersion?: UiadLanguageVersion): string;
|
|
266
|
+
export declare function buildServerDrivenMetadataXml(code: string, name: string, pkg: string, description: string, uiadLanguageVersion?: UiadLanguageVersion, creationProperties?: Record<string, string>): string;
|
|
233
267
|
/** Options shared by the SDO write operations. */
|
|
234
268
|
export interface ServerDrivenWriteOptions {
|
|
235
269
|
transport?: string;
|
|
@@ -239,14 +273,15 @@ export interface ServerDrivenWriteOptions {
|
|
|
239
273
|
}
|
|
240
274
|
/**
|
|
241
275
|
* Create a server-driven object (metadata only — POST the <blue:blueSource> body to the collection
|
|
242
|
-
* href with the type's
|
|
243
|
-
*
|
|
276
|
+
* href with the type's metadata content-type). APLO is immediately active; other generic types
|
|
277
|
+
* need activation. Job objects also need their creation reference. Returns the raw response body.
|
|
244
278
|
*/
|
|
245
279
|
export declare function createServerDrivenObject(http: AdtHttpClient, safety: SafetyConfig, code: string, name: string, opts: {
|
|
246
280
|
package: string;
|
|
247
281
|
description: string;
|
|
248
282
|
transport?: string;
|
|
249
283
|
uiadLanguageVersion?: UiadLanguageVersion;
|
|
284
|
+
creationProperties?: Record<string, string>;
|
|
250
285
|
}): Promise<string>;
|
|
251
286
|
/**
|
|
252
287
|
* Write the source of a server-driven object: lock → PUT …/source/main → unlock (guaranteed via
|
|
@@ -256,9 +291,6 @@ export declare function createServerDrivenObject(http: AdtHttpClient, safety: Sa
|
|
|
256
291
|
* crud.ts safeUpdateSource).
|
|
257
292
|
*/
|
|
258
293
|
export declare function updateServerDrivenObjectSource(http: AdtHttpClient, safety: SafetyConfig, code: string, name: string, source: string, opts?: ServerDrivenWriteOptions): Promise<void>;
|
|
259
|
-
/**
|
|
260
|
-
* Delete a server-driven object: lock → http.delete(…?lockHandle=…) → best-effort unlock.
|
|
261
|
-
* The unlock is swallowed on failure (the object is already gone after the delete).
|
|
262
|
-
*/
|
|
294
|
+
/** Delete under a lock, then verify canonical metadata absence in a fresh request. */
|
|
263
295
|
export declare function deleteServerDrivenObject(http: AdtHttpClient, safety: SafetyConfig, code: string, name: string, opts?: ServerDrivenWriteOptions): Promise<void>;
|
|
264
296
|
//# sourceMappingURL=server-driven.d.ts.map
|