add custom build task contribution sample

This commit is contained in:
Lothar Bender
2021-11-11 11:55:28 +01:00
parent c4529f3cd7
commit 8b0f6010a5
4 changed files with 66 additions and 2 deletions

View File

@@ -8,6 +8,9 @@
"express": "^4.17.1",
"passport": "0.4.1"
},
"devDependencies": {
"@cds/cds-plugin-openapi": "*"
},
"scripts": {
"genres": "cds serve test/genres.cds",
"start": "cds run",

View File

@@ -0,0 +1,51 @@
/* eslint-disable require-await */
const path = require("path")
const fs = require("fs")
const cds = require('@sap/cds'), { BuildTaskProvider, BuildTaskHandler } = cds.build
const cdsdk = require('@sap/cds-dk')
const { path4 } = cds.serve
const logger = cds.log("build")
module.exports.activate = () => {
cds.build.registerProvider(
new (class extends BuildTaskProvider {
get id() {
return 'openapi'
}
get dependents() {
return ['node-cf', 'java-cf']
}
applyTaskDefaults(task) {
task.src = task.src || cds.env.folders.srv.replace(/\/$/, '')
}
async lookupTasks() {
if (process.env.NODE_ENV === 'production') {
return [{ for: this.id }]
}
}
get handler() {
return class extends BuildTaskHandler {
async clean() {
fs.rm(path.join(this.task.dest, "gen/docs"), { recursive: true, force: true }, (err) => logger.error(err))
}
async build() {
const model = await this.model()
const { options } = this.task
// generate openapi files for all services
await Promise.all(cds.linked(model).services.map(service => {
const openApi = cdsdk.compile.to.openapi(model, {
service: service.name,
'openapi:url': path4(service).replace(/\.[^.]+$/, ''),
'openapi:diagram': options.diagram
})
this.write(openApi).to(`gen/docs/${service.name}.openapi3.json`)
}))
}
}
}
})()
)
}

View File

@@ -0,0 +1,9 @@
{
"name": "@sap/cds-plugin-openapi",
"version": "1.0.0",
"description": "OpenAPI service specification build plugin",
"main": "index.js",
"dependencies": {
"@sap/cds-dk": "^4"
}
}

View File

@@ -12,14 +12,15 @@
"@capire/media": "./media",
"@capire/orders": "./orders",
"@capire/reviews": "./reviews",
"@sap/cds": "^5.1.5"
"@sap/cds": "git+https://github.tools.sap/cap/cds#add/customBuildTaskProviders"
},
"devDependencies": {
"cds-swagger-ui-express": "^0.2.0",
"chai": "^4.2.0",
"chai-as-promised": "^7.1.1",
"chai-subset": "^1.6.0",
"sqlite3": "^5.0.0"
"sqlite3": "^5.0.0",
"@cds/cds-plugin-openapi": "./cds-plugin-openapi"
},
"scripts": {
"cleanup": "rm -rf node_modules && rm -rf */node_modules && rm -rf */*/node_modules",