Generate response type as boolean if the request is HEAD only (#1275)
This commit is contained in:
committed by
delvedor
parent
4c1095d805
commit
e6f1b645a2
@ -50,8 +50,10 @@ function genFactory (folder, paths) {
|
|||||||
.split('.')
|
.split('.')
|
||||||
.reverse()
|
.reverse()
|
||||||
.reduce((acc, val) => {
|
.reduce((acc, val) => {
|
||||||
const body = hasBody(paths, file.slice(0, -3))
|
const spec = readSpec(paths, file.slice(0, -3))
|
||||||
const methods = acc === null ? buildMethodDefinition({ kibana: false }, val, name, body) : null
|
const isHead = isHeadMethod(spec, file.slice(0, -3))
|
||||||
|
const body = hasBody(spec, file.slice(0, -3))
|
||||||
|
const methods = acc === null ? buildMethodDefinition({ kibana: false }, val, name, body, isHead) : null
|
||||||
const obj = {}
|
const obj = {}
|
||||||
if (methods) {
|
if (methods) {
|
||||||
for (const m of methods) {
|
for (const m of methods) {
|
||||||
@ -80,8 +82,10 @@ function genFactory (folder, paths) {
|
|||||||
.split('.')
|
.split('.')
|
||||||
.reverse()
|
.reverse()
|
||||||
.reduce((acc, val) => {
|
.reduce((acc, val) => {
|
||||||
const body = hasBody(paths, file.slice(0, -3))
|
const spec = readSpec(paths, file.slice(0, -3))
|
||||||
const methods = acc === null ? buildMethodDefinition({ kibana: true }, val, name, body) : null
|
const isHead = isHeadMethod(spec, file.slice(0, -3))
|
||||||
|
const body = hasBody(spec, file.slice(0, -3))
|
||||||
|
const methods = acc === null ? buildMethodDefinition({ kibana: true }, val, name, body, isHead) : null
|
||||||
const obj = {}
|
const obj = {}
|
||||||
if (methods) {
|
if (methods) {
|
||||||
for (const m of methods) {
|
for (const m of methods) {
|
||||||
@ -246,63 +250,77 @@ function toPascalCase (str) {
|
|||||||
return str[0].toUpperCase() + str.slice(1)
|
return str[0].toUpperCase() + str.slice(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
function buildMethodDefinition (opts, api, name, hasBody) {
|
function buildMethodDefinition (opts, api, name, hasBody, isHead) {
|
||||||
const Name = toPascalCase(name)
|
const Name = toPascalCase(name)
|
||||||
const bodyType = ndjsonApiKey.includes(Name) ? 'RequestNDBody' : 'RequestBody'
|
const bodyType = ndjsonApiKey.includes(Name) ? 'RequestNDBody' : 'RequestBody'
|
||||||
|
const responseType = isHead ? 'boolean' : 'Record<string, any>'
|
||||||
const defaultBodyType = ndjsonApiKey.includes(Name) ? 'Record<string, any>[]' : 'Record<string, any>'
|
const defaultBodyType = ndjsonApiKey.includes(Name) ? 'Record<string, any>[]' : 'Record<string, any>'
|
||||||
|
|
||||||
if (opts.kibana) {
|
if (opts.kibana) {
|
||||||
if (hasBody) {
|
if (hasBody) {
|
||||||
return [
|
return [
|
||||||
{ key: `${camelify(api)}<TResponse = Record<string, any>, TRequestBody extends ${bodyType} = ${defaultBodyType}, TContext = Context>(params?: RequestParams.${Name}<TRequestBody>, options?: TransportRequestOptions)`, val: 'TransportRequestPromise<ApiResponse<TResponse, TContext>>' }
|
{ key: `${camelify(api)}<TResponse = ${responseType}, TRequestBody extends ${bodyType} = ${defaultBodyType}, TContext = Context>(params?: RequestParams.${Name}<TRequestBody>, options?: TransportRequestOptions)`, val: `TransportRequestPromise<ApiResponse<TResponse, TContext>>` }
|
||||||
]
|
]
|
||||||
} else {
|
} else {
|
||||||
return [
|
return [
|
||||||
{ key: `${camelify(api)}<TResponse = Record<string, any>, TContext = Context>(params?: RequestParams.${Name}, options?: TransportRequestOptions)`, val: 'TransportRequestPromise<ApiResponse<TResponse, TContext>>' }
|
{ key: `${camelify(api)}<TResponse = ${responseType}, TContext = Context>(params?: RequestParams.${Name}, options?: TransportRequestOptions)`, val: `TransportRequestPromise<ApiResponse<TResponse, TContext>>` }
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hasBody) {
|
if (hasBody) {
|
||||||
let methods = [
|
let methods = [
|
||||||
{ key: `${api}<TResponse = Record<string, any>, TRequestBody extends ${bodyType} = ${defaultBodyType}, TContext = Context>(params?: RequestParams.${Name}<TRequestBody>, options?: TransportRequestOptions)`, val: 'TransportRequestPromise<ApiResponse<TResponse, TContext>>' },
|
{ key: `${api}<TResponse = ${responseType}, TRequestBody extends ${bodyType} = ${defaultBodyType}, TContext = Context>(params?: RequestParams.${Name}<TRequestBody>, options?: TransportRequestOptions)`, val: `TransportRequestPromise<ApiResponse<TResponse, TContext>>` },
|
||||||
{ key: `${api}<TResponse = Record<string, any>, TRequestBody extends ${bodyType} = ${defaultBodyType}, TContext = Context>(callback: callbackFn<TResponse, TContext>)`, val: 'TransportRequestCallback' },
|
{ key: `${api}<TResponse = ${responseType}, TRequestBody extends ${bodyType} = ${defaultBodyType}, TContext = Context>(callback: callbackFn<TResponse, TContext>)`, val: `TransportRequestCallback` },
|
||||||
{ key: `${api}<TResponse = Record<string, any>, TRequestBody extends ${bodyType} = ${defaultBodyType}, TContext = Context>(params: RequestParams.${Name}<TRequestBody>, callback: callbackFn<TResponse, TContext>)`, val: 'TransportRequestCallback' },
|
{ key: `${api}<TResponse = ${responseType}, TRequestBody extends ${bodyType} = ${defaultBodyType}, TContext = Context>(params: RequestParams.${Name}<TRequestBody>, callback: callbackFn<TResponse, TContext>)`, val: `TransportRequestCallback` },
|
||||||
{ key: `${api}<TResponse = Record<string, any>, TRequestBody extends ${bodyType} = ${defaultBodyType}, TContext = Context>(params: RequestParams.${Name}<TRequestBody>, options: TransportRequestOptions, callback: callbackFn<TResponse, TContext>)`, val: 'TransportRequestCallback' }
|
{ key: `${api}<TResponse = ${responseType}, TRequestBody extends ${bodyType} = ${defaultBodyType}, TContext = Context>(params: RequestParams.${Name}<TRequestBody>, options: TransportRequestOptions, callback: callbackFn<TResponse, TContext>)`, val: `TransportRequestCallback` }
|
||||||
]
|
]
|
||||||
if (isSnakeCased(api)) {
|
if (isSnakeCased(api)) {
|
||||||
methods = methods.concat([
|
methods = methods.concat([
|
||||||
{ key: `${camelify(api)}<TResponse = Record<string, any>, TRequestBody extends ${bodyType} = ${defaultBodyType}, TContext = Context>(params?: RequestParams.${Name}<TRequestBody>, options?: TransportRequestOptions)`, val: 'TransportRequestPromise<ApiResponse<TResponse, TContext>>' },
|
{ key: `${camelify(api)}<TResponse = ${responseType}, TRequestBody extends ${bodyType} = ${defaultBodyType}, TContext = Context>(params?: RequestParams.${Name}<TRequestBody>, options?: TransportRequestOptions)`, val: `TransportRequestPromise<ApiResponse<TResponse, TContext>>` },
|
||||||
{ key: `${camelify(api)}<TResponse = Record<string, any>, TRequestBody extends ${bodyType} = ${defaultBodyType}, TContext = Context>(callback: callbackFn<TResponse, TContext>)`, val: 'TransportRequestCallback' },
|
{ key: `${camelify(api)}<TResponse = ${responseType}, TRequestBody extends ${bodyType} = ${defaultBodyType}, TContext = Context>(callback: callbackFn<TResponse, TContext>)`, val: `TransportRequestCallback` },
|
||||||
{ key: `${camelify(api)}<TResponse = Record<string, any>, TRequestBody extends ${bodyType} = ${defaultBodyType}, TContext = Context>(params: RequestParams.${Name}<TRequestBody>, callback: callbackFn<TResponse, TContext>)`, val: 'TransportRequestCallback' },
|
{ key: `${camelify(api)}<TResponse = ${responseType}, TRequestBody extends ${bodyType} = ${defaultBodyType}, TContext = Context>(params: RequestParams.${Name}<TRequestBody>, callback: callbackFn<TResponse, TContext>)`, val: `TransportRequestCallback` },
|
||||||
{ key: `${camelify(api)}<TResponse = Record<string, any>, TRequestBody extends ${bodyType} = ${defaultBodyType}, TContext = Context>(params: RequestParams.${Name}<TRequestBody>, options: TransportRequestOptions, callback: callbackFn<TResponse, TContext>)`, val: 'TransportRequestCallback' }
|
{ key: `${camelify(api)}<TResponse = ${responseType}, TRequestBody extends ${bodyType} = ${defaultBodyType}, TContext = Context>(params: RequestParams.${Name}<TRequestBody>, options: TransportRequestOptions, callback: callbackFn<TResponse, TContext>)`, val: `TransportRequestCallback` }
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
return methods
|
return methods
|
||||||
} else {
|
} else {
|
||||||
let methods = [
|
let methods = [
|
||||||
{ key: `${api}<TResponse = Record<string, any>, TContext = Context>(params?: RequestParams.${Name}, options?: TransportRequestOptions)`, val: 'TransportRequestPromise<ApiResponse<TResponse, TContext>>' },
|
{ key: `${api}<TResponse = ${responseType}, TContext = Context>(params?: RequestParams.${Name}, options?: TransportRequestOptions)`, val: `TransportRequestPromise<ApiResponse<TResponse, TContext>>` },
|
||||||
{ key: `${api}<TResponse = Record<string, any>, TContext = Context>(callback: callbackFn<TResponse, TContext>)`, val: 'TransportRequestCallback' },
|
{ key: `${api}<TResponse = ${responseType}, TContext = Context>(callback: callbackFn<TResponse, TContext>)`, val: `TransportRequestCallback` },
|
||||||
{ key: `${api}<TResponse = Record<string, any>, TContext = Context>(params: RequestParams.${Name}, callback: callbackFn<TResponse, TContext>)`, val: 'TransportRequestCallback' },
|
{ key: `${api}<TResponse = ${responseType}, TContext = Context>(params: RequestParams.${Name}, callback: callbackFn<TResponse, TContext>)`, val: `TransportRequestCallback` },
|
||||||
{ key: `${api}<TResponse = Record<string, any>, TContext = Context>(params: RequestParams.${Name}, options: TransportRequestOptions, callback: callbackFn<TResponse, TContext>)`, val: 'TransportRequestCallback' }
|
{ key: `${api}<TResponse = ${responseType}, TContext = Context>(params: RequestParams.${Name}, options: TransportRequestOptions, callback: callbackFn<TResponse, TContext>)`, val: `TransportRequestCallback` }
|
||||||
]
|
]
|
||||||
if (isSnakeCased(api)) {
|
if (isSnakeCased(api)) {
|
||||||
methods = methods.concat([
|
methods = methods.concat([
|
||||||
{ key: `${camelify(api)}<TResponse = Record<string, any>, TContext = Context>(params?: RequestParams.${Name}, options?: TransportRequestOptions)`, val: 'TransportRequestPromise<ApiResponse<TResponse, TContext>>' },
|
{ key: `${camelify(api)}<TResponse = ${responseType}, TContext = Context>(params?: RequestParams.${Name}, options?: TransportRequestOptions)`, val: `TransportRequestPromise<ApiResponse<TResponse, TContext>>` },
|
||||||
{ key: `${camelify(api)}<TResponse = Record<string, any>, TContext = Context>(callback: callbackFn<TResponse, TContext>)`, val: 'TransportRequestCallback' },
|
{ key: `${camelify(api)}<TResponse = ${responseType}, TContext = Context>(callback: callbackFn<TResponse, TContext>)`, val: `TransportRequestCallback` },
|
||||||
{ key: `${camelify(api)}<TResponse = Record<string, any>, TContext = Context>(params: RequestParams.${Name}, callback: callbackFn<TResponse, TContext>)`, val: 'TransportRequestCallback' },
|
{ key: `${camelify(api)}<TResponse = ${responseType}, TContext = Context>(params: RequestParams.${Name}, callback: callbackFn<TResponse, TContext>)`, val: `TransportRequestCallback` },
|
||||||
{ key: `${camelify(api)}<TResponse = Record<string, any>, TContext = Context>(params: RequestParams.${Name}, options: TransportRequestOptions, callback: callbackFn<TResponse, TContext>)`, val: 'TransportRequestCallback' }
|
{ key: `${camelify(api)}<TResponse = ${responseType}, TContext = Context>(params: RequestParams.${Name}, options: TransportRequestOptions, callback: callbackFn<TResponse, TContext>)`, val: `TransportRequestCallback` }
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
return methods
|
return methods
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function hasBody (paths, file) {
|
function hasBody (spec, api) {
|
||||||
const spec = readSpec()
|
return !!spec[api].body
|
||||||
return !!spec[file].body
|
}
|
||||||
|
|
||||||
function readSpec () {
|
function isHeadMethod (spec, api) {
|
||||||
|
const { paths } = spec[api].url
|
||||||
|
const methods = []
|
||||||
|
for (const path of paths) {
|
||||||
|
for (const method of path.methods) {
|
||||||
|
if (!methods.includes(method)) {
|
||||||
|
methods.push(method)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return methods.length === 1 && methods[0] === 'HEAD'
|
||||||
|
}
|
||||||
|
|
||||||
|
function readSpec (paths, file) {
|
||||||
try {
|
try {
|
||||||
return require(join(paths[0], file))
|
return require(join(paths[0], file))
|
||||||
} catch (err) {}
|
} catch (err) {}
|
||||||
@ -312,7 +330,6 @@ function hasBody (paths, file) {
|
|||||||
} catch (err) {}
|
} catch (err) {}
|
||||||
|
|
||||||
throw new Error(`Cannot read spec file ${file}`)
|
throw new Error(`Cannot read spec file ${file}`)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = genFactory
|
module.exports = genFactory
|
||||||
|
|||||||
Reference in New Issue
Block a user