Cosmetics

This commit is contained in:
Christian Georgi
2020-11-14 21:56:08 +01:00
parent 6d488b042c
commit f593265687

View File

@@ -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