Simplify API wrappers (#839)

* Updated code generation

* API generation

* Updated test

* Updated code generation

* API generation

* API generation
This commit is contained in:
Tomas Della Vedova
2019-05-03 19:02:10 +02:00
committed by delvedor
parent 99ada00747
commit 132072b8ab
264 changed files with 2855 additions and 9133 deletions

View File

@ -128,17 +128,17 @@ function generate (spec, common) {
return handleError(err, callback)
}
var warnings = null
var { ${genQueryBlacklist(false)} } = params
var querystring = semicopy(params, [${genQueryBlacklist()}])
var warnings = []
var { ${genQueryBlacklist(false)}, ...querystring } = params
querystring = snakeCaseKeys(acceptedQuerystring, snakeCase, querystring, warnings)
if (method == null) {
${generatePickMethod(methods)}
}
var ignore = options.ignore || null
var ignore = options.ignore
if (typeof ignore === 'number') {
ignore = [ignore]
options.ignore = [ignore]
}
@ -153,36 +153,8 @@ function generate (spec, common) {
querystring
}
const requestOptions = {
ignore,
requestTimeout: options.requestTimeout || null,
maxRetries: options.maxRetries || null,
asStream: options.asStream || false,
headers: options.headers || null,
querystring: options.querystring || null,
compression: options.compression || false,
id: options.id || null,
context: options.context || null,
warnings
}
return makeRequest(request, requestOptions, callback)
function semicopy (obj, exclude) {
var target = {}
var keys = Object.keys(obj)
for (var i = 0, len = keys.length; i < len; i++) {
var key = keys[i]
if (exclude.indexOf(key) === -1) {
target[snakeCase[key] || key] = obj[key]
if (acceptedQuerystring.indexOf(snakeCase[key] || key) === -1) {
warnings = warnings || []
warnings.push('Client - Unknown parameter: "' + key + '", sending it as query parameter')
}
}
}
return target
}
options.warnings = warnings.length === 0 ? null : warnings
return makeRequest(request, options, callback)
}
`.trim() // always call trim to avoid newlines
@ -213,7 +185,7 @@ function generate (spec, common) {
function build${name[0].toUpperCase() + name.slice(1)} (opts) {
// eslint-disable-next-line no-unused-vars
const { makeRequest, ConfigurationError, handleError } = opts
const { makeRequest, ConfigurationError, handleError, snakeCaseKeys } = opts
${generateDocumentation(spec[api], api)}
const acceptedQuerystring = [

View File

@ -125,6 +125,7 @@ function genFactory (folder) {
const { result } = opts
opts.handleError = handleError
opts.snakeCaseKeys = snakeCaseKeys
const apis = ${apisStr}
@ -135,6 +136,19 @@ function genFactory (folder) {
if (callback) return callback(err, result)
return Promise.reject(err)
}
function snakeCaseKeys (acceptedQuerystring, snakeCase, querystring, warnings) {
var target = {}
var keys = Object.keys(querystring)
for (var i = 0, len = keys.length; i < len; i++) {
var key = keys[i]
target[snakeCase[key] || key] = querystring[key]
if (acceptedQuerystring.indexOf(snakeCase[key] || key) === -1) {
warnings.push('Client - Unknown parameter: "' + key + '", sending it as query parameter')
}
}
return target
}
}
// It's unlikely that a user needs all of our APIs,