@cap-js/process 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/README.md +135 -10
  2. package/dist/lib/api/process-api-client.js.map +1 -1
  3. package/dist/lib/build/constants.js +9 -1
  4. package/dist/lib/build/constants.js.map +1 -1
  5. package/dist/lib/build/plugin.js +67 -71
  6. package/dist/lib/build/plugin.js.map +1 -1
  7. package/dist/lib/build/validation-utils.js +2 -2
  8. package/dist/lib/build/validation-utils.js.map +1 -1
  9. package/dist/lib/build/validations.js +44 -34
  10. package/dist/lib/build/validations.js.map +1 -1
  11. package/dist/lib/constants.js +24 -32
  12. package/dist/lib/constants.js.map +1 -1
  13. package/dist/lib/handlers/annotationCache.js +30 -20
  14. package/dist/lib/handlers/annotationCache.js.map +1 -1
  15. package/dist/lib/handlers/annotationHandlers.js +13 -17
  16. package/dist/lib/handlers/annotationHandlers.js.map +1 -1
  17. package/dist/lib/handlers/index.js +2 -7
  18. package/dist/lib/handlers/index.js.map +1 -1
  19. package/dist/lib/handlers/onDeleteUtils.js +5 -48
  20. package/dist/lib/handlers/onDeleteUtils.js.map +1 -1
  21. package/dist/lib/handlers/processActionHandler.js +42 -32
  22. package/dist/lib/handlers/processActionHandler.js.map +1 -1
  23. package/dist/lib/handlers/processCancel.js +3 -16
  24. package/dist/lib/handlers/processCancel.js.map +1 -1
  25. package/dist/lib/handlers/processResume.js +3 -16
  26. package/dist/lib/handlers/processResume.js.map +1 -1
  27. package/dist/lib/handlers/processStart.js +136 -75
  28. package/dist/lib/handlers/processStart.js.map +1 -1
  29. package/dist/lib/handlers/processSuspend.js +3 -16
  30. package/dist/lib/handlers/processSuspend.js.map +1 -1
  31. package/dist/lib/handlers/utils.js +3 -0
  32. package/dist/lib/handlers/utils.js.map +1 -1
  33. package/dist/lib/processImport/csnBuilder.js +196 -0
  34. package/dist/lib/processImport/csnBuilder.js.map +1 -0
  35. package/dist/lib/processImport/index.js +178 -0
  36. package/dist/lib/processImport/index.js.map +1 -0
  37. package/dist/lib/processImport/rawWorkflowConverter.js +148 -0
  38. package/dist/lib/processImport/rawWorkflowConverter.js.map +1 -0
  39. package/dist/lib/processImport/schemaMapper.js +200 -0
  40. package/dist/lib/processImport/schemaMapper.js.map +1 -0
  41. package/dist/lib/processImport/utils.js +33 -0
  42. package/dist/lib/processImport/utils.js.map +1 -0
  43. package/dist/lib/processImportRegistration.js +5 -1
  44. package/dist/lib/processImportRegistration.js.map +1 -1
  45. package/dist/lib/shared/annotations-helper.js +98 -0
  46. package/dist/lib/shared/annotations-helper.js.map +1 -0
  47. package/dist/lib/shared/businessKey-helper.js +1 -0
  48. package/dist/lib/shared/businessKey-helper.js.map +1 -1
  49. package/package.json +5 -3
  50. package/dist/lib/processImport.js +0 -449
  51. package/dist/lib/processImport.js.map +0 -1
