@sap/cds-dk
Version:
Command line client and development toolkit for the SAP Cloud Application Programming Model
47 lines (41 loc) • 1.8 kB
JavaScript
/**
* 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
}