add custom build task contribution sample
This commit is contained in:
@@ -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",
|
||||
|
||||
51
cds-plugin-openapi/index.js
Normal file
51
cds-plugin-openapi/index.js
Normal 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`)
|
||||
}))
|
||||
}
|
||||
}
|
||||
}
|
||||
})()
|
||||
)
|
||||
}
|
||||
9
cds-plugin-openapi/package.json
Normal file
9
cds-plugin-openapi/package.json
Normal 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"
|
||||
}
|
||||
}
|
||||
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user