UNPKG

@sap/cds-dk

Version:

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

93 lines (81 loc) 3.8 kB
const cds = require('../../../cds') const { exists } = cds.utils const { join } = require('path') const { readProject } = require('../../projectReader') const { sort, merge } = require('../../merge') const { srv4, mtxSidecar4, approuter, // Modules xsuaa, ias, // BTP Services requiredMtxApi, requiredJavaApprouterApi4, providedJavaApprouterApi, // APIs requiredAppApi4, providedAppApi, approuterMTXRoute, approuterMTXRouteJava // xs-app.json config } = require('../../registries/mta') const KymaTemplate = require('../kyma') module.exports = class ApprouterTemplate extends require('../../plugin') { static help() { return 'dynamic routing using @sap/approuter' } static hasInProduction(env) { return exists(join('.deploy', 'app-router')) || exists(join(env.folders.app, 'xs-app.json')) || exists(join(env.folders.app, 'router', 'xs-app.json')) } async run() { const { approuterPath } = readProject() const appPackageJSONPath = join(approuterPath, 'package.json') await merge(__dirname, 'files/package.json').into(appPackageJSONPath) await sort(appPackageJSONPath, 'dependencies') await merge(__dirname, 'files/default-env.json').into(approuterPath + '/default-env.json') } async combine() { const project = readProject() const { isNodejs, isJava, addIas, addXsuaa, hasXsuaa, hasIas, addMultitenancy, hasMTXRoute, hasMTXRouteJava, addMta, hasMta, hasMultitenancy, addContainerize, addKyma, hasKyma, srvPath, approuterPath } = project if (addMta || (addMultitenancy || addXsuaa || addIas) && hasMta) { const srv = srv4(srvPath) const apis = isJava && hasMultitenancy ? [requiredJavaApprouterApi4(srv), providedJavaApprouterApi] : [] const mtxSidecar = mtxSidecar4(isJava ? 'mtx/sidecar' : 'gen/mtx/sidecar') if (isNodejs && hasMultitenancy) apis.push(requiredMtxApi, requiredAppApi4(mtxSidecar), providedAppApi) if (isJava && hasMultitenancy) apis.push(requiredMtxApi) const modules = [srv, approuter] if (hasMultitenancy) modules.push(mtxSidecar) const additions = [...modules, ...apis] const relationships = [] if (hasXsuaa) { relationships.push({ insert: [xsuaa, 'name'], into: [approuter, 'requires', 'name'] }) } if (hasIas) { relationships.push({ insert: [ias, 'name'], into: [approuter, 'requires', 'name'] }) } await merge(__dirname, 'files/mta.yaml.hbs').into('mta.yaml', { with: project, additions, relationships, }) } if(addKyma) { await KymaTemplate.mergeDependency('web-application', 'approuter') } if (addKyma || (addMultitenancy && hasKyma)) { await merge(__dirname, 'files', 'values.yaml.hbs').into('chart/values.yaml', { with: project }) } if (addContainerize || addKyma) { const additions = [{ in: 'modules', where: { name: `${project.appName}-approuter` } }] await merge(__dirname, '/files/containerize.yaml.hbs').into('containerize.yaml', { with: project, additions }) } const xsAppPath = join(approuterPath, 'xs-app.json') const additions = hasMTXRoute ? [{ ...approuterMTXRoute, at: 0 }] : [] if (hasMTXRouteJava) additions.push({ ...approuterMTXRouteJava, at: 0 }) await merge(__dirname, 'files/xs-app.json.hbs').into(xsAppPath, { project, additions }) } }