UNPKG

@sap/cds-dk

Version:

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

78 lines (68 loc) 3.37 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, // BTP Services requiredMtxApi, requiredJavaApprouterApi4, providedJavaApprouterApi, // APIs requiredAppApi4, providedAppApi, approuterMTXRoute, approuterMTXRouteJava // xs-app.json config } = require('../../registries/mta') module.exports = class ApprouterTemplate extends require('../../plugin') { static help() { return 'dynamic routing using @sap/approuter' } static hasInProduction(env) { return 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(this.options) const { isNodejs, isJava, hasMTXRoute, hasMultitenancy, hasXsuaa, hasMta, hasHelm, hasHelmUnifiedRuntime, hasMTXRouteJava, hasContainerize, srvPath, approuterPath } = project if (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] if (hasXsuaa) additions.push(xsuaa) const relationships = [] if (hasXsuaa) relationships.push({ insert: [xsuaa, 'name'], into: [srv, 'requires', 'name'] }, { insert: [xsuaa, 'name'], into: [approuter, 'requires', 'name'] }) await merge(__dirname, 'files/mta.yaml.hbs').into('mta.yaml', { with: project, additions, relationships, }) } if (hasHelm || hasHelmUnifiedRuntime) { await merge(__dirname, 'files', 'values.yaml.hbs').into('chart/values.yaml', { with: project }) } if (hasContainerize) { 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 }) } }