@cap-js/process 0.0.0 → 0.1.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.
Files changed (76) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +635 -0
  3. package/cds-plugin.js +2 -0
  4. package/dist/cds-plugin.js +4 -0
  5. package/dist/cds-plugin.js.map +1 -0
  6. package/dist/lib/api/index.js +23 -0
  7. package/dist/lib/api/index.js.map +1 -0
  8. package/dist/lib/api/local-workflow-store.js +85 -0
  9. package/dist/lib/api/local-workflow-store.js.map +1 -0
  10. package/dist/lib/api/process-api-client.js +103 -0
  11. package/dist/lib/api/process-api-client.js.map +1 -0
  12. package/dist/lib/api/workflow-client.js +174 -0
  13. package/dist/lib/api/workflow-client.js.map +1 -0
  14. package/dist/lib/auth/credentials.js +17 -0
  15. package/dist/lib/auth/credentials.js.map +1 -0
  16. package/dist/lib/auth/index.js +11 -0
  17. package/dist/lib/auth/index.js.map +1 -0
  18. package/dist/lib/auth/token-cache.js +67 -0
  19. package/dist/lib/auth/token-cache.js.map +1 -0
  20. package/dist/lib/auth/token-provider.js +32 -0
  21. package/dist/lib/auth/token-provider.js.map +1 -0
  22. package/dist/lib/build/constants.js +106 -0
  23. package/dist/lib/build/constants.js.map +1 -0
  24. package/dist/lib/build/index.js +22 -0
  25. package/dist/lib/build/index.js.map +1 -0
  26. package/dist/lib/build/plugin.js +126 -0
  27. package/dist/lib/build/plugin.js.map +1 -0
  28. package/dist/lib/build/validation-utils.js +309 -0
  29. package/dist/lib/build/validation-utils.js.map +1 -0
  30. package/dist/lib/build/validations.js +185 -0
  31. package/dist/lib/build/validations.js.map +1 -0
  32. package/dist/lib/constants.js +78 -0
  33. package/dist/lib/constants.js.map +1 -0
  34. package/dist/lib/handlers/annotationCache.js +47 -0
  35. package/dist/lib/handlers/annotationCache.js.map +1 -0
  36. package/dist/lib/handlers/annotationHandlers.js +57 -0
  37. package/dist/lib/handlers/annotationHandlers.js.map +1 -0
  38. package/dist/lib/handlers/index.js +26 -0
  39. package/dist/lib/handlers/index.js.map +1 -0
  40. package/dist/lib/handlers/onDeleteUtils.js +63 -0
  41. package/dist/lib/handlers/onDeleteUtils.js.map +1 -0
  42. package/dist/lib/handlers/processActionHandler.js +55 -0
  43. package/dist/lib/handlers/processActionHandler.js.map +1 -0
  44. package/dist/lib/handlers/processCancel.js +28 -0
  45. package/dist/lib/handlers/processCancel.js.map +1 -0
  46. package/dist/lib/handlers/processResume.js +28 -0
  47. package/dist/lib/handlers/processResume.js.map +1 -0
  48. package/dist/lib/handlers/processService.js +125 -0
  49. package/dist/lib/handlers/processService.js.map +1 -0
  50. package/dist/lib/handlers/processStart.js +156 -0
  51. package/dist/lib/handlers/processStart.js.map +1 -0
  52. package/dist/lib/handlers/processSuspend.js +28 -0
  53. package/dist/lib/handlers/processSuspend.js.map +1 -0
  54. package/dist/lib/handlers/utils.js +124 -0
  55. package/dist/lib/handlers/utils.js.map +1 -0
  56. package/dist/lib/index.js +43 -0
  57. package/dist/lib/index.js.map +1 -0
  58. package/dist/lib/processImport.js +449 -0
  59. package/dist/lib/processImport.js.map +1 -0
  60. package/dist/lib/processImportRegistration.js +27 -0
  61. package/dist/lib/processImportRegistration.js.map +1 -0
  62. package/dist/lib/shared/businessKey-helper.js +27 -0
  63. package/dist/lib/shared/businessKey-helper.js.map +1 -0
  64. package/dist/lib/shared/input-parser.js +650 -0
  65. package/dist/lib/shared/input-parser.js.map +1 -0
  66. package/dist/lib/types/csn-extensions.js +37 -0
  67. package/dist/lib/types/csn-extensions.js.map +1 -0
  68. package/dist/srv/BTPProcessService.js +117 -0
  69. package/dist/srv/BTPProcessService.js.map +1 -0
  70. package/dist/srv/localProcessService.js +152 -0
  71. package/dist/srv/localProcessService.js.map +1 -0
  72. package/package.json +98 -1
  73. package/srv/BTPProcessService.cds +42 -0
  74. package/srv/BTPProcessService.js +2 -0
  75. package/srv/localProcessService.cds +3 -0
  76. package/srv/localProcessService.js +2 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../lib/build/constants.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.ProcessValidationPlugin = void 0;
