function generateApiDoc()

in scripts/utils/generateDocs.js [153:237]


function generateApiDoc (spec) {
  const name = Object.keys(spec)[0]
  const documentationUrl = spec[name].documentation && spec[name].documentation.url
    ? fixLink(name, spec[name].documentation.url)
    : ''
  const params = []
  // url params
  const urlParts = spec[name].url.paths.reduce((acc, path) => {
    if (!path.parts) return acc
    for (const part in path.parts) {
      if (acc[part] != null) continue
      acc[part] = path.parts[part]
    }
    return acc
  }, {})
  if (urlParts) {
    Object.keys(urlParts).forEach(param => {
      params.push({
        name: param,
        type: getType(urlParts[param].type, urlParts[param].options),
        description: urlParts[param].description,
        default: urlParts[param].default,
        deprecated: !!urlParts[param].deprecated
      })
    })
  }

  // query params
  const urlParams = spec[name].params
  if (urlParams) {
    Object.keys(urlParams).forEach(param => {
      const duplicate = params.find(ele => ele.name === param)
      if (duplicate) return
      params.push({
        name: param,
        type: getType(urlParams[param].type, urlParams[param].options),
        description: urlParams[param].description,
        default: urlParams[param].default,
        deprecated: !!urlParams[param].deprecated
      })
    })
  }

  // body params
  const body = spec[name].body
  if (body) {
    params.push({
      name: 'body',
      type: 'object',
      description: body.description,
      default: body.default,
      deprecated: !!body.deprecated
    })
  }

  const codeParameters = params
    .reduce((acc, val) => {
      const code = `${val.name}: ${val.type},`
      acc += acc === ''
        ? code
        : '\n    ' + code

      return acc
    }, '')
    // remove last comma
    .slice(0, -1)

  const stability = spec[name].stability === 'stable'
    ? ''
    : `*Stability:* ${spec[name].stability}`

  let doc = dedent`
  [discrete]
  === ${camelify(name)}
  ${stability}
  [source,ts]
  ----
  client.${camelify(name)}(${codeParameters.length > 0 ? `{\n    ${codeParameters}\n}` : ''})
  ----\n`
  if (documentationUrl) {
    doc += `link:${documentationUrl}[Documentation] +\n`
  }
  if (codeExamples.includes(name)) {
    doc += `{jsclient}/${name.replace(/\./g, '_')}_examples.html[Code Example] +\n`
  }