@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,185 @@
|
|
|
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.validateAllowedAnnotations = validateAllowedAnnotations;
|
|
7
|
+
exports.validateOnAnnotation = validateOnAnnotation;
|
|
8
|
+
exports.validateIfAnnotation = validateIfAnnotation;
|
|
9
|
+
exports.validateBusinessKeyAnnotation = validateBusinessKeyAnnotation;
|
|
10
|
+
exports.validateCascadeAnnotation = validateCascadeAnnotation;
|
|
11
|
+
exports.validateRequiredStartAnnotations = validateRequiredStartAnnotations;
|
|
12
|
+
exports.validateIdAnnotation = validateIdAnnotation;
|
|
13
|
+
exports.validateRequiredGenericAnnotations = validateRequiredGenericAnnotations;
|
|
14
|
+
exports.validateInputTypes = validateInputTypes;
|
|
15
|
+
const cds_1 = __importDefault(require("@sap/cds"));
|
|
16
|
+
const constants_1 = require("../constants");
|
|
17
|
+
const validation_utils_1 = require("./validation-utils");
|
|
18
|
+
const constants_2 = require("./constants");
|
|
19
|
+
const Plugin = cds_1.default.build?.Plugin;
|
|
20
|
+
const ERROR = Plugin?.ERROR;
|
|
21
|
+
const WARNING = Plugin?.WARNING;
|
|
22
|
+
const VALID_EVENTS = ['CREATE', 'READ', 'UPDATE', 'DELETE', '*'];
|
|
23
|
+
function validateAllowedAnnotations(allowedAnnotations, def, entityName, annotationPrefix, buildPlugin) {
|
|
24
|
+
for (const key of Object.keys(def)) {
|
|
25
|
+
if (key.startsWith(annotationPrefix + '.') && !allowedAnnotations.includes(key)) {
|
|
26
|
+
buildPlugin.pushMessage((0, constants_2.WARNING_UNKNOWN_ANNOTATION)(entityName, key, allowedAnnotations), WARNING);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function validateOnAnnotation(def, entityName, annotationOn, buildPlugin) {
|
|
31
|
+
if (typeof def[annotationOn] !== 'string') {
|
|
32
|
+
buildPlugin.pushMessage((0, constants_2.ERROR_ANNOTATION_MUST_BE_STRING)(entityName, annotationOn), ERROR);
|
|
33
|
+
}
|
|
34
|
+
const actions = def.actions ? Object.keys(def.actions) : [];
|
|
35
|
+
const annotationValue = def[annotationOn];
|
|
36
|
+
if (!VALID_EVENTS.includes(annotationValue) && !actions.includes(annotationValue)) {
|
|
37
|
+
buildPlugin.pushMessage((0, constants_2.ERROR_ANNOTATION_MUST_BE_EVENT_OR_ACTION)(entityName, annotationOn), ERROR);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function validateIfAnnotation(def, entityName, annotationIf, buildPlugin) {
|
|
41
|
+
const ifExpr = def[annotationIf];
|
|
42
|
+
if (!ifExpr || !ifExpr['='] || !ifExpr['xpr']) {
|
|
43
|
+
buildPlugin.pushMessage((0, constants_2.ERROR_IF_MUST_BE_EXPRESSION)(entityName, annotationIf), ERROR);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function validateBusinessKeyAnnotation(def, entityName, buildPlugin) {
|
|
47
|
+
const bKeyExpr = def[constants_1.BUSINESS_KEY];
|
|
48
|
+
if (!bKeyExpr || !bKeyExpr['='] || (!bKeyExpr['xpr'] && !bKeyExpr['ref'])) {
|
|
49
|
+
buildPlugin.pushMessage((0, constants_2.ERROR_BUSINESS_KEY_MUST_BE_EXPRESSION)(entityName, constants_1.BUSINESS_KEY), ERROR);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function validateCascadeAnnotation(def, entityName, annotationCascade, buildPlugin) {
|
|
53
|
+
if (typeof def[annotationCascade] !== 'boolean') {
|
|
54
|
+
buildPlugin.pushMessage((0, constants_2.ERROR_CASCADE_MUST_BE_BOOLEAN)(entityName, annotationCascade), ERROR);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
function validateRequiredStartAnnotations(hasOn, hasId, entityName, buildPlugin) {
|
|
58
|
+
if (hasOn && !hasId) {
|
|
59
|
+
buildPlugin.pushMessage((0, constants_2.ERROR_START_ON_REQUIRES_ID)(entityName, constants_1.PROCESS_START_ON, constants_1.PROCESS_START_ID), ERROR);
|
|
60
|
+
}
|
|
61
|
+
if (hasId && !hasOn) {
|
|
62
|
+
buildPlugin.pushMessage((0, constants_2.ERROR_START_ID_REQUIRES_ON)(entityName, constants_1.PROCESS_START_ID, constants_1.PROCESS_START_ON), ERROR);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
function validateIdAnnotation(def, entityName, processDef, buildPlugin) {
|
|
66
|
+
if (typeof def[constants_1.PROCESS_START_ID] !== 'string') {
|
|
67
|
+
buildPlugin.pushMessage((0, constants_2.ERROR_START_ID_MUST_BE_STRING)(entityName, constants_1.PROCESS_START_ID), ERROR);
|
|
68
|
+
}
|
|
69
|
+
if (!processDef) {
|
|
70
|
+
buildPlugin.pushMessage((0, constants_2.WARNING_NO_PROCESS_DEFINITION)(entityName, constants_1.PROCESS_START_ID, def[constants_1.PROCESS_START_ID]), WARNING);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
function validateRequiredGenericAnnotations(hasOn, hasAnyAnnotationWithPrefix, entityName, annotationOn, annotationPrefix, hasBusinessKey, buildPlugin) {
|
|
74
|
+
// If any annotation with this prefix is defined, .on is required
|
|
75
|
+
if (hasAnyAnnotationWithPrefix && !hasOn) {
|
|
76
|
+
buildPlugin.pushMessage((0, constants_2.ERROR_ON_REQUIRED)(entityName, annotationPrefix, annotationOn), ERROR);
|
|
77
|
+
}
|
|
78
|
+
// If .on is defined or any annotation with this prefix is defined,
|
|
79
|
+
// businessKey must exist
|
|
80
|
+
if ((hasOn || hasAnyAnnotationWithPrefix) && !hasBusinessKey) {
|
|
81
|
+
buildPlugin.pushMessage((0, constants_2.ERROR_BUSINESS_KEY_REQUIRED)(entityName, annotationPrefix), ERROR);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
function validateInputTypes(buildPlugin, entityName, def, processDef, allDefinitions) {
|
|
85
|
+
const parsedEntries = (0, validation_utils_1.getParsedInputEntries)(def);
|
|
86
|
+
const elements = def.elements ?? {};
|
|
87
|
+
const entityContext = (0, validation_utils_1.createCsnEntityContext)(elements, allDefinitions || {});
|
|
88
|
+
// entity attributes from inputs array annotation
|
|
89
|
+
const entityAttributes = (0, validation_utils_1.getElementNamesAndTypes)(parsedEntries, def, allDefinitions || {}, entityContext);
|
|
90
|
+
// process def inputs from csn model
|
|
91
|
+
const processDefInputs = (0, validation_utils_1.getProcessDefInputsAndTypes)(processDef, allDefinitions || {});
|
|
92
|
+
validateInputPathsExist(buildPlugin, entityName, parsedEntries, entityContext);
|
|
93
|
+
// Compare entity attributes against process definition inputs
|
|
94
|
+
validateInputsMatch(buildPlugin, entityName, entityAttributes, processDefInputs, def[constants_1.PROCESS_START_ID]);
|
|
95
|
+
}
|
|
96
|
+
function validateInputPathsExist(buildPlugin, entityName, parsedEntries, entityContext) {
|
|
97
|
+
if (!parsedEntries) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
for (const entry of parsedEntries) {
|
|
101
|
+
// Skip wildcards ($self alone)
|
|
102
|
+
if (entry.path.length === 1 && entry.path[0] === '*')
|
|
103
|
+
continue;
|
|
104
|
+
let currentContext = entityContext;
|
|
105
|
+
for (let i = 0; i < entry.path.length; i++) {
|
|
106
|
+
const segment = entry.path[i];
|
|
107
|
+
// Skip wildcards in nested paths - remainder of path is implicitly valid
|
|
108
|
+
if (segment === '*')
|
|
109
|
+
break;
|
|
110
|
+
const element = currentContext.getElement(segment);
|
|
111
|
+
if (!element) {
|
|
112
|
+
// Element doesn't exist - push warning
|
|
113
|
+
const fullPath = '$self.' + entry.path.slice(0, i + 1).join('.');
|
|
114
|
+
buildPlugin.pushMessage((0, constants_2.WARNING_INPUT_PATH_NOT_IN_ENTITY)(entityName, fullPath), WARNING);
|
|
115
|
+
break; // Stop validating further segments of this path
|
|
116
|
+
}
|
|
117
|
+
// Move to target entity context for next segment (if association/composition)
|
|
118
|
+
if (element.isAssocOrComp && element.targetEntity) {
|
|
119
|
+
currentContext = element.targetEntity;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
function validateInputsMatch(buildPlugin, entityName, entityAttributes, processDefInputs, processDefId, prefix = '') {
|
|
125
|
+
const entityKeys = Object.keys(entityAttributes);
|
|
126
|
+
const processKeys = Object.keys(processDefInputs);
|
|
127
|
+
// Check for entity attributes that don't exist in process definition
|
|
128
|
+
for (const key of entityKeys) {
|
|
129
|
+
const fullKey = prefix ? `${prefix}.${key}` : key;
|
|
130
|
+
if (key in processDefInputs) {
|
|
131
|
+
// Check type compatibility
|
|
132
|
+
const entityType = entityAttributes[key];
|
|
133
|
+
const processType = processDefInputs[key];
|
|
134
|
+
validateElementTypeMatch(buildPlugin, entityName, fullKey, entityType, processType, processDefId);
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
// Entity sends extra attributes the process doesn't define - warn, don't fail.
|
|
138
|
+
// The process will simply ignore unknown inputs.
|
|
139
|
+
buildPlugin.pushMessage((0, constants_2.WARNING_ATTRIBUTE_NOT_IN_PROCESS_DEF)(entityName, fullKey, processDefId), WARNING);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// Check for process inputs that are missing from entity attributes
|
|
143
|
+
// Only mandatory process inputs are required to be present in the entity
|
|
144
|
+
for (const key of processKeys) {
|
|
145
|
+
const fullKey = prefix ? `${prefix}.${key}` : key;
|
|
146
|
+
const processInput = processDefInputs[key];
|
|
147
|
+
if (!(key in entityAttributes)) {
|
|
148
|
+
if (processInput.isMandatory) {
|
|
149
|
+
buildPlugin.pushMessage((0, constants_2.ERROR_MISSING_MANDATORY_PROCESS_INPUT)(entityName, processDefId, fullKey), ERROR);
|
|
150
|
+
}
|
|
151
|
+
// Optional inputs that are missing are fine - no error needed
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Validates that an entity element type matches the expected process definition input type.
|
|
157
|
+
* Handles type comparison, array mismatch, mandatory flags, and nested properties recursively.
|
|
158
|
+
*/
|
|
159
|
+
function validateElementTypeMatch(buildPlugin, entityName, key, entityType, processType, processDefId) {
|
|
160
|
+
// Check if mandatory flag is compatible
|
|
161
|
+
// Process input is mandatory but entity attribute is not
|
|
162
|
+
if (processType.isMandatory && !entityType.isMandatory) {
|
|
163
|
+
buildPlugin.pushMessage((0, constants_2.WARNING_MANDATORY_MISMATCH)(entityName, key, processDefId), WARNING);
|
|
164
|
+
}
|
|
165
|
+
// Check array mismatch
|
|
166
|
+
const entityIsArray = entityType.isArray === true;
|
|
167
|
+
const processIsArray = processType.isArray === true;
|
|
168
|
+
if (entityIsArray !== processIsArray) {
|
|
169
|
+
buildPlugin.pushMessage((0, constants_2.WARNING_ARRAY_MISMATCH)(entityName, key, entityIsArray, processIsArray), WARNING);
|
|
170
|
+
}
|
|
171
|
+
// Check base type compatibility
|
|
172
|
+
// For associations/compositions, we compare the target type or allow structural compatibility
|
|
173
|
+
const entityBaseType = entityType.type;
|
|
174
|
+
const processBaseType = processType.type;
|
|
175
|
+
// Skip type mismatch check for association/composition types when comparing with complex types
|
|
176
|
+
const isEntityAssociationOrComposition = entityBaseType === 'cds.Association' || entityBaseType === 'cds.Composition';
|
|
177
|
+
if (!isEntityAssociationOrComposition && entityBaseType !== processBaseType) {
|
|
178
|
+
buildPlugin.pushMessage((0, constants_2.WARNING_TYPE_MISMATCH)(entityName, key, entityBaseType, processBaseType), WARNING);
|
|
179
|
+
}
|
|
180
|
+
// Recursively validate nested properties if both have them
|
|
181
|
+
if (entityType.properties && processType.properties) {
|
|
182
|
+
validateInputsMatch(buildPlugin, entityName, entityType.properties, processType.properties, processDefId, key);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=validations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validations.js","sourceRoot":"","sources":["../../../lib/build/validations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LOG_MESSAGES = exports.PROCESS_DEFINITION_ID = exports.PROCESS_RESUME_EVENT = exports.PROCESS_SUSPEND_EVENT = exports.PROCESS_CANCEL_EVENT = exports.PROCESS_START_EVENT = exports.PROCESS_PREFIX = exports.BUILD_PREFIX = exports.PROCESS_RESUME_IF = exports.PROCESS_RESUME_CASCADE = exports.PROCESS_RESUME_ON = exports.PROCESS_RESUME = exports.PROCESS_SUSPEND_IF = exports.PROCESS_SUSPEND_CASCADE = exports.PROCESS_SUSPEND_ON = exports.PROCESS_SUSPEND = exports.PROCESS_CANCEL_IF = exports.PROCESS_CANCEL_CASCADE = exports.PROCESS_CANCEL_ON = exports.PROCESS_CANCEL = exports.PROCESS_START_INPUTS = exports.PROCESS_START_IF = exports.PROCESS_START_ON = exports.PROCESS_START_ID = exports.PROCESS_START = exports.BUSINESS_KEY_ALIAS = exports.BUSINESS_KEY_MAX_LENGTH = exports.BUSINESS_KEY = exports.CUD_EVENTS = exports.PROCESS_LOGGER_PREFIX = exports.PROCESS_SERVICE = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Process Service
|
|
6
|
+
*/
|
|
7
|
+
exports.PROCESS_SERVICE = 'ProcessService';
|
|
8
|
+
/**
|
|
9
|
+
* Process Service Logger
|
|
10
|
+
*/
|
|
11
|
+
exports.PROCESS_LOGGER_PREFIX = 'process';
|
|
12
|
+
/**
|
|
13
|
+
* CRUD Operation
|
|
14
|
+
*/
|
|
15
|
+
exports.CUD_EVENTS = ['CREATE', 'UPDATE', 'DELETE'];
|
|
16
|
+
/** Business Key Annotations
|
|
17
|
+
*
|
|
18
|
+
*/
|
|
19
|
+
exports.BUSINESS_KEY = '@bpm.process.businessKey';
|
|
20
|
+
exports.BUSINESS_KEY_MAX_LENGTH = 255;
|
|
21
|
+
/**
|
|
22
|
+
* Business key alias const
|
|
23
|
+
*/
|
|
24
|
+
exports.BUSINESS_KEY_ALIAS = 'as businessKey';
|
|
25
|
+
/**
|
|
26
|
+
* Process Start Annotations
|
|
27
|
+
*/
|
|
28
|
+
exports.PROCESS_START = '@bpm.process.start';
|
|
29
|
+
exports.PROCESS_START_ID = '@bpm.process.start.id';
|
|
30
|
+
exports.PROCESS_START_ON = '@bpm.process.start.on';
|
|
31
|
+
exports.PROCESS_START_IF = '@bpm.process.start.if';
|
|
32
|
+
exports.PROCESS_START_INPUTS = '@bpm.process.start.inputs';
|
|
33
|
+
/**
|
|
34
|
+
* Process Cancel Annotations
|
|
35
|
+
*/
|
|
36
|
+
exports.PROCESS_CANCEL = '@bpm.process.cancel';
|
|
37
|
+
exports.PROCESS_CANCEL_ON = '@bpm.process.cancel.on';
|
|
38
|
+
exports.PROCESS_CANCEL_CASCADE = '@bpm.process.cancel.cascade';
|
|
39
|
+
exports.PROCESS_CANCEL_IF = '@bpm.process.cancel.if';
|
|
40
|
+
/**
|
|
41
|
+
* Process Suspend Annotations
|
|
42
|
+
*/
|
|
43
|
+
exports.PROCESS_SUSPEND = '@bpm.process.suspend';
|
|
44
|
+
exports.PROCESS_SUSPEND_ON = '@bpm.process.suspend.on';
|
|
45
|
+
exports.PROCESS_SUSPEND_CASCADE = '@bpm.process.suspend.cascade';
|
|
46
|
+
exports.PROCESS_SUSPEND_IF = '@bpm.process.suspend.if';
|
|
47
|
+
/**
|
|
48
|
+
* Process Resume Annotations
|
|
49
|
+
*/
|
|
50
|
+
exports.PROCESS_RESUME = '@bpm.process.resume';
|
|
51
|
+
exports.PROCESS_RESUME_ON = '@bpm.process.resume.on';
|
|
52
|
+
exports.PROCESS_RESUME_CASCADE = '@bpm.process.resume.cascade';
|
|
53
|
+
exports.PROCESS_RESUME_IF = '@bpm.process.resume.if';
|
|
54
|
+
/**
|
|
55
|
+
* Annotation prefix for filtering
|
|
56
|
+
*/
|
|
57
|
+
exports.BUILD_PREFIX = '@bpm';
|
|
58
|
+
exports.PROCESS_PREFIX = '@bpm.process';
|
|
59
|
+
/**
|
|
60
|
+
* Process Event Annotations (Runtime)
|
|
61
|
+
* These annotations are used on dynamically created ProcessService events
|
|
62
|
+
*/
|
|
63
|
+
exports.PROCESS_START_EVENT = '@Process.StartEvent';
|
|
64
|
+
exports.PROCESS_CANCEL_EVENT = '@Process.CancelEvent';
|
|
65
|
+
exports.PROCESS_SUSPEND_EVENT = '@Process.SuspendEvent';
|
|
66
|
+
exports.PROCESS_RESUME_EVENT = '@Process.ResumeEvent';
|
|
67
|
+
exports.PROCESS_DEFINITION_ID = '@Process.DefinitionId';
|
|
68
|
+
/**
|
|
69
|
+
* Log Messages
|
|
70
|
+
*/
|
|
71
|
+
exports.LOG_MESSAGES = {
|
|
72
|
+
PROCESS_NOT_STARTED: 'Not starting process as start condition(s) are not met.',
|
|
73
|
+
NO_PROCESS_INPUTS_DEFINED: 'No process start input annotations defined, fetching entire entity row for process start context.',
|
|
74
|
+
PROCESS_NOT_SUSPENDED: 'Not suspending process as suspend condition(s) are not met.',
|
|
75
|
+
PROCESS_NOT_RESUMED: 'Not resuming process as resume condition(s) are not met.',
|
|
76
|
+
PROCESS_NOT_CANCELLED: 'Not canceling process as cancel condition(s) are not met.',
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../lib/constants.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACU,QAAA,eAAe,GAAG,gBAAyB,CAAC;AAEzD;;GAEG;AACU,QAAA,qBAAqB,GAAG,SAAkB,CAAC;AAExD;;GAEG;AACU,QAAA,UAAU,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAU,CAAC;AAElE;;GAEG;AACU,QAAA,YAAY,GAAG,0BAAmC,CAAC;AACnD,QAAA,uBAAuB,GAAG,GAAG,CAAC;AAE3C;;GAEG;AACU,QAAA,kBAAkB,GAAG,gBAAyB,CAAC;AAE5D;;GAEG;AACU,QAAA,aAAa,GAAG,oBAA6B,CAAC;AAC9C,QAAA,gBAAgB,GAAG,uBAAgC,CAAC;AACpD,QAAA,gBAAgB,GAAG,uBAAgC,CAAC;AACpD,QAAA,gBAAgB,GAAG,uBAAgC,CAAC;AACpD,QAAA,oBAAoB,GAAG,2BAAoC,CAAC;AAEzE;;GAEG;AACU,QAAA,cAAc,GAAG,qBAA8B,CAAC;AAChD,QAAA,iBAAiB,GAAG,wBAAiC,CAAC;AACtD,QAAA,sBAAsB,GAAG,6BAAsC,CAAC;AAChE,QAAA,iBAAiB,GAAG,wBAAiC,CAAC;AAEnE;;GAEG;AACU,QAAA,eAAe,GAAG,sBAA+B,CAAC;AAClD,QAAA,kBAAkB,GAAG,yBAAkC,CAAC;AACxD,QAAA,uBAAuB,GAAG,8BAAuC,CAAC;AAClE,QAAA,kBAAkB,GAAG,yBAAkC,CAAC;AAErE;;GAEG;AACU,QAAA,cAAc,GAAG,qBAA8B,CAAC;AAChD,QAAA,iBAAiB,GAAG,wBAAiC,CAAC;AACtD,QAAA,sBAAsB,GAAG,6BAAsC,CAAC;AAChE,QAAA,iBAAiB,GAAG,wBAAiC,CAAC;AAEnE;;GAEG;AACU,QAAA,YAAY,GAAG,MAAe,CAAC;AAC/B,QAAA,cAAc,GAAG,cAAuB,CAAC;AAEtD;;;GAGG;AACU,QAAA,mBAAmB,GAAG,qBAA8B,CAAC;AACrD,QAAA,oBAAoB,GAAG,sBAA+B,CAAC;AACvD,QAAA,qBAAqB,GAAG,uBAAgC,CAAC;AACzD,QAAA,oBAAoB,GAAG,sBAA+B,CAAC;AACvD,QAAA,qBAAqB,GAAG,uBAAgC,CAAC;AAEtE;;GAEG;AAEU,QAAA,YAAY,GAAG;IAC1B,mBAAmB,EAAE,yDAAyD;IAC9E,yBAAyB,EACvB,mGAAmG;IACrG,qBAAqB,EAAE,6DAA6D;IACpF,mBAAmB,EAAE,0DAA0D;IAC/E,qBAAqB,EAAE,2DAA2D;CAC1E,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildAnnotationCache = buildAnnotationCache;
|
|
4
|
+
const constants_1 = require("../constants");
|
|
5
|
+
function expandEvent(event, entity) {
|
|
6
|
+
if (!event)
|
|
7
|
+
return [];
|
|
8
|
+
if (event === '*') {
|
|
9
|
+
const boundActions = entity.actions ? Object.keys(entity.actions) : [];
|
|
10
|
+
return [...constants_1.CUD_EVENTS, ...boundActions];
|
|
11
|
+
}
|
|
12
|
+
return [event];
|
|
13
|
+
}
|
|
14
|
+
function buildAnnotationCache(service) {
|
|
15
|
+
const cache = new Map();
|
|
16
|
+
for (const entity of Object.values(service.entities)) {
|
|
17
|
+
const startEvent = entity[constants_1.PROCESS_START_ON];
|
|
18
|
+
const cancelEvent = entity[constants_1.PROCESS_CANCEL_ON];
|
|
19
|
+
const suspendEvent = entity[constants_1.PROCESS_SUSPEND_ON];
|
|
20
|
+
const resumeEvent = entity[constants_1.PROCESS_RESUME_ON];
|
|
21
|
+
const events = new Set();
|
|
22
|
+
for (const ev of expandEvent(startEvent, entity))
|
|
23
|
+
events.add(ev);
|
|
24
|
+
for (const ev of expandEvent(cancelEvent, entity))
|
|
25
|
+
events.add(ev);
|
|
26
|
+
for (const ev of expandEvent(suspendEvent, entity))
|
|
27
|
+
events.add(ev);
|
|
28
|
+
for (const ev of expandEvent(resumeEvent, entity))
|
|
29
|
+
events.add(ev);
|
|
30
|
+
for (const event of events) {
|
|
31
|
+
const matchesEvent = (annotationEvent) => annotationEvent === event || annotationEvent === '*';
|
|
32
|
+
const hasStart = !!(matchesEvent(startEvent) && entity[constants_1.PROCESS_START_ID]);
|
|
33
|
+
const hasCancel = !!matchesEvent(cancelEvent);
|
|
34
|
+
const hasSuspend = !!matchesEvent(suspendEvent);
|
|
35
|
+
const hasResume = !!matchesEvent(resumeEvent);
|
|
36
|
+
const cacheKey = `${entity.name}:${event}`;
|
|
37
|
+
cache.set(cacheKey, {
|
|
38
|
+
hasStart,
|
|
39
|
+
hasCancel,
|
|
40
|
+
hasSuspend,
|
|
41
|
+
hasResume,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return cache;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=annotationCache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"annotationCache.js","sourceRoot":"","sources":["../../../lib/handlers/annotationCache.ts"],"names":[],"mappings":";;AAoBA,oDAiCC;AAnDD,4CAOsB;AAEtB,SAAS,WAAW,CAAC,KAAyB,EAAE,MAAkB;IAChE,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;QAClB,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,OAAO,CAAC,GAAG,sBAAU,EAAE,GAAG,YAAY,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,CAAC;AACjB,CAAC;AAED,SAAgB,oBAAoB,CAAC,OAAoB;IACvD,MAAM,KAAK,GAAG,IAAI,GAAG,EAA4B,CAAC;IAClD,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrD,MAAM,UAAU,GAAG,MAAM,CAAC,4BAAgB,CAAC,CAAC;QAC5C,MAAM,WAAW,GAAG,MAAM,CAAC,6BAAiB,CAAC,CAAC;QAC9C,MAAM,YAAY,GAAG,MAAM,CAAC,8BAAkB,CAAC,CAAC;QAChD,MAAM,WAAW,GAAG,MAAM,CAAC,6BAAiB,CAAC,CAAC;QAE9C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;QACjC,KAAK,MAAM,EAAE,IAAI,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjE,KAAK,MAAM,EAAE,IAAI,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClE,KAAK,MAAM,EAAE,IAAI,WAAW,CAAC,YAAY,EAAE,MAAM,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnE,KAAK,MAAM,EAAE,IAAI,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAElE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,YAAY,GAAG,CAAC,eAAmC,EAAE,EAAE,CAC3D,eAAe,KAAK,KAAK,IAAI,eAAe,KAAK,GAAG,CAAC;YAEvD,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,4BAAgB,CAAC,CAAC,CAAC;YAC1E,MAAM,SAAS,GAAG,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;YAC9C,MAAM,UAAU,GAAG,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;YAChD,MAAM,SAAS,GAAG,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;YAE9C,MAAM,QAAQ,GAAG,GAAG,MAAM,CAAC,IAAI,IAAI,KAAK,EAAE,CAAC;YAC3C,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE;gBAClB,QAAQ;gBACR,SAAS;gBACT,UAAU;gBACV,SAAS;aACV,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
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.registerAnnotationHandlers = registerAnnotationHandlers;
|
|
7
|
+
const cds_1 = __importDefault(require("@sap/cds"));
|
|
8
|
+
const handlers_1 = require("../handlers");
|
|
9
|
+
function registerAnnotationHandlers(service) {
|
|
10
|
+
if (service instanceof cds_1.default.ApplicationService == false)
|
|
11
|
+
return;
|
|
12
|
+
const annotationCache = (0, handlers_1.buildAnnotationCache)(service);
|
|
13
|
+
service.before('DELETE', async (req) => {
|
|
14
|
+
const cacheKey = `${req.target.name}:${req.event}`;
|
|
15
|
+
const cached = annotationCache.get(cacheKey);
|
|
16
|
+
if (!cached)
|
|
17
|
+
return;
|
|
18
|
+
const results = await Promise.all([
|
|
19
|
+
cached.hasStart && (0, handlers_1.addDeletedEntityToRequestStart)(req),
|
|
20
|
+
cached.hasStart && (0, handlers_1.addDeletedEntityToRequestStartBusinessKey)(req),
|
|
21
|
+
cached.hasCancel && (0, handlers_1.addDeletedEntityToRequestCancel)(req),
|
|
22
|
+
cached.hasResume && (0, handlers_1.addDeletedEntityToRequestResume)(req),
|
|
23
|
+
cached.hasSuspend && (0, handlers_1.addDeletedEntityToRequestSuspend)(req),
|
|
24
|
+
].filter(Boolean));
|
|
25
|
+
req._Process = Object.assign({}, ...results);
|
|
26
|
+
});
|
|
27
|
+
service.after('*', async (results, req) => {
|
|
28
|
+
if (!req.target)
|
|
29
|
+
return;
|
|
30
|
+
const cacheKey = `${req.target.name}:${req.event}`;
|
|
31
|
+
const cached = annotationCache.get(cacheKey);
|
|
32
|
+
if (!cached)
|
|
33
|
+
return;
|
|
34
|
+
const rows = Array.isArray(results) ? results : [results];
|
|
35
|
+
if (rows.length > 0) {
|
|
36
|
+
await Promise.all(rows.map((row) => dispatchProcessHandlers(cached, req, row)));
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
await dispatchProcessHandlers(cached, req, req.data);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
async function dispatchProcessHandlers(cached, req, data) {
|
|
44
|
+
if (cached.hasStart) {
|
|
45
|
+
await (0, handlers_1.handleProcessStart)(req, data);
|
|
46
|
+
}
|
|
47
|
+
if (cached.hasCancel) {
|
|
48
|
+
await (0, handlers_1.handleProcessCancel)(req, data);
|
|
49
|
+
}
|
|
50
|
+
if (cached.hasSuspend) {
|
|
51
|
+
await (0, handlers_1.handleProcessSuspend)(req, data);
|
|
52
|
+
}
|
|
53
|
+
if (cached.hasResume) {
|
|
54
|
+
await (0, handlers_1.handleProcessResume)(req, data);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=annotationHandlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"annotationHandlers.js","sourceRoot":"","sources":["../../../lib/handlers/annotationHandlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerAnnotationHandlers = exports.buildAnnotationCache = exports.registerProcessServiceHandlers = exports.createProcessActionHandler = exports.addDeletedEntityToRequestResume = exports.handleProcessResume = exports.addDeletedEntityToRequestSuspend = exports.handleProcessSuspend = exports.addDeletedEntityToRequestCancel = exports.handleProcessCancel = exports.addDeletedEntityToRequestStartBusinessKey = exports.addDeletedEntityToRequestStart = exports.getColumnsForProcessStart = exports.handleProcessStart = void 0;
|
|
4
|
+
var processStart_1 = require("./processStart");
|
|
5
|
+
Object.defineProperty(exports, "handleProcessStart", { enumerable: true, get: function () { return processStart_1.handleProcessStart; } });
|
|
6
|
+
Object.defineProperty(exports, "getColumnsForProcessStart", { enumerable: true, get: function () { return processStart_1.getColumnsForProcessStart; } });
|
|
7
|
+
Object.defineProperty(exports, "addDeletedEntityToRequestStart", { enumerable: true, get: function () { return processStart_1.addDeletedEntityToRequestStart; } });
|
|
8
|
+
Object.defineProperty(exports, "addDeletedEntityToRequestStartBusinessKey", { enumerable: true, get: function () { return processStart_1.addDeletedEntityToRequestStartBusinessKey; } });
|
|
9
|
+
var processCancel_1 = require("./processCancel");
|
|
10
|
+
Object.defineProperty(exports, "handleProcessCancel", { enumerable: true, get: function () { return processCancel_1.handleProcessCancel; } });
|
|
11
|
+
Object.defineProperty(exports, "addDeletedEntityToRequestCancel", { enumerable: true, get: function () { return processCancel_1.addDeletedEntityToRequestCancel; } });
|
|
12
|
+
var processSuspend_1 = require("./processSuspend");
|
|
13
|
+
Object.defineProperty(exports, "handleProcessSuspend", { enumerable: true, get: function () { return processSuspend_1.handleProcessSuspend; } });
|
|
14
|
+
Object.defineProperty(exports, "addDeletedEntityToRequestSuspend", { enumerable: true, get: function () { return processSuspend_1.addDeletedEntityToRequestSuspend; } });
|
|
15
|
+
var processResume_1 = require("./processResume");
|
|
16
|
+
Object.defineProperty(exports, "handleProcessResume", { enumerable: true, get: function () { return processResume_1.handleProcessResume; } });
|
|
17
|
+
Object.defineProperty(exports, "addDeletedEntityToRequestResume", { enumerable: true, get: function () { return processResume_1.addDeletedEntityToRequestResume; } });
|
|
18
|
+
var processActionHandler_1 = require("./processActionHandler");
|
|
19
|
+
Object.defineProperty(exports, "createProcessActionHandler", { enumerable: true, get: function () { return processActionHandler_1.createProcessActionHandler; } });
|
|
20
|
+
var processService_1 = require("./processService");
|
|
21
|
+
Object.defineProperty(exports, "registerProcessServiceHandlers", { enumerable: true, get: function () { return processService_1.registerProcessServiceHandlers; } });
|
|
22
|
+
var annotationCache_1 = require("./annotationCache");
|
|
23
|
+
Object.defineProperty(exports, "buildAnnotationCache", { enumerable: true, get: function () { return annotationCache_1.buildAnnotationCache; } });
|
|
24
|
+
var annotationHandlers_1 = require("./annotationHandlers");
|
|
25
|
+
Object.defineProperty(exports, "registerAnnotationHandlers", { enumerable: true, get: function () { return annotationHandlers_1.registerAnnotationHandlers; } });
|
|
26
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/handlers/index.ts"],"names":[],"mappings":";;;AAAA,+CAKwB;AAJtB,kHAAA,kBAAkB,OAAA;AAClB,yHAAA,yBAAyB,OAAA;AACzB,8HAAA,8BAA8B,OAAA;AAC9B,yIAAA,yCAAyC,OAAA;AAE3C,iDAAuF;AAA9E,oHAAA,mBAAmB,OAAA;AAAE,gIAAA,+BAA+B,OAAA;AAC7D,mDAA0F;AAAjF,sHAAA,oBAAoB,OAAA;AAAE,kIAAA,gCAAgC,OAAA;AAC/D,iDAAuF;AAA9E,oHAAA,mBAAmB,OAAA;AAAE,gIAAA,+BAA+B,OAAA;AAC7D,+DAAoE;AAA3D,kIAAA,0BAA0B,OAAA;AACnC,mDAAkE;AAAzD,gIAAA,8BAA8B,OAAA;AACvC,qDAAyD;AAAhD,uHAAA,oBAAoB,OAAA;AAC7B,2DAAkE;AAAzD,gIAAA,0BAA0B,OAAA"}
|
|
@@ -0,0 +1,63 @@
|
|
|
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.PROCESS_EVENT_MAP = void 0;
|
|
7
|
+
exports.isDeleteWithoutProcess = isDeleteWithoutProcess;
|
|
8
|
+
exports.createAddDeletedEntityHandler = createAddDeletedEntityHandler;
|
|
9
|
+
const cds_1 = __importDefault(require("@sap/cds"));
|
|
10
|
+
const constants_1 = require("../constants");
|
|
11
|
+
const input_parser_1 = require("../shared/input-parser");
|
|
12
|
+
const LOG = cds_1.default.log(constants_1.PROCESS_LOGGER_PREFIX);
|
|
13
|
+
exports.PROCESS_EVENT_MAP = {
|
|
14
|
+
start: 'Start',
|
|
15
|
+
startBusinessKey: 'StartBusinessKey',
|
|
16
|
+
cancel: 'Cancel',
|
|
17
|
+
suspend: 'Suspend',
|
|
18
|
+
resume: 'Resume',
|
|
19
|
+
};
|
|
20
|
+
function buildWhereDeleteExpression(req, conditionExpr) {
|
|
21
|
+
const deleteReq = req;
|
|
22
|
+
const deleteQuery = deleteReq.query?.DELETE;
|
|
23
|
+
let where = deleteQuery?.from?.ref?.[0]?.where ?? deleteQuery?.where;
|
|
24
|
+
if (conditionExpr) {
|
|
25
|
+
where =
|
|
26
|
+
Array.isArray(where) && where.length
|
|
27
|
+
? [{ xpr: where }, 'and', { xpr: conditionExpr.xpr }]
|
|
28
|
+
: conditionExpr.xpr;
|
|
29
|
+
}
|
|
30
|
+
return where;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Checks if this is a DELETE request without process data (condition not met)
|
|
34
|
+
*/
|
|
35
|
+
function isDeleteWithoutProcess(req, notTriggeredMsg, processEvent) {
|
|
36
|
+
const processEventKey = exports.PROCESS_EVENT_MAP[processEvent];
|
|
37
|
+
if (req.event === 'DELETE' &&
|
|
38
|
+
req._Process?.[processEventKey] === undefined) {
|
|
39
|
+
// means: condition for process event is not met
|
|
40
|
+
LOG.debug(notTriggeredMsg);
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Generic factory to create a before-DELETE handler that pre-fetches
|
|
47
|
+
* entity data and attaches it to the request under `_Process.[ProcessEvent]`.
|
|
48
|
+
*/
|
|
49
|
+
function createAddDeletedEntityHandler(config) {
|
|
50
|
+
return async function addDeletedEntityToRequest(req) {
|
|
51
|
+
const columns = config.getColumns(req);
|
|
52
|
+
const annotatedTarget = req.target;
|
|
53
|
+
const conditionExpr = annotatedTarget[config.ifAnnotation];
|
|
54
|
+
const where = buildWhereDeleteExpression(req, conditionExpr);
|
|
55
|
+
if (where) {
|
|
56
|
+
const selectColumns = columns.length > 0 ? columns : [input_parser_1.WILDCARD];
|
|
57
|
+
const processEventKey = exports.PROCESS_EVENT_MAP[config.action];
|
|
58
|
+
const entity = await SELECT.one.from(req.subject).columns(selectColumns).where(where);
|
|
59
|
+
return { [processEventKey]: entity };
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=onDeleteUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onDeleteUtils.js","sourceRoot":"","sources":["../../../lib/handlers/onDeleteUtils.ts"],"names":[],"mappings":";;;;;;AAuDA,wDAeC;AAMD,sEAiBC;AA7FD,mDAA2D;AAC3D,4CAAqD;AAErD,yDAAkD;AAElD,MAAM,GAAG,GAAG,aAAG,CAAC,GAAG,CAAC,iCAAqB,CAAC,CAAC;AAE9B,QAAA,iBAAiB,GAA8C;IAC1E,KAAK,EAAE,OAAO;IACd,gBAAgB,EAAE,kBAAkB;IACpC,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;CACjB,CAAC;AAoBF,SAAS,0BAA0B,CACjC,GAAyB,EACzB,aAAwC;IAExC,MAAM,SAAS,GAAG,GAA2B,CAAC;IAC9C,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,EAAE,MAExB,CAAC;IACd,IAAI,KAAK,GAAY,WAAW,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,WAAW,EAAE,KAAK,CAAC;IAE9E,IAAI,aAAa,EAAE,CAAC;QAClB,KAAK;YACH,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM;gBAClC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,aAAa,CAAC,GAAG,EAAE,CAAC;gBACrD,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC;IAC1B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAgB,sBAAsB,CACpC,GAAgB,EAChB,eAAuB,EACvB,YAAoB;IAEpB,MAAM,eAAe,GAAG,yBAAiB,CAAC,YAAY,CAAC,CAAC;IACxD,IACE,GAAG,CAAC,KAAK,KAAK,QAAQ;QACrB,GAA4B,CAAC,QAAQ,EAAE,CAAC,eAAe,CAAC,KAAK,SAAS,EACvE,CAAC;QACD,gDAAgD;QAChD,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,SAAgB,6BAA6B,CAAC,MAA8B;IAC1E,OAAO,KAAK,UAAU,yBAAyB,CAAC,GAAgB;QAC9D,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAEvC,MAAM,eAAe,GAAG,GAAG,CAAC,MAAoB,CAAC;QACjD,MAAM,aAAa,GAAG,eAAe,CAAC,MAAM,CAAC,YAAsB,CAEtD,CAAC;QACd,MAAM,KAAK,GAAG,0BAA0B,CAAC,GAA2B,EAAE,aAAa,CAAC,CAAC;QAErF,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,uBAAQ,CAAC,CAAC;YAChE,MAAM,eAAe,GAAG,yBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACzD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACtF,OAAO,EAAE,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;QACvC,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createProcessActionHandler = createProcessActionHandler;
|
|
4
|
+
exports.createProcessActionAddDeletedEntityHandler = createProcessActionAddDeletedEntityHandler;
|
|
5
|
+
const utils_1 = require("./utils");
|
|
6
|
+
const onDeleteUtils_1 = require("./onDeleteUtils");
|
|
7
|
+
const businessKey_helper_1 = require("../shared/businessKey-helper");
|
|
8
|
+
const constants_1 = require("../constants");
|
|
9
|
+
function initSpecs(target, annotations) {
|
|
10
|
+
const targetAnnotations = target;
|
|
11
|
+
return {
|
|
12
|
+
on: targetAnnotations[annotations.ON],
|
|
13
|
+
cascade: targetAnnotations[annotations.CASCADE] ?? false,
|
|
14
|
+
conditionExpr: targetAnnotations[annotations.IF]
|
|
15
|
+
? targetAnnotations[annotations.IF].xpr
|
|
16
|
+
: undefined,
|
|
17
|
+
businessKey: targetAnnotations[constants_1.BUSINESS_KEY]?.['='],
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function createProcessActionHandler(config) {
|
|
21
|
+
return async function handleProcessAction(req, data) {
|
|
22
|
+
if ((0, onDeleteUtils_1.isDeleteWithoutProcess)(req, config.logMessages.NOT_TRIGGERED, config.action))
|
|
23
|
+
return;
|
|
24
|
+
const target = req.target;
|
|
25
|
+
const processEventKey = onDeleteUtils_1.PROCESS_EVENT_MAP[config.action];
|
|
26
|
+
data = (req._Process?.[processEventKey] ??
|
|
27
|
+
(0, utils_1.getEntityDataFromRequest)(data, req.params));
|
|
28
|
+
// Initialize specifications from annotations
|
|
29
|
+
const specs = initSpecs(target, config.annotations);
|
|
30
|
+
// Get business key column
|
|
31
|
+
const businessKeyColumn = (0, businessKey_helper_1.getBusinessKeyColumnOrReject)(req, specs.businessKey);
|
|
32
|
+
if (!businessKeyColumn)
|
|
33
|
+
return;
|
|
34
|
+
// fetch entity
|
|
35
|
+
const row = await (0, utils_1.resolveEntityRowOrReject)(req, data, specs.conditionExpr, config.logMessages.FETCH_FAILED, config.logMessages.NOT_TRIGGERED, [businessKeyColumn]);
|
|
36
|
+
if (!row)
|
|
37
|
+
return;
|
|
38
|
+
// Emit process event
|
|
39
|
+
const payload = {
|
|
40
|
+
businessKey: row.businessKey,
|
|
41
|
+
cascade: specs.cascade,
|
|
42
|
+
};
|
|
43
|
+
await (0, utils_1.emitProcessEvent)(config.action, req, payload, config.logMessages.FAILED);
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
function createProcessActionAddDeletedEntityHandler(config) {
|
|
47
|
+
return (0, onDeleteUtils_1.createAddDeletedEntityHandler)({
|
|
48
|
+
action: config.action,
|
|
49
|
+
ifAnnotation: config.annotations.IF,
|
|
50
|
+
getColumns: (req) => [
|
|
51
|
+
(0, businessKey_helper_1.getBusinessKeyColumnOrReject)(req, req.target[constants_1.BUSINESS_KEY]?.['=']),
|
|
52
|
+
],
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=processActionHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"processActionHandler.js","sourceRoot":"","sources":["../../../lib/handlers/processActionHandler.ts"],"names":[],"mappings":";;AAgEA,gEAkCC;AAED,gGAQC;AA1GD,mCAMiB;AACjB,mDAKyB;AACzB,qEAA4E;AAC5E,4CAA4C;AAiC5C,SAAS,SAAS,CAChB,MAAc,EACd,WAA+C;IAE/C,MAAM,iBAAiB,GAAG,MAAoB,CAAC;IAC/C,OAAO;QACL,EAAE,EAAE,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAW;QAC/C,OAAO,EAAG,iBAAiB,CAAC,WAAW,CAAC,OAAO,CAAa,IAAI,KAAK;QACrE,aAAa,EAAE,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAC;YAC9C,CAAC,CAAE,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAmB,CAAC,GAAG;YAC1D,CAAC,CAAC,SAAS;QACb,WAAW,EAAE,iBAAiB,CAAC,wBAAY,CAAC,EAAE,CAAC,GAAG,CAAC;KACpD,CAAC;AACJ,CAAC;AAED,SAAgB,0BAA0B,CAAC,MAA2B;IACpE,OAAO,KAAK,UAAU,mBAAmB,CAAC,GAAgB,EAAE,IAAe;QACzE,IAAI,IAAA,sCAAsB,EAAC,GAAG,EAAE,MAAM,CAAC,WAAW,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC;YAAE,OAAO;QAEzF,MAAM,MAAM,GAAG,GAAG,CAAC,MAAgB,CAAC;QACpC,MAAM,eAAe,GAAG,iCAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACzD,IAAI,GAAG,CAAE,GAA4B,CAAC,QAAQ,EAAE,CAAC,eAAe,CAAC;YAC/D,IAAA,gCAAwB,EAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAc,CAAC;QAC3D,6CAA6C;QAC7C,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QAEpD,0BAA0B;QAC1B,MAAM,iBAAiB,GAAG,IAAA,iDAA4B,EAAC,GAAG,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;QAC/E,IAAI,CAAC,iBAAiB;YAAE,OAAO;QAE/B,eAAe;QACf,MAAM,GAAG,GAAG,MAAM,IAAA,gCAAwB,EACxC,GAAG,EACH,IAAI,EACJ,KAAK,CAAC,aAAa,EACnB,MAAM,CAAC,WAAW,CAAC,YAAY,EAC/B,MAAM,CAAC,WAAW,CAAC,aAAa,EAChC,CAAC,iBAAiB,CAAC,CACpB,CAAC;QACF,IAAI,CAAC,GAAG;YAAE,OAAO;QAEjB,qBAAqB;QAErB,MAAM,OAAO,GAA4B;YACvC,WAAW,EAAG,GAA+B,CAAC,WAAW;YACzD,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC;QACF,MAAM,IAAA,wBAAgB,EAAC,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACjF,CAAC,CAAC;AACJ,CAAC;AAED,SAAgB,0CAA0C,CAAC,MAAiC;IAC1F,OAAO,IAAA,6CAA6B,EAAC;QACnC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,YAAY,EAAE,MAAM,CAAC,WAAW,CAAC,EAAE;QACnC,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC;YACnB,IAAA,iDAA4B,EAAC,GAAG,EAAG,GAAG,CAAC,MAAqB,CAAC,wBAAY,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;SACnF;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.addDeletedEntityToRequestCancel = exports.handleProcessCancel = void 0;
|
|
4
|
+
const processActionHandler_1 = require("./processActionHandler");
|
|
5
|
+
const constants_1 = require("../constants");
|
|
6
|
+
const action = 'cancel';
|
|
7
|
+
exports.handleProcessCancel = (0, processActionHandler_1.createProcessActionHandler)({
|
|
8
|
+
action: action,
|
|
9
|
+
annotations: {
|
|
10
|
+
ON: constants_1.PROCESS_CANCEL_ON,
|
|
11
|
+
CASCADE: constants_1.PROCESS_CANCEL_CASCADE,
|
|
12
|
+
IF: constants_1.PROCESS_CANCEL_IF,
|
|
13
|
+
},
|
|
14
|
+
logMessages: {
|
|
15
|
+
NOT_TRIGGERED: constants_1.LOG_MESSAGES.PROCESS_NOT_CANCELLED,
|
|
16
|
+
FETCH_FAILED: 'Failed to fetch entity for process cancellation.',
|
|
17
|
+
INVALID_KEY: 'Failed to build business key for process cancellation.',
|
|
18
|
+
EMPTY_KEY: 'Business key is empty for process cancellation.',
|
|
19
|
+
FAILED: 'Failed to cancel process with business key',
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
exports.addDeletedEntityToRequestCancel = (0, processActionHandler_1.createProcessActionAddDeletedEntityHandler)({
|
|
23
|
+
action: action,
|
|
24
|
+
annotations: {
|
|
25
|
+
IF: constants_1.PROCESS_CANCEL_IF,
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
//# sourceMappingURL=processCancel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"processCancel.js","sourceRoot":"","sources":["../../../lib/handlers/processCancel.ts"],"names":[],"mappings":";;;AAAA,iEAGgC;AAChC,4CAKsB;AAEtB,MAAM,MAAM,GAAG,QAAQ,CAAC;AAEX,QAAA,mBAAmB,GAAG,IAAA,iDAA0B,EAAC;IAC5D,MAAM,EAAE,MAAM;IACd,WAAW,EAAE;QACX,EAAE,EAAE,6BAAiB;QACrB,OAAO,EAAE,kCAAsB;QAC/B,EAAE,EAAE,6BAAiB;KACtB;IACD,WAAW,EAAE;QACX,aAAa,EAAE,wBAAY,CAAC,qBAAqB;QACjD,YAAY,EAAE,kDAAkD;QAChE,WAAW,EAAE,wDAAwD;QACrE,SAAS,EAAE,iDAAiD;QAC5D,MAAM,EAAE,4CAA4C;KACrD;CACF,CAAC,CAAC;AAEU,QAAA,+BAA+B,GAAG,IAAA,iEAA0C,EAAC;IACxF,MAAM,EAAE,MAAM;IACd,WAAW,EAAE;QACX,EAAE,EAAE,6BAAiB;KACtB;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.addDeletedEntityToRequestResume = exports.handleProcessResume = void 0;
|
|
4
|
+
const processActionHandler_1 = require("./processActionHandler");
|
|
5
|
+
const constants_1 = require("../constants");
|
|
6
|
+
const action = 'resume';
|
|
7
|
+
exports.handleProcessResume = (0, processActionHandler_1.createProcessActionHandler)({
|
|
8
|
+
action: action,
|
|
9
|
+
annotations: {
|
|
10
|
+
ON: constants_1.PROCESS_RESUME_ON,
|
|
11
|
+
CASCADE: constants_1.PROCESS_RESUME_CASCADE,
|
|
12
|
+
IF: constants_1.PROCESS_RESUME_IF,
|
|
13
|
+
},
|
|
14
|
+
logMessages: {
|
|
15
|
+
NOT_TRIGGERED: constants_1.LOG_MESSAGES.PROCESS_NOT_RESUMED,
|
|
16
|
+
FETCH_FAILED: 'Failed to fetch entity for process resume.',
|
|
17
|
+
INVALID_KEY: 'Failed to build business key for process resume.',
|
|
18
|
+
EMPTY_KEY: 'Business key is empty for process resume.',
|
|
19
|
+
FAILED: 'Failed to resume process with business key',
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
exports.addDeletedEntityToRequestResume = (0, processActionHandler_1.createProcessActionAddDeletedEntityHandler)({
|
|
23
|
+
action: action,
|
|
24
|
+
annotations: {
|
|
25
|
+
IF: constants_1.PROCESS_RESUME_IF,
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
//# sourceMappingURL=processResume.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"processResume.js","sourceRoot":"","sources":["../../../lib/handlers/processResume.ts"],"names":[],"mappings":";;;AAAA,iEAGgC;AAChC,4CAKsB;AAEtB,MAAM,MAAM,GAAG,QAAQ,CAAC;AAEX,QAAA,mBAAmB,GAAG,IAAA,iDAA0B,EAAC;IAC5D,MAAM,EAAE,MAAM;IACd,WAAW,EAAE;QACX,EAAE,EAAE,6BAAiB;QACrB,OAAO,EAAE,kCAAsB;QAC/B,EAAE,EAAE,6BAAiB;KACtB;IACD,WAAW,EAAE;QACX,aAAa,EAAE,wBAAY,CAAC,mBAAmB;QAC/C,YAAY,EAAE,4CAA4C;QAC1D,WAAW,EAAE,kDAAkD;QAC/D,SAAS,EAAE,2CAA2C;QACtD,MAAM,EAAE,4CAA4C;KACrD;CACF,CAAC,CAAC;AAEU,QAAA,+BAA+B,GAAG,IAAA,iEAA0C,EAAC;IACxF,MAAM,EAAE,MAAM;IACd,WAAW,EAAE;QACX,EAAE,EAAE,6BAAiB;KACtB;CACF,CAAC,CAAC"}
|