18
+ var plugin_1 = require("./plugin");
19
+ Object.defineProperty(exports, "ProcessValidationPlugin", { enumerable: true, get: function () { return plugin_1.ProcessValidationPlugin; } });
20
+ __exportStar(require("./validations"), exports);
21
+ __exportStar(require("./validation-utils"), exports);
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/build/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,mCAAmD;AAA1C,iHAAA,uBAAuB,OAAA;AAChC,gDAA8B;AAC9B,qDAAmC"}
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ProcessValidationPlugin = void 0;
7
+ const cds_1 = __importDefault(require("@sap/cds"));
8
+ const index_1 = require("./index");
9
+ const constants_1 = require("../constants");
10
+ const LIFECYCLE_CONFIGS = [
11
+ {
12
+ annotationOn: constants_1.PROCESS_CANCEL_ON,
13
+ annotationCascade: constants_1.PROCESS_CANCEL_CASCADE,
14
+ annotationIf: constants_1.PROCESS_CANCEL_IF,
15
+ annotationPrefix: constants_1.PROCESS_CANCEL,
16
+ },
17
+ {
18
+ annotationOn: constants_1.PROCESS_SUSPEND_ON,
19
+ annotationCascade: constants_1.PROCESS_SUSPEND_CASCADE,
20
+ annotationIf: constants_1.PROCESS_SUSPEND_IF,
21
+ annotationPrefix: constants_1.PROCESS_SUSPEND,
22
+ },
23
+ {
24
+ annotationOn: constants_1.PROCESS_RESUME_ON,
25
+ annotationCascade: constants_1.PROCESS_RESUME_CASCADE,
26
+ annotationIf: constants_1.PROCESS_RESUME_IF,
27
+ annotationPrefix: constants_1.PROCESS_RESUME,
28
+ },
29
+ ];
30
+ const LOG = cds_1.default.log('process-build');
31
+ // cds.build is only available during build phase, not during serve/watch
32
+ const Plugin = cds_1.default.build?.Plugin;
33
+ const ERROR = Plugin?.ERROR;
34
+ // Base class - use Plugin if available, otherwise a dummy class
35
+ const BuildPluginBase = Plugin ?? class {
36
+ };
37
+ class ProcessValidationPlugin extends BuildPluginBase {
38
+ static taskDefaults = { src: '.' };
39
+ static hasTask() {
40
+ return true;
41
+ }
42
+ async build() {
43
+ const model = await this.model();
44
+ if (!model)
45
+ return;
46
+ LOG.debug(`Validating ${constants_1.PROCESS_PREFIX}.* annotations...`);
47
+ const processDefinitions = (0, index_1.getProcessDefinitions)(model.definitions);
48
+ const definitions = model.definitions ?? {};
49
+ for (const name in definitions) {
50
+ if (Object.hasOwn(definitions, name)) {
51
+ const def = definitions[name];
52
+ if (def.kind !== 'entity')
53
+ continue;
54
+ // Validate lifecycle annotations (cancel, suspend, resume) using configuration
55
+ for (const config of LIFECYCLE_CONFIGS) {
56
+ this.validateProcessLifecycleAnnotations(name, def, config.annotationOn, config.annotationCascade, config.annotationIf, config.annotationPrefix);
57
+ }
58
+ this.validateStartAnnotations(name, def, processDefinitions, model.definitions || {});
59
+ }
60
+ }
61
+ for (const message of this.messages) {
62
+ if (message.severity === ERROR) {
63
+ throw new cds_1.default.build.BuildError(`Process annotation validation failed.`);
64
+ }
65
+ }
66
+ LOG.debug('All process annotations validated successfully.');
67
+ }
68
+ validateStartAnnotations(entityName, def, processDefinitions, allDefinitions) {
69
+ // check unknown annotations
70
+ const allowedAnnotations = [
71
+ constants_1.PROCESS_START_ID,
72
+ constants_1.PROCESS_START_ON,
73
+ constants_1.PROCESS_START_IF,
74
+ constants_1.PROCESS_START_INPUTS,
75
+ ];
76
+ (0, index_1.validateAllowedAnnotations)(allowedAnnotations, def, entityName, constants_1.PROCESS_START, this);
77
+ const hasId = def[constants_1.PROCESS_START_ID] !== undefined;
78
+ const hasOn = def[constants_1.PROCESS_START_ON] !== undefined;
79
+ const hasIf = def[constants_1.PROCESS_START_IF] !== undefined;
80
+ // required fields
81
+ (0, index_1.validateRequiredStartAnnotations)(hasOn, hasId, entityName, this);
82
+ const processDef = processDefinitions.get(def[constants_1.PROCESS_START_ID]);
83
+ if (hasId) {
84
+ (0, index_1.validateIdAnnotation)(def, entityName, processDef, this);
85
+ }
86
+ if (hasOn) {
87
+ (0, index_1.validateOnAnnotation)(def, entityName, constants_1.PROCESS_START_ON, this);
88
+ }
89
+ if (hasIf) {
90
+ (0, index_1.validateIfAnnotation)(def, entityName, constants_1.PROCESS_START_IF, this);
91
+ }
92
+ if (hasId && hasOn && processDef) {
93
+ const processInputs = allDefinitions[`${processDef.name}.ProcessInputs`];
94
+ if (typeof processInputs !== 'undefined') {
95
+ (0, index_1.validateInputTypes)(this, entityName, def, processInputs, allDefinitions);
96
+ }
97
+ }
98
+ }
99
+ // generic handler for suspend/resume/cancel annotations --> have same structure
100
+ validateProcessLifecycleAnnotations(entityName, def, annotationOn, annotationCascade, annotationIf, annotationPrefix) {
101
+ // check for unknown annotations
102
+ const allowedAnnotations = [annotationOn, annotationCascade, annotationIf];
103
+ (0, index_1.validateAllowedAnnotations)(allowedAnnotations, def, entityName, annotationPrefix, this);
104
+ const hasOn = def[annotationOn] !== undefined;
105
+ const hasCascade = def[annotationCascade] !== undefined;
106
+ const hasIf = def[annotationIf] !== undefined;
107
+ const hasBusinessKey = def[constants_1.BUSINESS_KEY] !== undefined;
108
+ const hasAnyAnnotationWithPrefix = Object.keys(def).some((key) => key.startsWith(annotationPrefix + '.'));
109
+ // required fields - .on is required if any annotation with this prefix is defined
110
+ (0, index_1.validateRequiredGenericAnnotations)(hasOn, hasAnyAnnotationWithPrefix, entityName, annotationOn, annotationPrefix, hasBusinessKey, this);
111
+ if (hasOn) {
112
+ (0, index_1.validateOnAnnotation)(def, entityName, annotationOn, this);
113
+ }
114
+ if (hasCascade) {
115
+ (0, index_1.validateCascadeAnnotation)(def, entityName, annotationCascade, this);
116
+ }
117
+ if (hasIf) {
118
+ (0, index_1.validateIfAnnotation)(def, entityName, annotationIf, this);
119
+ }
120
+ if (hasOn && hasBusinessKey) {
121
+ (0, index_1.validateBusinessKeyAnnotation)(def, entityName, this);
122
+ }
123
+ }
124
+ }
125
+ exports.ProcessValidationPlugin = ProcessValidationPlugin;
126
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../lib/build/plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,309 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createCsnEntityContext = createCsnEntityContext;
4
+ exports.getProcessDefInputsAndTypes = getProcessDefInputsAndTypes;
5
+ exports.getProcessDefinitions = getProcessDefinitions;
6
+ exports.getParsedInputEntries = getParsedInputEntries;
7
+ exports.getElementNamesAndTypes = getElementNamesAndTypes;
8
+ const constants_1 = require("../constants");
9
+ const input_parser_1 = require("../shared/input-parser");
10
+ /**
11
+ * Creates an EntityContext for build-time CSN entities
12
+ */
13
+ function createCsnEntityContext(elements, allDefinitions) {
14
+ return {
15
+ getElement: (name) => {
16
+ const element = elements[name];
17
+ if (!element)
18
+ return undefined;
19
+ const isAssocOrComp = element.type === 'cds.Association' || element.type === 'cds.Composition';
20
+ const targetDef = element.target ? allDefinitions[element.target] : undefined;
21
+ const childElements = targetDef && targetDef.kind === 'entity'
22
+ ? targetDef.elements
23
+ : {};
24
+ const targetEntity = createCsnEntityContext(childElements, allDefinitions);
25
+ return { isAssocOrComp, targetEntity };
26
+ },
27
+ };
28
+ }
29
+ /**
30
+ * Checks if a type name is a complex (non-CDS built-in) type
31
+ */
32
+ function isComplexType(typeName) {
33
+ return !!typeName && !typeName.startsWith('cds.');
34
+ }
35
+ /**
36
+ * Checks if an object has an 'elements' property (structured type)
37
+ */
38
+ function hasElements(obj) {
39
+ return typeof obj === 'object' && obj !== null && 'elements' in obj;
40
+ }
41
+ /**
42
+ * Checks if an object has an 'items' property (array type)
43
+ */
44
+ function hasItems(obj) {
45
+ return typeof obj === 'object' && obj !== null && 'items' in obj;
46
+ }
47
+ /**
48
+ * Resolves an inline array element (has items but no type) to ElementType
49
+ * Handles two cases:
50
+ * 1. `items: many TypeName` -> items.type is set
51
+ * 2. `items: many { ID: UUID; }` -> items.elements is set (anonymous inline type)
52
+ */
53
+ function resolveInlineArrayElement(element, allDefinitions, visited) {
54
+ if (!element.items)
55
+ return null;
56
+ const isMandatory = element.notNull ?? false;
57
+ const itemType = element.items.type;
58
+ // Case 1: Anonymous inline array type with elements directly (e.g., `items: many { ID: UUID; }`)
59
+ if (!itemType && element.items.elements) {
60
+ const nestedElements = getProcessDefInputsAndTypes({ elements: element.items.elements }, allDefinitions, visited);
61
+ return { type: 'anonymous', isMandatory, isArray: true, properties: nestedElements };
62
+ }
63
+ // Case 2: Named type reference (e.g., `items: many ItemType`)
64
+ if (!itemType)
65
+ return null;
66
+ // Complex array item type - need to resolve nested elements
67
+ if (isComplexType(itemType) && !visited.has(itemType)) {
68
+ const newVisited = new Set(visited);
69
+ newVisited.add(itemType);
70
+ const typeDef = allDefinitions[itemType];
71
+ if (typeDef && hasElements(typeDef)) {
72
+ const nestedElements = getProcessDefInputsAndTypes(typeDef, allDefinitions, newVisited);
73
+ return { type: itemType, isMandatory, isArray: true, properties: nestedElements };
74
+ }
75
+ }
76
+ // Primitive array type or already visited
77
+ return { type: itemType, isMandatory, isArray: true };
78
+ }
79
+ /**
80
+ * Resolves an array type definition (type that has items property)
81
+ */
82
+ function resolveArrayTypeDef(typeDef, element, allDefinitions, visited) {
83
+ const itemType = typeDef.items?.type;
84
+ if (!itemType)
85
+ return null;
86
+ const isMandatory = element.notNull ?? false;
87
+ // Complex array item type
88
+ if (isComplexType(itemType) && !visited.has(itemType)) {
89
+ const itemVisited = new Set(visited);
90
+ itemVisited.add(itemType);
91
+ const itemTypeDef = allDefinitions[itemType];
92
+ if (itemTypeDef && hasElements(itemTypeDef)) {
93
+ const nestedElements = getProcessDefInputsAndTypes(itemTypeDef, allDefinitions, itemVisited);
94
+ return { type: itemType, isMandatory, isArray: true, properties: nestedElements };
95
+ }
96
+ return { type: itemType, isMandatory, isArray: true };
97
+ }
98
+ // Primitive array type
99
+ return { type: itemType, isMandatory, isArray: true };
100
+ }
101
+ /**
102
+ * Resolves a complex type element (non-CDS type) to ElementType
103
+ */
104
+ function resolveComplexTypeElement(element, allDefinitions, visited) {
105
+ // Already visited - skip to prevent cycles
106
+ if (visited.has(element.type))
107
+ return null;
108
+ const newVisited = new Set(visited);
109
+ newVisited.add(element.type);
110
+ const typeDef = allDefinitions[element.type];
111
+ const isMandatory = element.notNull ?? false;
112
+ // Type not found in definitions
113
+ if (!typeDef) {
114
+ return { type: element.type, isMandatory };
115
+ }
116
+ // Check if this type is an array type (has items)
117
+ if (hasItems(typeDef)) {
118
+ return resolveArrayTypeDef(typeDef, element, allDefinitions, newVisited);
119
+ }
120
+ // Regular complex type with elements
121
+ if (hasElements(typeDef)) {
122
+ const nestedElements = getProcessDefInputsAndTypes(typeDef, allDefinitions, newVisited);
123
+ return { type: element.type, isMandatory, isArray: false, properties: nestedElements };
124
+ }
125
+ // Type found but has no elements and is not array
126
+ return { type: element.type, isMandatory };
127
+ }
128
+ /**
129
+ * Resolves a single element to its ElementType representation
130
+ */
131
+ function resolveElementToType(element, allDefinitions, visited) {
132
+ // Case 1: Inline array type (has items directly, no type property)
133
+ if (element.type === undefined && element.items) {
134
+ return resolveInlineArrayElement(element, allDefinitions, visited);
135
+ }
136
+ // Case 2: Complex type (non-CDS type)
137
+ if (element.type && isComplexType(element.type)) {
138
+ return resolveComplexTypeElement(element, allDefinitions, visited);
139
+ }
140
+ // Case 3: Primitive CDS type
141
+ if (element.type) {
142
+ return { type: element.type, isMandatory: element.notNull ?? false };
143
+ }
144
+ return null;
145
+ }
146
+ /**
147
+ * Extracts input types from a process definition
148
+ */
149
+ function getProcessDefInputsAndTypes(processDef, allDefinitions, visited = new Set()) {
150
+ const result = {};
151
+ // Process definitions store inputs in 'elements'
152
+ if (!hasElements(processDef)) {
153
+ return result;
154
+ }
155
+ const elements = processDef.elements;
156
+ for (const name in elements) {
157
+ if (Object.hasOwn(elements, name)) {
158
+ const element = elements[name];
159
+ const resolvedType = resolveElementToType(element, allDefinitions, visited);
160
+ if (resolvedType) {
161
+ result[name] = resolvedType;
162
+ }
163
+ }
164
+ }
165
+ return result;
166
+ }
167
+ /**
168
+ * Gets all process definitions from model definitions
169
+ */
170
+ function getProcessDefinitions(allDefinitions) {
171
+ const processMap = new Map();
172
+ if (!allDefinitions) {
173
+ return processMap;
174
+ }
175
+ for (const name in allDefinitions) {
176
+ if (Object.hasOwn(allDefinitions, name)) {
177
+ const def = allDefinitions[name];
178
+ const processId = def[constants_1.PROCESS_PREFIX];
179
+ if (processId) {
180
+ def.name = name;
181
+ processMap.set(processId, def);
182
+ }
183
+ }
184
+ }
185
+ return processMap;
186
+ }
187
+ function getParsedInputEntries(def) {
188
+ const inputsCSN = def[constants_1.PROCESS_START_INPUTS];
189
+ if (!inputsCSN || inputsCSN.length === 0) {
190
+ return undefined;
191
+ }
192
+ const parsedEntries = (0, input_parser_1.parseInputsArray)(inputsCSN);
193
+ return parsedEntries;
194
+ }
195
+ /**
196
+ * Extracts element names and types from an entity definition based on the inputs array.
197
+ * If no inputs array is defined, returns all entity fields.
198
+ */
199
+ function getElementNamesAndTypes(parsedEntries, def, allDefinitions, entityContext) {
200
+ const elements = def.elements ?? {};
201
+ // If inputs array is defined, parse it to get specific fields
202
+ if (parsedEntries) {
203
+ const inputTree = (0, input_parser_1.buildInputTree)(parsedEntries, entityContext);
204
+ return convertTreeToElementTypes(inputTree, elements, allDefinitions);
205
+ }
206
+ // No inputs array defined - return all entity fields
207
+ return getAllElementTypes(elements, allDefinitions);
208
+ }
209
+ /**
210
+ * Converts InputTreeNode[] to Record<string, ElementType>
211
+ */
212
+ function convertTreeToElementTypes(tree, elements, allDefinitions) {
213
+ const result = {};
214
+ for (const node of tree) {
215
+ // Handle wildcard '*' (from $self) - expand all elements
216
+ if (node.sourceElement === input_parser_1.WILDCARD) {
217
+ const allTypes = getAllElementTypes(elements, allDefinitions);
218
+ Object.assign(result, allTypes);
219
+ continue;
220
+ }
221
+ const element = elements[node.sourceElement];
222
+ if (!element)
223
+ continue;
224
+ const keyName = node.targetVariable ?? node.sourceElement;
225
+ const isMandatory = element['@mandatory'] === true;
226
+ if (node.associatedInputElements !== undefined) {
227
+ // This is an association/composition
228
+ const targetDef = element.target ? allDefinitions[element.target] : undefined;
229
+ const childElements = targetDef && targetDef.kind === 'entity'
230
+ ? targetDef.elements
231
+ : {};
232
+ if (node.associatedInputElements.length > 0) {
233
+ // Has specific nested fields
234
+ result[keyName] = {
235
+ type: element.type,
236
+ isMandatory,
237
+ isArray: element.cardinality?.max === '*',
238
+ properties: convertTreeToElementTypes(node.associatedInputElements, childElements, allDefinitions),
239
+ };
240
+ }
241
+ else {
242
+ // Expand all (*) - get all child element types
243
+ result[keyName] = {
244
+ type: element.type,
245
+ isMandatory,
246
+ isArray: element.cardinality?.max === '*',
247
+ properties: getAllElementTypes(childElements, allDefinitions),
248
+ };
249
+ }
250
+ }
251
+ else {
252
+ // Simple field
253
+ result[keyName] = { type: element.type, isMandatory };
254
+ }
255
+ }
256
+ return result;
257
+ }
258
+ /**
259
+ * Gets all element types from an elements record (no filtering)
260
+ * Skips associations (they're structural, not data fields - their managed foreign keys are separate)
261
+ * @param visitedTargets - Set of already visited target entity names (to prevent infinite recursion)
262
+ */
263
+ function getAllElementTypes(elements, allDefinitions, visitedTargets = new Set()) {
264
+ const result = {};
265
+ for (const name in elements) {
266
+ const element = elements[name];
267
+ const isAssociation = element.type === 'cds.Association';
268
+ const isComposition = element.type === 'cds.Composition';
269
+ const isMandatory = element['@mandatory'] === true;
270
+ // Skip associations - they're structural metadata, not data fields
271
+ // Their managed foreign keys (e.g., parent_ID) are separate elements
272
+ if (isAssociation) {
273
+ continue;
274
+ }
275
+ if (isComposition) {
276
+ // For compositions, get the target entity's elements
277
+ const targetDef = element.target ? allDefinitions[element.target] : undefined;
278
+ // Skip if we've already visited this target (cyclic reference)
279
+ if (element.target && visitedTargets.has(element.target)) {
280
+ result[name] = {
281
+ type: element.type,
282
+ isMandatory,
283
+ isArray: element.cardinality?.max === '*',
284
+ properties: {}, // Don't expand cyclic references
285
+ };
286
+ continue;
287
+ }
288
+ const childElements = targetDef && targetDef.kind === 'entity'
289
+ ? targetDef.elements
290
+ : {};
291
+ // Track visited target to prevent cycles
292
+ const newVisited = new Set(visitedTargets);
293
+ if (element.target) {
294
+ newVisited.add(element.target);
295
+ }
296
+ result[name] = {
297
+ type: element.type,
298
+ isMandatory,
299
+ isArray: element.cardinality?.max === '*',
300
+ properties: getAllElementTypes(childElements, allDefinitions, newVisited),
301
+ };
302
+ }
303
+ else {
304
+ result[name] = { type: element.type, isMandatory };
305
+ }
306
+ }
307
+ return result;
308
+ }
309
+ //# sourceMappingURL=validation-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation-utils.js","sourceRoot":"","sources":["../../../lib/build/validation-utils.ts"],"names":[],"mappings":"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"}