@cap-js/ord 1.3.5 → 1.3.7
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/lib/authentication.js +1 -1
- package/lib/build.js +49 -18
- package/lib/constants.js +11 -0
- package/lib/ord.js +46 -17
- package/lib/templates.js +54 -5
- package/package.json +6 -2
package/lib/authentication.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const cds = require("@sap/cds");
|
|
2
2
|
const { AUTHENTICATION_TYPE, BASIC_AUTH_HEADER_KEY, AUTH_TYPE_ORD_ACCESS_STRATEGY_MAP } = require("./constants");
|
|
3
3
|
const { Logger } = require("./logger");
|
|
4
|
-
const bcrypt = require("
|
|
4
|
+
const bcrypt = require("bcryptjs");
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Compares a plain text password with a hashed password
|
package/lib/build.js
CHANGED
|
@@ -3,6 +3,7 @@ const cds_dk = require("@sap/cds-dk");
|
|
|
3
3
|
const path = require("path");
|
|
4
4
|
const _ = require("lodash");
|
|
5
5
|
const { ord, getMetadata } = require("./index");
|
|
6
|
+
const cliProgress = require("cli-progress");
|
|
6
7
|
const { BUILD_DEFAULT_PATH, ORD_SERVICE_NAME, ORD_DOCUMENT_FILE_NAME } = require("./constants");
|
|
7
8
|
|
|
8
9
|
module.exports = class OrdBuildPlugin extends cds_dk.build.Plugin {
|
|
@@ -13,27 +14,58 @@ module.exports = class OrdBuildPlugin extends cds_dk.build.Plugin {
|
|
|
13
14
|
}
|
|
14
15
|
|
|
15
16
|
async _writeResourcesFiles(resObj, model, promises) {
|
|
16
|
-
|
|
17
|
-
if (resource.ordId.includes(ORD_SERVICE_NAME)
|
|
18
|
-
|
|
17
|
+
let totalFiles = resObj.reduce((total, resource) => {
|
|
18
|
+
if (!resource.ordId.includes(ORD_SERVICE_NAME) && resource.resourceDefinitions) {
|
|
19
|
+
return total + resource.resourceDefinitions.length;
|
|
19
20
|
}
|
|
21
|
+
return total;
|
|
22
|
+
}, 0);
|
|
20
23
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
24
|
+
const progressBar = new cliProgress.SingleBar({
|
|
25
|
+
format: "Processing resourcesFiles [{bar}] {percentage}% | {value}/{total} | ETA: {eta}s",
|
|
26
|
+
barCompleteChar: "█",
|
|
27
|
+
barIncompleteChar: "░",
|
|
28
|
+
stopOnComplete: true,
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
let warnings = [];
|
|
32
|
+
let completed = 0;
|
|
33
|
+
progressBar.start(totalFiles, 0);
|
|
34
|
+
|
|
35
|
+
try {
|
|
36
|
+
for (const resource of resObj) {
|
|
37
|
+
if (resource.ordId.includes(ORD_SERVICE_NAME) || !resource.resourceDefinitions) continue;
|
|
38
|
+
for (const resourceDefinition of resource.resourceDefinitions) {
|
|
39
|
+
try {
|
|
40
|
+
const { _, response } = await getMetadata(resourceDefinition.url, model); // eslint-disable-line no-unused-vars
|
|
41
|
+
const fileName = path
|
|
42
|
+
.join(resource.ordId, resourceDefinition.url.split("/").pop())
|
|
43
|
+
.replace(/:/g, "_");
|
|
44
|
+
promises.push(
|
|
45
|
+
this.write(response)
|
|
46
|
+
.to(fileName)
|
|
47
|
+
.catch((err) => {
|
|
48
|
+
warnings.push(`Error writing file ${fileName}: ${err.message}`);
|
|
49
|
+
}),
|
|
50
|
+
);
|
|
51
|
+
completed++;
|
|
52
|
+
progressBar.update(completed);
|
|
53
|
+
} catch (error) {
|
|
54
|
+
completed++;
|
|
55
|
+
progressBar.update(completed);
|
|
56
|
+
warnings.push(`Error getting metadata for ${resourceDefinition.url}: ${error.message}`);
|
|
57
|
+
} finally {
|
|
58
|
+
completed++;
|
|
59
|
+
progressBar.update(completed);
|
|
60
|
+
}
|
|
35
61
|
}
|
|
36
62
|
}
|
|
63
|
+
await Promise.all(promises);
|
|
64
|
+
} catch (error) {
|
|
65
|
+
warnings.push("Failed to process resources: " + error.message);
|
|
66
|
+
throw error;
|
|
67
|
+
} finally {
|
|
68
|
+
progressBar.stop();
|
|
37
69
|
}
|
|
38
70
|
}
|
|
39
71
|
|
|
@@ -79,7 +111,6 @@ module.exports = class OrdBuildPlugin extends cds_dk.build.Plugin {
|
|
|
79
111
|
if (ordDocument.eventResources && ordDocument.eventResources.length > 0) {
|
|
80
112
|
await this._writeResourcesFiles(ordDocument.eventResources, model, promises);
|
|
81
113
|
}
|
|
82
|
-
|
|
83
114
|
return Promise.all(promises);
|
|
84
115
|
}
|
|
85
116
|
};
|
package/lib/constants.js
CHANGED
|
@@ -83,6 +83,14 @@ const RESOURCE_VISIBILITY = Object.freeze({
|
|
|
83
83
|
private: "private",
|
|
84
84
|
});
|
|
85
85
|
|
|
86
|
+
const ALLOWED_VISIBILITY = Object.values(RESOURCE_VISIBILITY);
|
|
87
|
+
|
|
88
|
+
const IMPLEMENTATIONSTANDARD_VERSIONS = Object.freeze({
|
|
89
|
+
v1: "sap:ord-document-api:v1",
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
const SUPPORTED_IMPLEMENTATIONSTANDARD_VERSIONS = Object.values(IMPLEMENTATIONSTANDARD_VERSIONS);
|
|
93
|
+
|
|
86
94
|
const SHORT_DESCRIPTION_PREFIX = "Short description of ";
|
|
87
95
|
|
|
88
96
|
const SEM_VERSION_REGEX =
|
|
@@ -111,6 +119,9 @@ module.exports = {
|
|
|
111
119
|
ORD_RESOURCE_TYPE,
|
|
112
120
|
ORD_SERVICE_NAME,
|
|
113
121
|
RESOURCE_VISIBILITY,
|
|
122
|
+
ALLOWED_VISIBILITY,
|
|
123
|
+
IMPLEMENTATIONSTANDARD_VERSIONS,
|
|
124
|
+
SUPPORTED_IMPLEMENTATIONSTANDARD_VERSIONS,
|
|
114
125
|
SHORT_DESCRIPTION_PREFIX,
|
|
115
126
|
SEM_VERSION_REGEX,
|
|
116
127
|
};
|
package/lib/ord.js
CHANGED
|
@@ -80,10 +80,7 @@ function _triageCsnDefinitions(csn) {
|
|
|
80
80
|
const apiEndpoints = new Set();
|
|
81
81
|
const pendingEventServiceNames = new Set();
|
|
82
82
|
const entityTypeTargets = [];
|
|
83
|
-
const
|
|
84
|
-
const serviceNames = Object.keys(csn.definitions).filter(
|
|
85
|
-
(key) => csn.definitions[key].kind === CDS_ELEMENT_KIND.service,
|
|
86
|
-
);
|
|
83
|
+
const serviceNames = Object.keys(csn.definitions).filter((key) => _isValidService(key, csn.definitions[key]));
|
|
87
84
|
|
|
88
85
|
for (const definitionKey of Object.keys(csn.definitions)) {
|
|
89
86
|
const definitionObj = csn.definitions[definitionKey];
|
|
@@ -91,12 +88,11 @@ function _triageCsnDefinitions(csn) {
|
|
|
91
88
|
definitionKey.includes(BLOCKED_SERVICE_NAME.MTXServices) ||
|
|
92
89
|
definitionKey.includes(BLOCKED_SERVICE_NAME.OpenResourceDiscoveryService)
|
|
93
90
|
) {
|
|
94
|
-
Logger.warn(
|
|
91
|
+
Logger.warn("ORD service name", definitionKey, "is blocked.");
|
|
95
92
|
continue;
|
|
96
93
|
}
|
|
97
94
|
switch (definitionObj.kind) {
|
|
98
95
|
case CDS_ELEMENT_KIND.service: {
|
|
99
|
-
pendingServiceNames.push(definitionKey);
|
|
100
96
|
const apiResourceName = _handleApiResource(definitionKey, definitionObj);
|
|
101
97
|
if (apiResourceName) pendingApiResourceNames.push(apiResourceName);
|
|
102
98
|
break;
|
|
@@ -110,13 +106,13 @@ function _triageCsnDefinitions(csn) {
|
|
|
110
106
|
break;
|
|
111
107
|
}
|
|
112
108
|
case CDS_ELEMENT_KIND.event: {
|
|
113
|
-
const event = _handleEvent(serviceNames, definitionKey);
|
|
109
|
+
const event = _handleEvent(serviceNames, definitionKey, definitionObj);
|
|
114
110
|
if (event) pendingEventServiceNames.add(event);
|
|
115
111
|
break;
|
|
116
112
|
}
|
|
117
113
|
case CDS_ELEMENT_KIND.action:
|
|
118
114
|
case CDS_ELEMENT_KIND.function: {
|
|
119
|
-
const apiEndpoint = _handleActionOrFunction(definitionKey);
|
|
115
|
+
const apiEndpoint = _handleActionOrFunction(definitionKey, definitionObj);
|
|
120
116
|
if (apiEndpoint) apiEndpoints.add(apiEndpoint);
|
|
121
117
|
break;
|
|
122
118
|
}
|
|
@@ -124,7 +120,7 @@ function _triageCsnDefinitions(csn) {
|
|
|
124
120
|
}
|
|
125
121
|
|
|
126
122
|
return {
|
|
127
|
-
serviceNames
|
|
123
|
+
serviceNames,
|
|
128
124
|
apiResourceNames: pendingApiResourceNames,
|
|
129
125
|
apiEndpoints: Array.from(apiEndpoints),
|
|
130
126
|
eventServiceNames: [...pendingEventServiceNames],
|
|
@@ -133,7 +129,10 @@ function _triageCsnDefinitions(csn) {
|
|
|
133
129
|
}
|
|
134
130
|
|
|
135
131
|
function _handleApiResource(apiResourceName, serviceDefinition) {
|
|
136
|
-
if (
|
|
132
|
+
if (
|
|
133
|
+
_shouldSkipIfServiceOnlyContainsEvents(serviceDefinition) ||
|
|
134
|
+
!_isValidService(apiResourceName, serviceDefinition)
|
|
135
|
+
) {
|
|
137
136
|
return null;
|
|
138
137
|
}
|
|
139
138
|
return apiResourceName;
|
|
@@ -151,8 +150,32 @@ function _shouldSkipIfServiceOnlyContainsEvents(serviceDefinition) {
|
|
|
151
150
|
return false;
|
|
152
151
|
}
|
|
153
152
|
|
|
153
|
+
function _shouldNotSkipIfServiceProtocolIsNone(keyDefinition) {
|
|
154
|
+
if (keyDefinition["_service"] && keyDefinition["_service"]["@protocol"] === "none") {
|
|
155
|
+
return false;
|
|
156
|
+
}
|
|
157
|
+
return true;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
function _isBlockedServiceName(key) {
|
|
161
|
+
const blockedServices = [BLOCKED_SERVICE_NAME.MTXServices, BLOCKED_SERVICE_NAME.OpenResourceDiscoveryService];
|
|
162
|
+
return blockedServices.some((blocked) => key.includes(blocked));
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
function _isValidService(key, definition) {
|
|
166
|
+
const isExternalService = Object.keys(cds).includes("requires") ? Object.keys(cds.requires).includes(key) : false;
|
|
167
|
+
|
|
168
|
+
return (
|
|
169
|
+
definition.kind === CDS_ELEMENT_KIND.service &&
|
|
170
|
+
!definition["@cds.external"] &&
|
|
171
|
+
definition["@protocol"] !== "none" &&
|
|
172
|
+
!isExternalService &&
|
|
173
|
+
!_isBlockedServiceName(key)
|
|
174
|
+
);
|
|
175
|
+
}
|
|
176
|
+
|
|
154
177
|
function _handleEntity(key, keyDefinition) {
|
|
155
|
-
if (!key.includes(".texts")) {
|
|
178
|
+
if (!key.includes(".texts") && _shouldNotSkipIfServiceProtocolIsNone(keyDefinition)) {
|
|
156
179
|
const apiEndpoint = key;
|
|
157
180
|
const entityTypeTarget =
|
|
158
181
|
keyDefinition[ORD_ODM_ENTITY_NAME_ANNOTATION] || keyDefinition[ENTITY_RELATIONSHIP_ANNOTATION]
|
|
@@ -163,16 +186,22 @@ function _handleEntity(key, keyDefinition) {
|
|
|
163
186
|
return null;
|
|
164
187
|
}
|
|
165
188
|
|
|
166
|
-
function _handleEvent(serviceNames, key) {
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
189
|
+
function _handleEvent(serviceNames, key, keyDefinition) {
|
|
190
|
+
if (_shouldNotSkipIfServiceProtocolIsNone(keyDefinition)) {
|
|
191
|
+
for (const serviceName of serviceNames) {
|
|
192
|
+
if (key.startsWith(serviceName + ".")) {
|
|
193
|
+
return serviceName;
|
|
194
|
+
}
|
|
170
195
|
}
|
|
171
196
|
}
|
|
197
|
+
return null;
|
|
172
198
|
}
|
|
173
199
|
|
|
174
|
-
function _handleActionOrFunction(key) {
|
|
175
|
-
|
|
200
|
+
function _handleActionOrFunction(key, keyDefinition) {
|
|
201
|
+
if (_shouldNotSkipIfServiceProtocolIsNone(keyDefinition)) {
|
|
202
|
+
return key;
|
|
203
|
+
}
|
|
204
|
+
return null;
|
|
176
205
|
}
|
|
177
206
|
|
|
178
207
|
const _getPolicyLevels = (appConfig) =>
|
package/lib/templates.js
CHANGED
|
@@ -13,6 +13,8 @@ const {
|
|
|
13
13
|
ORD_ODM_ENTITY_NAME_ANNOTATION,
|
|
14
14
|
ORD_RESOURCE_TYPE,
|
|
15
15
|
RESOURCE_VISIBILITY,
|
|
16
|
+
ALLOWED_VISIBILITY,
|
|
17
|
+
SUPPORTED_IMPLEMENTATIONSTANDARD_VERSIONS,
|
|
16
18
|
SEM_VERSION_REGEX,
|
|
17
19
|
SHORT_DESCRIPTION_PREFIX,
|
|
18
20
|
CONTENT_MERGE_KEY,
|
|
@@ -139,7 +141,7 @@ function _getEntityVersion(entity) {
|
|
|
139
141
|
const entityVersion = entity.ordId.split(":").pop();
|
|
140
142
|
const version = entityVersion.replace("v", "") + ".0.0"; // TODO: version can be stated/overwritten by annotation
|
|
141
143
|
if (!SEM_VERSION_REGEX.test(version)) {
|
|
142
|
-
Logger.warn(
|
|
144
|
+
Logger.warn("Entity version", version, "is not a valid semantic version.");
|
|
143
145
|
}
|
|
144
146
|
return version;
|
|
145
147
|
}
|
|
@@ -240,16 +242,37 @@ const createEntityTypeTemplate = (appConfig, packageIds, entity) => {
|
|
|
240
242
|
};
|
|
241
243
|
};
|
|
242
244
|
|
|
243
|
-
|
|
245
|
+
/**
|
|
246
|
+
* Determines the visibility of a resource based on provided extensions, definition, and default visibility.
|
|
247
|
+
*
|
|
248
|
+
* The function checks for custom visibility values, validates the default visibility,
|
|
249
|
+
* and applies specific rules based on the resource's definition and extensions.
|
|
250
|
+
*
|
|
251
|
+
* @param {Object} ordExtensions - Extensions object containing resource metadata.
|
|
252
|
+
* @param {Object} definition - The resource definition object.
|
|
253
|
+
* @param {string} [defaultVisibility=RESOURCE_VISIBILITY.public] - The default visibility value.
|
|
254
|
+
* @returns {string} The resolved visibility value for the resource.
|
|
255
|
+
*/
|
|
256
|
+
function _handleVisibility(ordExtensions, definition, defaultVisibility = RESOURCE_VISIBILITY.public) {
|
|
244
257
|
let visibility;
|
|
258
|
+
//check for supported custom visibility value in defaultVisibility variable
|
|
259
|
+
if (!ALLOWED_VISIBILITY.includes(defaultVisibility)) {
|
|
260
|
+
Logger.warn("Default visibility", defaultVisibility, "is not supported. Using", RESOURCE_VISIBILITY.public, "as fallback.");
|
|
261
|
+
defaultVisibility = RESOURCE_VISIBILITY.public;
|
|
262
|
+
}
|
|
263
|
+
// Determine visibility
|
|
245
264
|
if (isPrimaryDataProductService(definition)) {
|
|
246
265
|
visibility = RESOURCE_VISIBILITY.internal;
|
|
247
266
|
} else if (ordExtensions.visibility) {
|
|
248
267
|
visibility = ordExtensions.visibility;
|
|
249
268
|
} else if (definition[ORD_EXTENSIONS_PREFIX + "visibility"]) {
|
|
250
269
|
visibility = definition[ORD_EXTENSIONS_PREFIX + "visibility"];
|
|
251
|
-
} else {
|
|
270
|
+
} else if (SUPPORTED_IMPLEMENTATIONSTANDARD_VERSIONS.includes(ordExtensions.implementationStandard)) {
|
|
271
|
+
// if the implementationStandard is for example sap:ord-document-api:v1, it should be public by default
|
|
252
272
|
visibility = RESOURCE_VISIBILITY.public;
|
|
273
|
+
} else if (ALLOWED_VISIBILITY.includes(defaultVisibility)) {
|
|
274
|
+
// Default visibility from config file
|
|
275
|
+
visibility = defaultVisibility;
|
|
253
276
|
}
|
|
254
277
|
return visibility;
|
|
255
278
|
}
|
|
@@ -267,7 +290,7 @@ function _handleVisibility(ordExtensions, definition) {
|
|
|
267
290
|
*/
|
|
268
291
|
const createAPIResourceTemplate = (serviceName, serviceDefinition, appConfig, packageIds, accessStrategies) => {
|
|
269
292
|
const ordExtensions = readORDExtensions(serviceDefinition);
|
|
270
|
-
const visibility = _handleVisibility(ordExtensions, serviceDefinition);
|
|
293
|
+
const visibility = _handleVisibility(ordExtensions, serviceDefinition, appConfig.env?.defaultVisibility);
|
|
271
294
|
const packageId = _getPackageID(appConfig.ordNamespace, packageIds, ORD_RESOURCE_TYPE.api, visibility);
|
|
272
295
|
|
|
273
296
|
const paths = _generatePaths(serviceName, serviceDefinition);
|
|
@@ -287,6 +310,7 @@ const createAPIResourceTemplate = (serviceName, serviceDefinition, appConfig, pa
|
|
|
287
310
|
}
|
|
288
311
|
|
|
289
312
|
const entityTypeMappings = _getEntityTypeMappings(serviceDefinition);
|
|
313
|
+
const exposedEntityTypes = _getExposedEntityTypes(serviceDefinition);
|
|
290
314
|
|
|
291
315
|
let obj = {
|
|
292
316
|
ordId,
|
|
@@ -306,6 +330,7 @@ const createAPIResourceTemplate = (serviceName, serviceDefinition, appConfig, pa
|
|
|
306
330
|
supported: "no",
|
|
307
331
|
},
|
|
308
332
|
...(entityTypeMappings ? { entityTypeMappings } : {}),
|
|
333
|
+
...(exposedEntityTypes ? { exposedEntityTypes } : []),
|
|
309
334
|
...ordExtensions,
|
|
310
335
|
};
|
|
311
336
|
|
|
@@ -349,10 +374,11 @@ const createAPIResourceTemplate = (serviceName, serviceDefinition, appConfig, pa
|
|
|
349
374
|
*/
|
|
350
375
|
const createEventResourceTemplate = (serviceName, serviceDefinition, appConfig, packageIds, accessStrategies) => {
|
|
351
376
|
const ordExtensions = readORDExtensions(serviceDefinition);
|
|
352
|
-
const visibility = _handleVisibility(ordExtensions, serviceDefinition);
|
|
377
|
+
const visibility = _handleVisibility(ordExtensions, serviceDefinition, appConfig.env?.defaultVisibility);
|
|
353
378
|
const packageId = _getPackageID(appConfig.ordNamespace, packageIds, ORD_RESOURCE_TYPE.event, visibility);
|
|
354
379
|
const ordId = `${appConfig.ordNamespace}:eventResource:${_getGroupNameWithNestedNamespace(serviceDefinition, appConfig)}:v1`;
|
|
355
380
|
const entityTypeMappings = _getEntityTypeMappings(serviceDefinition);
|
|
381
|
+
const exposedEntityTypes = _getExposedEntityTypes(serviceDefinition);
|
|
356
382
|
|
|
357
383
|
let obj = {
|
|
358
384
|
ordId,
|
|
@@ -376,6 +402,7 @@ const createEventResourceTemplate = (serviceName, serviceDefinition, appConfig,
|
|
|
376
402
|
],
|
|
377
403
|
extensible: { supported: "no" },
|
|
378
404
|
...(entityTypeMappings ? { entityTypeMappings } : {}),
|
|
405
|
+
...(exposedEntityTypes ? { exposedEntityTypes } : []),
|
|
379
406
|
...ordExtensions,
|
|
380
407
|
};
|
|
381
408
|
|
|
@@ -408,6 +435,26 @@ function _getEntityTypeMappings(definitionObj) {
|
|
|
408
435
|
}
|
|
409
436
|
}
|
|
410
437
|
|
|
438
|
+
function _getExposedEntityTypes(definitionObj) {
|
|
439
|
+
if (!definitionObj.entities) {
|
|
440
|
+
return;
|
|
441
|
+
}
|
|
442
|
+
const entities = Object.values(definitionObj.entities).flatMap((entity) => {
|
|
443
|
+
const entityData = _flattenEntityGraph(entity).map(createEntityTypeMappingsItemTemplate);
|
|
444
|
+
return _.uniqBy(entityData, CONTENT_MERGE_KEY);
|
|
445
|
+
});
|
|
446
|
+
const exposedEntityTypes = _.uniqBy(entities, CONTENT_MERGE_KEY)
|
|
447
|
+
.filter((entity) => entity !== undefined)
|
|
448
|
+
.map(({ ordId }) => ({
|
|
449
|
+
ordId,
|
|
450
|
+
}));
|
|
451
|
+
if (exposedEntityTypes.length > 0) {
|
|
452
|
+
return exposedEntityTypes;
|
|
453
|
+
} else {
|
|
454
|
+
return;
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
|
|
411
458
|
function _flattenEntityGraph(currentEntity, processedEntities = []) {
|
|
412
459
|
if (!currentEntity.associations) {
|
|
413
460
|
return [currentEntity];
|
|
@@ -481,5 +528,7 @@ module.exports = {
|
|
|
481
528
|
createEventResourceTemplate,
|
|
482
529
|
_getPackageID,
|
|
483
530
|
_getEntityTypeMappings,
|
|
531
|
+
_getExposedEntityTypes,
|
|
484
532
|
_propagateORDVisibility,
|
|
533
|
+
_handleVisibility,
|
|
485
534
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cap-js/ord",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.7",
|
|
4
4
|
"description": "CAP Plugin for generating ORD document.",
|
|
5
5
|
"repository": "cap-js/ord",
|
|
6
6
|
"author": "SAP SE (https://www.sap.com)",
|
|
@@ -34,13 +34,17 @@
|
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"@cap-js/asyncapi": "^1.0.3",
|
|
36
36
|
"@cap-js/openapi": "^1.2.1",
|
|
37
|
-
"
|
|
37
|
+
"bcryptjs": "3.0.2",
|
|
38
|
+
"cli-progress": "^3.12.0",
|
|
38
39
|
"lodash": "^4.17.21"
|
|
39
40
|
},
|
|
40
41
|
"cds": {
|
|
41
42
|
"requires": {
|
|
42
43
|
"SAP ORD Service": {
|
|
43
44
|
"model": "@cap-js/ord/lib/ord-service"
|
|
45
|
+
},
|
|
46
|
+
"[java]": {
|
|
47
|
+
"SAP ORD Service": false
|
|
44
48
|
}
|
|
45
49
|
}
|
|
46
50
|
}
|