Skip to content

Latest commit

 

History

History
 
 

docs

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 

OpenAPI CodeGen

Documentation

Config file DSL

Schema

JSON Schema Draft 4

Example

{
    "type": "documentation",
    "defaults": {
      "exampleProperty": "exampleValue"
    },
    "directories": [
        "docs"
    ],
    "partials": {
        "model": "model.mustache",
        "operation": "operation.mustache"
    },
    "transformations": [
        { "template": "Hello from \{\{projectName\}\}", "output": "README.md" },
        { "input": "index.mustache", "output": "docs/index.html" }
    ]
}

Model properties

Predefined lambdas

Lambdas are special tags which invoke a predefined function named after the tag. The function receives the template fragment between the tags. More info about lambdas can be found here

We support the following pre-defined lambdas at the moment:

lambda example description
lowercase {{#lowercase}}{{name}}{{/lowercase}} Convert to lowercase
uppercase {{#uppercase}}{{name}}{{/uppercase}} Convert to UPPERCASE
snakecase {{#snakecase}}{{name}}{{/snakecase}} Convert to snake_case
pascalcase {{#pascalcase}}{{name}}{{/pascalcase}} Convert to PascalCase
camelcase {{#camelcase}}{{name}}{{/camelcase}} Convert to camelCase
kebabcase {{#kebabcase}}{{name}}{{/kebabcase}} Convert to kebab-case

Custom generators

Some languages have various reserved words or unusual way of formatting arguments. Sometimes custom lambdas are needed to solve the issues. A custom generator is simply a javascript module, for example:

const Hogan = require('hogan.js');

const RESERVED_WORDS = new Set([
    'for'
]);

function sanitizeName(text) {
    return "__"+text+"__"
}

function escapeReservedWord(text) {
    return "'"+text+"'"
}

function hello_lambda() {
    return function(text) {
      return 'Hello ' + Hogan.compile(text).render(this);
    }
}

function complex_lambda() {
    return function(template) {
        var path = Hogan.compile(template).render(this);
        path = this.pathParams.reduce(function (acc, param) {
            if (param.isPathParam) {
               return acc.replace(
                   "{"+param.paramName+"}", param.paramNamePascalCase);
            } else {
                return acc.replace()
            }
        }, path);
        return path.split("/").slice(1).join(", ")
    }
}

module.exports = {
    sanitizeName: sanitizeName,
    reservedWords: RESERVED_WORDS,
    escapeReservedWord: escapeReservedWord,
    lambdas: {
        hello: hello_lambda,
        path_template: complex_lambda
    }
};

The module has to be configured in your config under the generator property. Here is an example:

{
    "defaults": {
        "modelNaming": "snake_case",
    },
    "generator": "../mygenerator.js",
    "partials": {
    },
    "directories": [ "src" ],
    "transformations": [
    ],
    "perApi": [
    ],
    "perModel": [
    ]
}