@sap/cds-dk
Version:
Command line client and development toolkit for the SAP Cloud Application Programming Model
72 lines (63 loc) • 3.46 kB
JavaScript
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 })
}
}
}
}