1 | "use strict";
|
2 | var __assign = (this && this.__assign) || function () {
|
3 | __assign = Object.assign || function(t) {
|
4 | for (var s, i = 1, n = arguments.length; i < n; i++) {
|
5 | s = arguments[i];
|
6 | for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
7 | t[p] = s[p];
|
8 | }
|
9 | return t;
|
10 | };
|
11 | return __assign.apply(this, arguments);
|
12 | };
|
13 | Object.defineProperty(exports, "__esModule", { value: true });
|
14 | exports.createGetResourcePathForKeys = void 0;
|
15 | var util_1 = require("@sap-cloud-sdk/util");
|
16 | var name_converter_1 = require("../name-converter");
|
17 | var logger = util_1.createLogger({
|
18 | package: 'core',
|
19 | messageContext: 'get-resource-path'
|
20 | });
|
21 |
|
22 |
|
23 |
|
24 |
|
25 |
|
26 |
|
27 | function createGetResourcePathForKeys(uriConverter) {
|
28 | |
29 |
|
30 |
|
31 |
|
32 |
|
33 |
|
34 |
|
35 |
|
36 | function getResourcePathForKeys(keys, entityConstructor) {
|
37 | if (keys === void 0) { keys = {}; }
|
38 | keys = filterNonKeyProperties(keys, entityConstructor);
|
39 | validateKeys(keys, entityConstructor);
|
40 | if (Object.keys(keys).length) {
|
41 | var byKey = Object.entries(keys)
|
42 | .map(function (_a) {
|
43 | var key = _a[0], value = _a[1];
|
44 | return keyToOData(key, value, entityConstructor);
|
45 | })
|
46 | .join(',');
|
47 | return entityConstructor._entityName + "(" + byKey + ")";
|
48 | }
|
49 | return entityConstructor._entityName;
|
50 | }
|
51 | function getMissingKeys(keys, entityConstructor) {
|
52 | var givenKeys = Object.keys(keys);
|
53 | return entityConstructor._keyFields
|
54 | .map(function (field) { return field._fieldName; })
|
55 | .filter(function (fieldName) { return !givenKeys.includes(fieldName); });
|
56 | }
|
57 | function getInvalidKeys(keys, entityConstructor) {
|
58 |
|
59 | var validKeys = entityConstructor._keyFields.map(function (field) { return field._fieldName; });
|
60 | return Object.keys(keys).filter(function (key) { return !validKeys.includes(key); });
|
61 | }
|
62 | function getNullishKeys(keys) {
|
63 | return Object.entries(keys)
|
64 | .filter(function (_a) {
|
65 | var value = _a[1];
|
66 | return util_1.isNullish(value);
|
67 | })
|
68 | .map(function (_a) {
|
69 | var key = _a[0];
|
70 | return key;
|
71 | });
|
72 | }
|
73 | function filterNonKeyProperties(keys, entityConstructor) {
|
74 | var invalidKeys = getInvalidKeys(keys, entityConstructor);
|
75 | if (invalidKeys.length) {
|
76 | logger.warn("There are too many key properties. Ignoring the following keys: " + invalidKeys.join(', '));
|
77 | return Object.entries(keys)
|
78 | .filter(function (_a) {
|
79 | var key = _a[0];
|
80 | return !invalidKeys.includes(key);
|
81 | })
|
82 | .reduce(function (validKeys, _a) {
|
83 | var _b;
|
84 | var key = _a[0], value = _a[1];
|
85 | return (__assign(__assign({}, validKeys), (_b = {}, _b[key] = value, _b)));
|
86 | }, {});
|
87 | }
|
88 | return keys;
|
89 | }
|
90 | function keyToOData(key, value, entityConstructor) {
|
91 | var edmType = entityConstructor[name_converter_1.toStaticPropertyFormat(key)].edmType;
|
92 | return key + "=" + uriConverter.convertToUriFormat(value, edmType);
|
93 | }
|
94 | function validateKeys(keys, entityConstructor) {
|
95 | var missingKeys = getMissingKeys(keys, entityConstructor);
|
96 | if (missingKeys.length) {
|
97 | throw new Error("Cannot get resource path for entity " + entityConstructor._entityName + ". The following keys are missing: " + missingKeys.join(', '));
|
98 | }
|
99 | var nullishKeys = getNullishKeys(keys);
|
100 | if (nullishKeys.length) {
|
101 | throw new Error("Cannot get resource path for entity " + entityConstructor._entityName + ". The following keys have nullish values, but are not nullable: " + nullishKeys.join(', '));
|
102 | }
|
103 | }
|
104 | return { getResourcePathForKeys: getResourcePathForKeys };
|
105 | }
|
106 | exports.createGetResourcePathForKeys = createGetResourcePathForKeys;
|
107 |
|
\ | No newline at end of file |