Generators
Generators are classes that are used to render models for a given language.
Generator's options
For Modelina, there exist 3 types of options for the generation process.
- Default options, are the default options the rest overwrite.
- Generator options, are used as the baseline that is by default used for each model render.
- Render options, are the last resort to specialize options for the individual rendering of a model, that overwrite the generator options.
Generator options are passed as the first argument to the generator's constructor. Check the example:
const generator = new TypeScriptGenerator({ ...options });
Render options are passed as the first argument to the generator's render function. Check the example:
const generator = ...
const model = ...
const inputModel = ...
generator.render(model, inputModel, { ...options });
Default generator options (common to all generators) are as follows:
Option | Type | Description | Default value |
---|
indentation | Object | Options for indentation (example). | - |
indentation.type | String | Type of indentation. Its value can be either SPACES or TABS and are typed by IndentationTypes | SPACES |
indentation.size | String | Size of indentation. | 2 |
defaultPreset | Object | Default preset for generator. For more information, read customization document. | Implemented by generator |
presets | Array | Array contains presets. For more information, read customization document. | [] |
In addition, generators take additional options when calling their renderCompleteModel(input, options)
functions.
This allows the caller to specify additional options when generating a multi-file model from the input with cross dependencies.
Below is a list of additional options available for a given generator.
Generator options
Option | Type | Description | Default value |
---|
renderTypes | Boolean | Render signature for types. | true |
mapType | String | It indicates which mapping type should be rendered for the object type. Its value can be one of map , record or indexedObject . | map |
modelType | String | It indicates which model type should be rendered for the object type. Its value can be either interface or class . | class |
enumType | String | It indicates which type should be rendered for the enum type. Its value can be either union or enum . | enum |
namingConvention | Object | Options for naming conventions. | - |
namingConvention.type | Function | A function that returns the format of the type. | Returns pascal cased name, and ensures that reserved keywords are never rendered_ |
namingConvention.property | Function | A function that returns the format of the property. | Returns camel cased name, and ensures that names of properties does not clash against reserved keywords for TS, as well as JS to ensure painless transpilation |
Render complete model options
Option | Type | Description | Default value |
---|
moduleSystem | 'ESM' | 'CJS' | Which module system the generated files should use (import or require ) | 'CJS' |
exportType | 'default' | 'named' | Whether the exports should be default or named exports | 'default' |
Generator options
Option | Type | Description | Default value |
---|
collectionType | String | It indicates with which signature should be rendered the array type. Its value can be either List (List<{type}> ) or Array ({type}[] ). | List |
namingConvention | Object | Options for naming conventions. | - |
namingConvention.type | Function | A function that returns the format of the type. | Returns pascal cased name, and ensures that reserved keywords are never rendered_ |
namingConvention.property | Function | A function that returns the format of the property. | Returns camel cased name, and ensures that names of properties does not clash against reserved keywords |
Render complete model options
Option | Type | Description | Default value |
---|
packageName | string | The package name to generate the models under | [required] |
Generator options
Option | Type | Description | Default value |
---|
namingConvention | Object | Options for naming conventions. | - |
namingConvention.type | Function | A function that returns the format of the type. | Returns pascal cased name, and ensures that reserved keywords are never rendered |
namingConvention.property | Function | A function that returns the format of the property. | Returns camel cased name, and ensures that names of properties does not clash against reserved keywords |
Render complete model options
Option | Type | Description | Default value |
---|
moduleSystem | 'ESM' | 'CJS' | Which module system the generated files should use (import or require ) | 'CJS' |
Generator options
Option | Type | Description | Default value |
---|
namingConvention | Object | Options for naming conventions. | - |
namingConvention.type | Function | A function that returns the format of the type. | Returns pascal cased name |
namingConvention.field | Function | A function that returns the format of the field. | Returns pascal cased name |
Render complete model options
Option | Type | Description | Default value |
---|
packageName | string | The package name to generate the models under | [required] |
Generator options
Option | Type | Description | Default value |
---|
namingConvention | Object | Options for naming conventions. | - |
namingConvention.type | Function | A function that returns the format of the type. | Returns pascal cased name, and ensures that reserved keywords are never rendered_ |
namingConvention.property | Function | A function that returns the format of the property. | Returns camel cased name, and ensures that names of properties does not clash against reserved keywords |
Render complete model options
Option | Type | Description | Default value |
---|
namespace | string | The namespace to generate the models under | [required] |
Custom generator
The minimum set of required actions to create a new generator are:
- Source code must be included in generators folder.
- Must extend the abstract
AbstractGenerator
class,
- Must define
Preset
's shape for the language,
- Must define language options by passing an interface describing additional options to the first generic argument of
AbstractGenerator
. The interface must also be extended by CommonGeneratorOptions
interface,
- Must define default options as static class's field, which must be extended by
defaultGeneratorOptions
,
- Default options must include
defaultPreset
property,
- Must implement
render
function,
- Must define Renderers classes for available model types in a given language. Renderer is an instance of the class with common helper functions to render appropriate model type and must be extended by
AbstractRenderer
class - example.
Check the generator implementation for TypeScript
language to see how it should look like.
If you created a generator then you can contribute it to the AsyncAPI Model SDK and it will become the official supported generator.