@cap-js/process 0.0.0 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +635 -0
- package/cds-plugin.js +2 -0
- package/dist/cds-plugin.js +4 -0
- package/dist/cds-plugin.js.map +1 -0
- package/dist/lib/api/index.js +23 -0
- package/dist/lib/api/index.js.map +1 -0
- package/dist/lib/api/local-workflow-store.js +85 -0
- package/dist/lib/api/local-workflow-store.js.map +1 -0
- package/dist/lib/api/process-api-client.js +103 -0
- package/dist/lib/api/process-api-client.js.map +1 -0
- package/dist/lib/api/workflow-client.js +174 -0
- package/dist/lib/api/workflow-client.js.map +1 -0
- package/dist/lib/auth/credentials.js +17 -0
- package/dist/lib/auth/credentials.js.map +1 -0
- package/dist/lib/auth/index.js +11 -0
- package/dist/lib/auth/index.js.map +1 -0
- package/dist/lib/auth/token-cache.js +67 -0
- package/dist/lib/auth/token-cache.js.map +1 -0
- package/dist/lib/auth/token-provider.js +32 -0
- package/dist/lib/auth/token-provider.js.map +1 -0
- package/dist/lib/build/constants.js +106 -0
- package/dist/lib/build/constants.js.map +1 -0
- package/dist/lib/build/index.js +22 -0
- package/dist/lib/build/index.js.map +1 -0
- package/dist/lib/build/plugin.js +126 -0
- package/dist/lib/build/plugin.js.map +1 -0
- package/dist/lib/build/validation-utils.js +309 -0
- package/dist/lib/build/validation-utils.js.map +1 -0
- package/dist/lib/build/validations.js +185 -0
- package/dist/lib/build/validations.js.map +1 -0
- package/dist/lib/constants.js +78 -0
- package/dist/lib/constants.js.map +1 -0
- package/dist/lib/handlers/annotationCache.js +47 -0
- package/dist/lib/handlers/annotationCache.js.map +1 -0
- package/dist/lib/handlers/annotationHandlers.js +57 -0
- package/dist/lib/handlers/annotationHandlers.js.map +1 -0
- package/dist/lib/handlers/index.js +26 -0
- package/dist/lib/handlers/index.js.map +1 -0
- package/dist/lib/handlers/onDeleteUtils.js +63 -0
- package/dist/lib/handlers/onDeleteUtils.js.map +1 -0
- package/dist/lib/handlers/processActionHandler.js +55 -0
- package/dist/lib/handlers/processActionHandler.js.map +1 -0
- package/dist/lib/handlers/processCancel.js +28 -0
- package/dist/lib/handlers/processCancel.js.map +1 -0
- package/dist/lib/handlers/processResume.js +28 -0
- package/dist/lib/handlers/processResume.js.map +1 -0
- package/dist/lib/handlers/processService.js +125 -0
- package/dist/lib/handlers/processService.js.map +1 -0
- package/dist/lib/handlers/processStart.js +156 -0
- package/dist/lib/handlers/processStart.js.map +1 -0
- package/dist/lib/handlers/processSuspend.js +28 -0
- package/dist/lib/handlers/processSuspend.js.map +1 -0
- package/dist/lib/handlers/utils.js +124 -0
- package/dist/lib/handlers/utils.js.map +1 -0
- package/dist/lib/index.js +43 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/processImport.js +450 -0
- package/dist/lib/processImport.js.map +1 -0
- package/dist/lib/processImportRegistration.js +27 -0
- package/dist/lib/processImportRegistration.js.map +1 -0
- package/dist/lib/shared/businessKey-helper.js +27 -0
- package/dist/lib/shared/businessKey-helper.js.map +1 -0
- package/dist/lib/shared/input-parser.js +650 -0
- package/dist/lib/shared/input-parser.js.map +1 -0
- package/dist/lib/types/csn-extensions.js +37 -0
- package/dist/lib/types/csn-extensions.js.map +1 -0
- package/dist/srv/BTPProcessService.js +117 -0
- package/dist/srv/BTPProcessService.js.map +1 -0
- package/dist/srv/localProcessService.js +152 -0
- package/dist/srv/localProcessService.js.map +1 -0
- package/package.json +98 -1
- package/srv/BTPProcessService.cds +42 -0
- package/srv/BTPProcessService.js +2 -0
- package/srv/localProcessService.cds +3 -0
- 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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"}
|