UNPKG

@sap/cds-dk

Version:

Command line client and development toolkit for the SAP Cloud Application Programming Model

47 lines (41 loc) 1.8 kB
'use strict' /** * Merges multiple partial CSNs (Core Schema Notations) into a single CSN. * @param {Array<object>} partialCsns - An array of partial CSN objects to be merged. * @returns {object} - The merged CSN object. * @throws Will throw an error if there are conflicting definitions or translations. */ exports.mergePartialCsns = function (partialCsns) { const parentCsn = { definitions: Object.create(null), i18n: Object.create(null) } for (const partialCsn of partialCsns) { for (const definitionName in partialCsn.definitions) { const definition = partialCsn.definitions[definitionName] if (parentCsn.definitions[definitionName]) { const existing = JSON.stringify(parentCsn.definitions[definitionName]) const current = JSON.stringify(definition) if (existing !== current) { throw new Error('Error for definition ' + definitionName + ' - it already exists!') } } else { parentCsn.definitions[definitionName] = definition } } for (const i18nLanguageCode in partialCsn.i18n) { const i18n = partialCsn.i18n[i18nLanguageCode] if (!parentCsn.i18n[i18nLanguageCode]) { parentCsn.i18n[i18nLanguageCode] = Object.create(null) } for (const translationCode in i18n) { if (parentCsn.i18n[i18nLanguageCode][translationCode]) { const existing = parentCsn.i18n[i18nLanguageCode][translationCode] const current = i18n[translationCode] if (existing !== current) { throw new Error('Error for i18n:' + i18nLanguageCode + ' with translation ' + translationCode + ' - it already exists!') } } parentCsn.i18n[i18nLanguageCode][translationCode] = i18n[translationCode] } } } return parentCsn }