Cosmetics
This commit is contained in:
@@ -1,9 +1,9 @@
|
|||||||
const cds = require ('@sap/cds')
|
|
||||||
const {resolve} = require ('path')
|
const {resolve} = require ('path')
|
||||||
const {promisify} = require('util')
|
const {promisify} = require('util')
|
||||||
const readFile = promisify(require('fs').readFile)
|
const readFile = promisify(require('fs').readFile)
|
||||||
const swaggerUi = require ('swagger-ui-express')
|
const swaggerUi = require ('swagger-ui-express')
|
||||||
const DEBUG = cds.debug('openapi')
|
const cds = require ('@sap/cds')
|
||||||
|
const trace = cds.debug('openapi')
|
||||||
|
|
||||||
let app, host, docCache={}
|
let app, host, docCache={}
|
||||||
|
|
||||||
@@ -16,18 +16,18 @@ cds
|
|||||||
req.swaggerDoc = await toOpenApiDoc(service, host, docCache)
|
req.swaggerDoc = await toOpenApiDoc(service, host, docCache)
|
||||||
next()
|
next()
|
||||||
}, swaggerUi.serve, swaggerUi.setup())
|
}, swaggerUi.serve, swaggerUi.setup())
|
||||||
addLink(service, apiPath)
|
addLinkToIndexHtml(service, apiPath)
|
||||||
})
|
})
|
||||||
.on ('listening', ({server})=> { host = 'localhost:'+server.address().port })
|
.on ('listening', ({server})=> { host = 'localhost:'+server.address().port })
|
||||||
|
|
||||||
async function toOpenApiDoc(service, host, cache) {
|
async function toOpenApiDoc(service, host, cache) {
|
||||||
if (!cache[service.name]) {
|
if (!cache[service.name]) {
|
||||||
const spec = await openApiFromFile(service, host)
|
const spec = await openApiFromFile(service, host)
|
||||||
if (spec) {
|
if (spec) { // pre-compiled spec file available?
|
||||||
cache[service.name] = spec
|
cache[service.name] = spec
|
||||||
}
|
}
|
||||||
else if (cds.compile.to.openapi) { // on-the-fly exporter available?
|
else if (cds.compile.to.openapi) { // on-the-fly exporter available?
|
||||||
DEBUG && DEBUG ('Compiling Open API spec for', service.name)
|
trace && trace ('Compiling Open API spec for', service.name)
|
||||||
cache[service.name] = cds.compile.to.openapi (service.model, {
|
cache[service.name] = cds.compile.to.openapi (service.model, {
|
||||||
service: service.name,
|
service: service.name,
|
||||||
'openapi:url': service.path,
|
'openapi:url': service.path,
|
||||||
@@ -42,17 +42,17 @@ async function openApiFromFile(service) {
|
|||||||
const fileName = resolve(`srv/${service.name}.openapi3.json`)
|
const fileName = resolve(`srv/${service.name}.openapi3.json`)
|
||||||
const file = await readFile(fileName).catch(()=>{/*no such file*/})
|
const file = await readFile(fileName).catch(()=>{/*no such file*/})
|
||||||
if (file) {
|
if (file) {
|
||||||
DEBUG && DEBUG ('Using Open API spec from file', fileName)
|
trace && trace ('Using Open API spec from file', fileName)
|
||||||
return JSON.parse(file)
|
return JSON.parse(file)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function addLink(service, apiPath) {
|
function addLinkToIndexHtml(service, apiPath) {
|
||||||
const link = (entity) => {
|
const provider = (entity) => {
|
||||||
if (entity) return // don't want to provide link on entity level
|
if (entity) return // avoid link on entity level, looks too messy
|
||||||
return { href:apiPath, name:'Swagger UI', title:'Show in Swagger UI' }
|
return { href:apiPath, name:'Swagger UI', title:'Show in Swagger UI' }
|
||||||
}
|
}
|
||||||
service.$linkProviders ? service.$linkProviders.push(link) : service.$linkProviders = [link]
|
service.$linkProviders ? service.$linkProviders.push(provider) : service.$linkProviders = [provider]
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = cds.server
|
module.exports = cds.server
|
||||||
|
|||||||
Reference in New Issue
Block a user