UNPKG

@sap/cds-dk

Version:

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

77 lines (64 loc) 2.69 kB
// // 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? 'use strict' 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 } } }