UNPKG

@sap/cds-dk

Version:

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

72 lines (63 loc) 3.46 kB
const { join } = require('path') const cds = require('../../../cds') const { read, write, copy } = cds.utils const { readProject } = require('../../projectReader') const { merge } = require('../../merge') const { renderAndCopy } = require('../../template') const mvn = require('../../mvn') module.exports = class SampleTemplate extends require('../../plugin') { static help() { return 'sample files including Fiori UI' } async run() { const project = readProject() if (project.extendsApp) { // for extension projects, delegate to extension generator const ExtensionGenerator = require('../extension') return new ExtensionGenerator().addSample() } const { db, srv, app } = cds.env.folders const i18n = cds.env.i18n.folders[0] const { appName, appPath } = project if (project.language === 'java') { await mvn.add('sample') } else { await Promise.all([ copy(join(__dirname, 'files/db')).to(db), copy(join(__dirname, 'files/srv')).to(srv), copy(join(__dirname, 'files/_i18n')).to(i18n) ]) const lang = project.isTypescript ? 'typescript' : 'javascript' await renderAndCopy(join(__dirname, 'files', lang), srv, project) for (const uiApp of ['admin-books', 'admin-authors', 'browse', 'genres']) { project.app = uiApp await renderAndCopy(join(__dirname, 'files/app', uiApp), join(app, uiApp), project) } await Promise.all([ copy(join(__dirname, 'files/app/common.cds')).to(app, 'common.cds'), copy(join(__dirname, 'files/app/fiori-apps.html')).to(app, 'fiori-apps.html'), copy(join(__dirname, 'files/app/services.cds')).to(app, 'services.cds'), copy(join(__dirname, 'files/app/appconfig')).to(app, 'appconfig'), copy(join(__dirname, 'files/app/_i18n')).to(app, '_i18n') ]) } await merge(__dirname, 'files/package.json.hbs').into('package.json', { with: { appPath }}) // manifest.json IDs must be unique -> otherwise deployment failures on conflicts await Promise.all(project.appUIPaths.map(async p => { const manifest = await read(join(appPath, p, 'webapp/manifest.json')) manifest['sap.app'].id = appName + '.' + p await write(join(appPath, p, 'webapp/manifest.json'), manifest, { spaces: 2 }) })) if (project.isNodejs) { // REVISIT: align with Java samples const fioriSandboxConfigPath = join(appPath, 'appconfig/fioriSandboxConfig.json') const fioriSandboxConfig = await read(fioriSandboxConfigPath) const sampleInbounds = { BrowseBooks: 'browse', ManageAuthors: 'admin-authors', BrowseGenres: 'genres', ManageBooks: 'admin-books' } for (const [name, id] of Object.entries(sampleInbounds)) { const service = fioriSandboxConfig.services?.ClientSideTargetResolution?.adapter?.config?.inbounds?.[name] if (!service) continue if (!service.resolutionResult) service.resolutionResult = {} service.resolutionResult.additionalInformation = `SAPUI5.Component=${appName}.${id}` await write(fioriSandboxConfigPath, fioriSandboxConfig, { spaces: 2 }) } } } }