UNPKG

@sap/cds

Version:

SAP Cloud Application Programming Model - CDS for Node.js

43 lines (35 loc) 1.4 kB
module.exports = (target, srv, result, keys_as_segments) => { if (typeof result !== 'object' || result == null || Array.isArray(result)) return const targetName = target.name.replace(`${srv.definition.name}.`, '') if (!target.keys) return targetName const filteredKeys = [...target.keys].filter(k => !k.isAssociation).map(k => k.name) if (!filteredKeys.every(k => k in result)) return const keyValuePairs = filteredKeys.reduce((acc, key) => { const value = result[key] if (result[key] === undefined) return acc if (Buffer.isBuffer(value)) { acc[key] = value.toString('base64') } else { const _type = target.elements[key]._type if (!keys_as_segments && typeof value === 'string' && _type !== 'cds.UUID') acc[key] = `'${value}'` else acc[key] = value } return acc }, {}) if (keys_as_segments) { let location = targetName for (const k in keyValuePairs) location += `/${keyValuePairs[k]}` return location } let keys const entries = Object.entries(keyValuePairs) if (entries.length === 1) { keys = entries[0][1] if (target.elements[entries[0][0]]['@odata.Type'] === 'Edm.String') keys = `'${keys}'` } else { keys = entries .map(([key, value]) => `${key}=${target.elements[key]['@odata.Type'] === 'Edm.String' ? `'${value}'` : value}`) .join(',') } return `${targetName}(${keys})` }