@sap/cds-dk
Version:
Command line client and development toolkit for the SAP Cloud Application Programming Model
77 lines (64 loc) • 2.69 kB
JavaScript
//
// get all CSNs related to Data Product from local repo (cloned from https://github.tools.sap/bdc-fos/dp-metadata)
// and combine them into one CSN file
//
// Note: in this repo, ...
// CSN files are named like Customer_1.0.0.json -> 3 digit version
// Data Product ORD files are named like Customer_1.0.0.json -> 3 digit version
// Data Set files are named like Customer_1.0.0.json -> 3 digit version
// TODO: sap.capdpprod:dataProduct:CarbonJournalEntries:v1 does not have datasets, only direct data sources?
const fs = require ('node:fs')
const { mergePartialCsns } = require ('./merge-csns')
/**
*
* @param ordId
* @param kind
*/
function ordIdToPath(ordId, kind) {
// sap.s4com:dataProduct:Customer:v1
const regex = new RegExp('([^:]+):'+ kind + ':([^:]+):v([^:]+)')
const match = ordId.match(regex)
const namespace = match[1] // "sap.s4com"
const name = match[2] // "Customer"
const version = match[3] // "1"
return `${namespace.replace('.','/')}/${name}_${version}.json` // TODO version handling!
}
/**
*
* @param pathToRepo
* @param region
* @param landscape
* @param dataProduct_ordId
*/
exports.getDataProductCsnFromLocalRepo = function (pathToRepo, region, landscape, dataProduct_ordId) {
const dataProduct_ordId_long_version = dataProduct_ordId + '.0.0'
const path_prefix = pathToRepo + `/environments/${region}/${landscape}/defaults`
const dataSource_ordIds = getDataSources()
let partialCsns = []
for (let dataSource_ordId of dataSource_ordIds) {
// read csn file
const csn_path = `${path_prefix}/csn_documents/`+ ordIdToPath(dataSource_ordId, 'dataSource')
// environments/eu10/stage-canary/defaults/csn_documents/sap/s4com/Customer_1.0.0.json
const csn = JSON.parse(fs.readFileSync(csn_path, { encoding: 'utf-8' }))
partialCsns.push(csn)
}
const mergedCsn = mergePartialCsns(partialCsns)
return mergedCsn
/**
*
*/
function getDataSources() {
const dpDefinitionFile = JSON.parse(fs.readFileSync(`${path_prefix}/dataproducts/` + ordIdToPath(dataProduct_ordId_long_version, 'dataProduct'), { encoding: 'utf-8' }))
const dpdV2 = dpDefinitionFile?.dpdVersion === 'v2'
if(dpdV2) {
return dpDefinitionFile.dependsOn.filter(dep => dep.includes(':dataSource:'))
} else {
// read dataset file
const dataset_path = `${path_prefix}/datasets/` + ordIdToPath(dataProduct_ordId_long_version, 'dataProduct')
// environments/eu10/stage-canary/defaults/datasets/sap/s4com/Customer_1.0.0.json
const dataset = JSON.parse(fs.readFileSync(dataset_path, { encoding: 'utf-8' }))
return dataset.dataSources
}
}
}