@@ -1,449 +0,0 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.importProcess = importProcess;
40
- const path = __importStar(require("node:path"));
41
- const fs = __importStar(require("node:fs"));
42
- const cds_1 = __importDefault(require("@sap/cds"));
43
- const csn = __importStar(require("./types/csn-extensions"));
44
- const auth_1 = require("./auth");
45
- const api_1 = require("./api");
46
- const constants_1 = require("./constants");
47
- const LOG = cds_1.default.log(constants_1.PROCESS_LOGGER_PREFIX);
48
- // ============================================================================
49
- // MAIN ENTRY POINT
50
- // ============================================================================
51
- let dataTypeCache = new Map();
52
- async function importProcess(jsonFile, options = {}) {
53
- dataTypeCache = new Map();
54
- if (options.name) {
55
- const { filePath, processHeader } = await fetchAndSaveProcessDefinition(options.name);
56
- options.file = filePath;
57
- return buildCsnModel(processHeader);
58
- }
59
- return generateCsnModel(jsonFile);
60
- }
61
- async function fetchAndSaveProcessDefinition(processName) {
62
- const [projectId, processId] = splitAtLastDot(processName);
63
- const apiClient = await createApiClient();
64
- LOG.debug('Retrieving process header...');
65
- const processHeader = await apiClient.fetchProcessHeader(projectId, processId);
66
- processHeader.projectId = projectId;
67
- if (processHeader.dependencies?.length) {
68
- LOG.debug(`Fetching ${processHeader.dependencies.length} dependent data types...`);
69
- processHeader.dataTypes = await apiClient.fetchAllDataTypes(projectId, processHeader.dependencies);
70
- processHeader.dataTypes.forEach((dt) => dataTypeCache.set(dt.uid, dt));
71
- }
72
- const outputPath = path.join(cds_1.default.root, 'srv', 'workflows', `${processName}.json`);
73
- await fs.promises.mkdir(path.dirname(outputPath), { recursive: true });
74
- await fs.promises.writeFile(outputPath, JSON.stringify(processHeader, null, 2), 'utf8');
75
- return { filePath: outputPath, processHeader };
76
- }
77
- async function createApiClient() {
78
- let credentials = (0, auth_1.getServiceCredentials)(constants_1.PROCESS_SERVICE);
79
- if (!credentials) {
80
- // Try to resolve cloud bindings automatically (same as cds bind --exec does)
81
- // REVISIT: once merged in core
82
- try {
83
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
84
- const cdsDk = cds_1.default;
85
- const resolve = cdsDk._localOrGlobal ?? cdsDk._local ?? require;
86
- const { env: bindingEnv } = resolve('@sap/cds-dk/lib/bind/shared');
87
- process.env.CDS_ENV ??= 'hybrid';
88
- cdsDk.env = cds_1.default.env.for('cds');
89
- Object.assign(process.env, await bindingEnv());
90
- cdsDk.env = cds_1.default.env.for('cds');
91
- credentials = (0, auth_1.getServiceCredentials)(constants_1.PROCESS_SERVICE);
92
- }
93
- catch (e) {
94
- LOG.debug('Auto-resolve bindings failed:', e);
95
- }
96
- }
97
- if (!credentials) {
98
- throw new Error('No ProcessService credentials found. Ensure you have bound a process service instance (e.g., via cds bind process -2 <instance>).');
99
- }
100
- const apiUrl = credentials.endpoints?.api;
101
- if (!apiUrl) {
102
- throw new Error('No API URL found in ProcessService credentials.');
103
- }
104
- LOG.debug('Creating API client...');
105
- const tokenProvider = (0, auth_1.createXsuaaTokenProvider)(credentials);
106
- const cachingTokenProvider = new auth_1.CachingTokenProvider(tokenProvider);
107
- return (0, api_1.createProcessApiClient)(apiUrl, () => cachingTokenProvider.getToken());
108
- }
109
- // ============================================================================
110
- // STEP 2: GENERATE CSN MODEL
111
- // ============================================================================
112
- async function generateCsnModel(jsonFilePath) {
113
- const processHeader = loadProcessHeader(jsonFilePath);
114
- const csnModel = buildCsnModel(processHeader);
115
- return csnModel;
116
- }
117
- function loadProcessHeader(filePath) {
118
- const content = fs.readFileSync(path.resolve(filePath), 'utf-8');
119
- const header = JSON.parse(content);
120
- header.dataTypes?.forEach((dt) => dataTypeCache.set(dt.uid, dt));
121
- return header;
122
- }
123
- function buildCsnModel(process) {
124
- const serviceName = `${process.projectId}.${capitalize(process.identifier)}Service`;
125
- LOG.debug(`Service name: ${serviceName}`);
126
- const definitions = {};
127
- definitions[serviceName] = createServiceDefinition(serviceName, process);
128
- for (const dataType of dataTypeCache.values()) {
129
- addDataTypeDefinition(dataType, serviceName, definitions);
130
- }
131
- addProcessTypes(process, serviceName, definitions);
132
- const normalizedInputSchema = ensureObjectSchema(process.header?.inputs);
133
- const inputProperties = normalizedInputSchema.properties ?? {};
134
- const hasInputProperties = Object.keys(inputProperties).length > 0;
135
- const hasRequiredInputs = hasInputProperties && (normalizedInputSchema.required?.length ?? 0) > 0;
136
- addProcessActions(serviceName, definitions, hasInputProperties, hasRequiredInputs);
137
- return {
138
- $version: '2.0',
139
- definitions,
140
- meta: { creator: '@cap-js/process' },
141
- };
142
- }
143
- // ============================================================================
144
- // CSN BUILDERS: SERVICE & TYPES
145
- // ============================================================================
146
- function createServiceDefinition(serviceName, process) {
147
- return {
148
- kind: 'service',
149
- name: serviceName,
150
- doc: 'DO NOT EDIT. THIS IS A GENERATED SERVICE THAT WILL BE OVERRIDDEN ON NEXT IMPORT.',
151
- '@protocol': 'none',
152
- '@bpm.process': `${process.projectId}.${process.identifier}`,
153
- };
154
- }
155
- function addDataTypeDefinition(dataType, serviceName, definitions) {
156
- const typeName = fqn(serviceName, sanitizeName(dataType.name));
157
- if (definitions[typeName])
158
- return;
159
- if (!dataType.header || dataType.header.type !== 'object') {
160
- LOG.warn(`Data type ${dataType.name} has no valid schema, creating empty type`);
161
- definitions[typeName] = { kind: 'type', name: typeName, elements: {} };
162
- return;
163
- }
164
- definitions[typeName] = buildTypeFromSchema(typeName, dataType.header, serviceName, definitions);
165
- LOG.debug(`Generated type: ${typeName}`);
166
- }
167
- function addProcessTypes(process, serviceName, definitions) {
168
- const inputsName = fqn(serviceName, 'ProcessInputs');
169
- const outputsName = fqn(serviceName, 'ProcessOutputs');
170
- const attributeName = fqn(serviceName, 'ProcessAttribute');
171
- const attributesName = fqn(serviceName, 'ProcessAttributes');
172
- const instanceName = fqn(serviceName, 'ProcessInstance');
173
- const instancesName = fqn(serviceName, 'ProcessInstances');
174
- definitions[inputsName] = buildTypeFromSchema(inputsName, ensureObjectSchema(process.header?.inputs), serviceName, definitions);
175
- definitions[outputsName] = buildTypeFromSchema(outputsName, ensureObjectSchema(process.header?.outputs), serviceName, definitions);
176
- definitions[attributeName] = {
177
- kind: 'type',
178
- name: attributeName,
179
- elements: {
180
- id: { type: csn.CdsBuiltinType.String, notNull: true },
181
- label: { type: csn.CdsBuiltinType.String, notNull: true },
182
- value: { type: csn.CdsBuiltinType.String },
183
- type: { type: csn.CdsBuiltinType.String, notNull: true },
184
- },
185
- };
186
- definitions[attributesName] = {
187
- kind: 'type',
188
- name: attributesName,
189
- items: {
190
- type: attributeName,
191
- },
192
- };
193
- definitions[instanceName] = {
194
- kind: 'type',
195
- name: instanceName,
196
- elements: {
197
- definitionId: { type: csn.CdsBuiltinType.String },
198
- definitionVersion: { type: csn.CdsBuiltinType.String },
199
- id: { type: csn.CdsBuiltinType.String },
200
- status: { type: csn.CdsBuiltinType.String },
201
- startedAt: { type: csn.CdsBuiltinType.String },
202
- startedBy: { type: csn.CdsBuiltinType.String },
203
- },
204
- };
205
- definitions[instancesName] = {
206
- kind: 'type',
207
- name: instancesName,
208
- items: { type: instanceName },
209
- };
210
- }
211
- // ============================================================================
212
- // CSN BUILDERS: ACTIONS
213
- // ============================================================================
214
- function addProcessActions(serviceName, definitions, hasInputProperties, hasRequiredInputs) {
215
- const inputsType = fqn(serviceName, 'ProcessInputs');
216
- const outputsType = fqn(serviceName, 'ProcessOutputs');
217
- const attributesType = fqn(serviceName, 'ProcessAttributes');
218
- const instancesType = fqn(serviceName, 'ProcessInstances');
219
- // Start action — three tiers:
220
- // 1. No input properties: start() with no params
221
- // 2. All inputs optional: start(inputs: ProcessInputs) — inputs param is optional
222
- // 3. Some/all inputs required: start(inputs: ProcessInputs not null) — inputs param is required
223
- if (!hasInputProperties) {
224
- definitions[fqn(serviceName, 'start')] = {
225
- kind: 'action',
226
- name: fqn(serviceName, 'start'),
227
- };
228
- }
229
- else {
230
- definitions[fqn(serviceName, 'start')] = {
231
- kind: 'action',
232
- name: fqn(serviceName, 'start'),
233
- params: {
234
- inputs: {
235
- type: inputsType,
236
- notNull: hasRequiredInputs ? true : undefined,
237
- },
238
- },
239
- };
240
- }
241
- // Query functions
242
- definitions[fqn(serviceName, 'getAttributes')] = {
243
- kind: 'function',
244
- name: fqn(serviceName, 'getAttributes'),
245
- params: {
246
- processInstanceId: { type: csn.CdsBuiltinType.String, notNull: true },
247
- },
248
- returns: { type: attributesType },
249
- };
250
- definitions[fqn(serviceName, 'getOutputs')] = {
251
- kind: 'function',
252
- name: fqn(serviceName, 'getOutputs'),
253
- params: {
254
- processInstanceId: { type: csn.CdsBuiltinType.String, notNull: true },
255
- },
256
- returns: { type: outputsType },
257
- };
258
- definitions[fqn(serviceName, 'getInstancesByBusinessKey')] = {
259
- kind: 'function',
260
- name: fqn(serviceName, 'getInstancesByBusinessKey'),
261
- params: {
262
- businessKey: { type: csn.CdsBuiltinType.String, notNull: true },
263
- status: { items: { type: csn.CdsBuiltinType.String } },
264
- },
265
- returns: { type: instancesType },
266
- };
267
- // Lifecycle actions
268
- for (const action of ['suspend', 'resume', 'cancel']) {
269
- definitions[fqn(serviceName, action)] = {
270
- kind: 'action',
271
- name: fqn(serviceName, action),
272
- params: {
273
- businessKey: { type: csn.CdsBuiltinType.String, notNull: true },
274
- cascade: { type: csn.CdsBuiltinType.Boolean },
275
- },
276
- };
277
- }
278
- }
279
- // ============================================================================
280
- // JSON SCHEMA → CSN CONVERSION
281
- // ============================================================================
282
- function buildTypeFromSchema(typeName, schema, serviceName, definitions) {
283
- const required = new Set(schema.required ?? []);
284
- const elements = {};
285
- const properties = schema.properties ?? {};
286
- for (const propName in properties) {
287
- if (Object.hasOwn(properties, propName)) {
288
- const propSchema = properties[propName];
289
- const safeName = sanitizeName(propName);
290
- elements[safeName] = mapSchemaPropertyToElement(safeName, propSchema, required.has(propName), {
291
- parentTypeName: typeName,
292
- serviceName,
293
- definitions,
294
- });
295
- }
296
- }
297
- return { kind: 'type', name: typeName, elements };
298
- }
299
- function mapSchemaPropertyToElement(propName, schema, isRequired, ctx) {
300
- const notNull = isRequired || undefined;
301
- // Reference to another type
302
- if (schema?.$ref) {
303
- return { type: resolveTypeReference(schema, ctx.serviceName), notNull };
304
- }
305
- // Primitives
306
- switch (schema.type) {
307
- case 'string':
308
- return { type: csn.CdsBuiltinType.String, notNull };
309
- case 'boolean':
310
- return { type: csn.CdsBuiltinType.Boolean, notNull };
311
- case 'number':
312
- return { type: csn.CdsBuiltinType.DecimalFloat, notNull };
313
- case 'integer':
314
- return { type: csn.CdsBuiltinType.Integer, notNull };
315
- }
316
- // Nested object
317
- if (schema.type === 'object') {
318
- const nestedName = fqn(ctx.serviceName, sanitizeName(`${baseName(ctx.parentTypeName)}_${propName}`));
319
- ctx.definitions[nestedName] = buildTypeFromSchema(nestedName, ensureObjectSchema(schema), ctx.serviceName, ctx.definitions);
320
- return { type: nestedName, notNull };
321
- }
322
- // Array
323
- if (schema.type === 'array') {
324
- const arrayName = fqn(ctx.serviceName, sanitizeName(`${baseName(ctx.parentTypeName)}_${propName}_Array`));
325
- if (!schema.items)
326
- throw new Error(`Array ${ctx.parentTypeName}.${propName} has no 'items'.`);
327
- ctx.definitions[arrayName] = {
328
- kind: 'type',
329
- name: arrayName,
330
- items: buildArrayItemsSpec(schema.items, { ...ctx, parentTypeName: arrayName }),
331
- };
332
- return { type: arrayName, notNull };
333
- }
334
- // Fallback
335
- return { type: csn.CdsBuiltinType.String, notNull };
336
- }
337
- function buildArrayItemsSpec(itemsSchema, ctx) {
338
- // Reference
339
- if (itemsSchema?.$ref) {
340
- return { type: resolveTypeReference(itemsSchema, ctx.serviceName) };
341
- }
342
- // Primitives
343
- switch (itemsSchema.type) {
344
- case 'string':
345
- return { type: csn.CdsBuiltinType.String };
346
- case 'boolean':
347
- return { type: csn.CdsBuiltinType.Boolean };
348
- case 'number':
349
- return { type: csn.CdsBuiltinType.DecimalFloat };
350
- case 'integer':
351
- return { type: csn.CdsBuiltinType.Integer };
352
- }
353
- // Object items (inline)
354
- if (itemsSchema.type === 'object') {
355
- const required = new Set(itemsSchema.required ?? []);
356
- const elements = {};
357
- const properties = itemsSchema.properties ?? {};
358
- for (const name in properties) {
359
- if (Object.hasOwn(properties, name)) {
360
- const schema = properties[name];
361
- const safeName = sanitizeName(name);
362
- elements[safeName] = mapSchemaPropertyToElement(safeName, schema, required.has(name), {
363
- parentTypeName: fqn(ctx.serviceName, `${baseName(ctx.parentTypeName)}_Item`),
364
- serviceName: ctx.serviceName,
365
- definitions: ctx.definitions,
366
- });
367
- }
368
- }
369
- return { elements };
370
- }
371
- // Nested array
372
- if (itemsSchema.type === 'array') {
373
- if (!itemsSchema.items)
374
- throw new Error(`Nested array under ${ctx.parentTypeName} missing 'items'.`);
375
- return { items: buildArrayItemsSpec(itemsSchema.items, ctx) };
376
- }
377
- return { type: csn.CdsBuiltinType.String };
378
- }
379
- function resolveTypeReference(schema, serviceName) {
380
- const ref = schema.$ref;
381
- if (!ref)
382
- throw new Error(`Invalid reference in ${serviceName} for ${schema.refName ?? 'unknown'}`);
383
- // Internal reference: #/definitions/date
384
- if (ref.startsWith('#/')) {
385
- const format = ref.split('/').pop();
386
- return mapDateFormatToCdsType(format);
387
- }
388
- // External artifact: $.uuid
389
- if (ref.startsWith('$.')) {
390
- const uid = ref.substring(2);
391
- const dataType = dataTypeCache.get(uid);
392
- if (dataType) {
393
- return fqn(serviceName, sanitizeName(dataType.name));
394
- }
395
- if (schema.refName) {
396
- LOG.warn(`Data type ${schema.refName} (${uid}) not in cache, using name`);
397
- return fqn(serviceName, sanitizeName(schema.refName));
398
- }
399
- LOG.warn(`Unknown artifact reference: ${ref}`);
400
- return fqn(serviceName, sanitizeName(uid));
401
- }
402
- // Fallback
403
- return fqn(serviceName, sanitizeName(schema.refName ?? ref));
404
- }
405
- function mapDateFormatToCdsType(format) {
406
- switch (format) {
407
- case 'date':
408
- return csn.CdsBuiltinType.Date;
409
- case 'time':
410
- return csn.CdsBuiltinType.Time;
411
- case 'dateTime':
412
- return csn.CdsBuiltinType.Timestamp;
413
- default:
414
- return csn.CdsBuiltinType.String;
415
- }
416
- }
417
- function ensureObjectSchema(schema) {
418
- if (schema?.type === 'object' && schema.properties) {
419
- return schema;
420
- }
421
- return { type: 'object', properties: {}, required: [] };
422
- }
423
- // ============================================================================
424
- // UTILITIES
425
- // ============================================================================
426
- /** Create fully qualified name: "Service.TypeName" */
427
- function fqn(qualifier, name) {
428
- return `${qualifier}.${name}`;
429
- }
430
- /** Get the part after the last dot: "a.b.c" → "c" */
431
- function baseName(name) {
432
- return splitAtLastDot(name)[1];
433
- }
434
- /** Split at last dot: "a.b.c" → ["a.b", "c"] */
435
- function splitAtLastDot(name) {
436
- const i = name.lastIndexOf('.');
437
- return i === -1 ? ['', name] : [name.slice(0, i), name.slice(i + 1)];
438
- }
439
- /** Capitalize first letter */
440
- function capitalize(s) {
441
- return s.charAt(0).toUpperCase() + s.slice(1);
442
- }
443
- /** Convert to safe identifier: "foo-bar" → "foo_bar", "123x" → "_123x" */
444
- function sanitizeName(name) {
445
- return String(name)
446
- .replace(/[^A-Za-z0-9_]/g, '_')
447
- .replace(/^(\d)/, '_$1');
448
- }
449
- //# sourceMappingURL=processImport.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"processImport.js","sourceRoot":"","sources":["../../lib/processImport.ts"],"names":[],"mappings":"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"}