You can configure your AsyncAPI Generator template using either a dedicated .ageneratorrc
YAML file or through the generator
property in your package.json
file. Previously, generator configuration had to be defined in the package.json
file. Now, you can define the configuration in a separate .ageneratorrc
file. The configuration defined in the .ageneratorrc
file will override any configuration defined in package.json
. The generator will first check for the .ageneratorrc
file in the template's root directory, and if not found, it will look for the generator config in package.json
.
Configuration Methods
Option 1: Using .ageneratorrc
file (Recommended)
Create a .ageneratorrc
file in the root of your template with YAML syntax. This approach keeps your template configuration separate from package metadata:
1renderer: react
2apiVersion: v3
3supportedProtocols:
4 - amqp
5 - mqtt
6parameters:
7 server:
8 description: The server you want to use in the code.
9 required: true
10 dummyParameter:
11 description: Example of parameter with default value.
12 default: just a string
13 required: false
14conditionalFiles:
15 path/to/file/that/is/relative/to/template/dir/test-amqp.js:
16 subject: server.protocol
17 validation:
18 const: amqp
19 path/to/file/that/is/relative/to/template/dir/support.html:
20 subject: info.contact
21 validation:
22 required:
23 - url
24nonRenderableFiles:
25 - src/api/middlewares/*.*
26 - lib/lib/config.js
27generator: <"2.0.0"
28filters:
29 - my-package-with-filters
30hooks:
31 '@asyncapi/generator-hooks': hookFunctionName
32 my-custom-hooks-package:
33 - myHook
34 - andAnotherOne
Option 2: Using package.json
Alternatively, you can include your configuration in the generator
property of your package.json
file:
1"generator": {
2 "renderer": "react",
3 "apiVersion": "v3",
4 "supportedProtocols": ["amqp", "mqtt"],
5 "parameters": {
6 "server": {
7 "description": "The server you want to use in the code.",
8 "required": true
9 },
10 "dummyParameter": {
11 "description": "Example of parameter with default value.",
12 "default": "just a string",
13 "required": false
14 }
15 },
16 "conditionalFiles": {
17 "path/to/file/that/is/relative/to/template/dir/test-amqp.js": {
18 "subject": "server.protocol",
19 "validation": {
20 "const": "amqp"
21 }
22 },
23 "path/to/file/that/is/relative/to/template/dir/support.html": {
24 "subject": "info.contact",
25 "validation": {
26 "required": ["url"]
27 }
28 }
29 },
30 "nonRenderableFiles": [
31 "src/api/middlewares/*.*",
32 "lib/lib/config.js"
33 ],
34 "generator": "<2.0.0",
35 "filters": [
36 "my-package-with-filters"
37 ],
38 "hooks": {
39 "@asyncapi/generator-hooks": "hookFunctionName",
40 "my-custom-hooks-package": ["myHook", "andAnotherOne"]
41 }
42}
Note: If both
.ageneratorrc
file and thegenerator
property inpackage.json
exist, the configuration from.ageneratorrc
will override thepackage.json
configuration.
The generator
property from package.json
file and must contain a JSON object and the ageneratorrc
file must contain a YAML object that may have the following information:
Name | Type | Description |
---|---|---|
renderer | String | Its value can be either react or nunjucks (default). |
apiVersion | String | Determines which major version of the Parser-API the template uses. For example, v2 for v2.x.x . If not specified, the Generator assumes the template is not compatible with the Parser-API so it will use the Parser-JS v1 API. For templates that need to support AsyncAPI specification v3 make sure to use v3 Parser-API. If the template uses a version of the Parser-API that is not supported by the Generator, the Generator will throw an error. |
supportedProtocols | [String] | A list with all the protocols this template supports. |
parameters | Object[String, Object] | An object with all the parameters that can be passed when generating the template. When using the command line, it's done by indicating --param name=value or -p name=value . |
parameters[param].description | String | A user-friendly description about the parameter. |
parameters[param].default | Any | Default value of the parameter if not specified. Shouldn't be used for mandatory required=true parameters. |
parameters[param].required | Boolean | Whether the parameter is required or not. |
conditionalFiles | Object[String, Object] | An object containing all the file paths that should be conditionally rendered. Each key represents a file path and each value must be an object with the keys subject and validation . The file path should be relative to the template directory inside the template. |
conditionalFiles[filePath].subject | String | The subject is a JMESPath query to grab the value you want to apply the condition to. It queries an object with the whole AsyncAPI document and, when specified, the given server. The object looks like this: { asyncapi: { ... }, server: { ... } } . If the template supports server parameter, you can access server details like for example protocol this way: server.protocol . During validation with conditionalFiles only the server that template user selected is available in the specification file. For more information about server parameter read about special parameters. |
conditionalFiles[filePath].validation | Object | The validation is a JSON Schema Draft 07 object. This JSON Schema definition will be applied to the JSON value resulting from the subject query. If validation doesn't have errors, the condition is met, and therefore the given file will be rendered. Otherwise, the file is ignored. Check JSON Schema Validation document for a list of all possible validation keywords. |
nonRenderableFiles | [String] | A list of file paths or globs that must be copied "as-is" to the target directory, i.e., without performing any rendering process. This is useful when you want to copy binary files. |
generator | [String] | A string representing the generator version-range the template is compatible with. This value must follow the semver syntax. E.g., >=1.0.0 , >=1.0.0 <=2.0.0 , ~1.0.0 , ^1.0.0 , 1.0.0 , etc. Read more about semver. |
filters | [String] | A list of modules containing functions that can be used as Nunjucks filters. In case of external modules, remember they need to be added as a dependency in package.json of your template. |
hooks | Object[String, String] or Object[String, Array[String]] | A list of modules containing hooks, except for the ones you keep locally in your template in the default location. For each module you must specify the exact name of the hook that should be used in the template. For a single hook, you can specify it as a string; for more hooks, you must pass an array of strings. In the case of external modules, remember they need to be added as a dependency in package.json of your template. There is also an official hooks library always included in the generator. As this is a library of multiple hooks, you still need to explicitly specify in the configuration which one you want to use. Use @asyncapi/generator-hooks as the library name. |
Special parameters
There are some template parameters that have a special meaning:
Name | Description |
---|---|
server | It is used to let the template know which server from the AsyncAPI specification file you want to use. In some cases, this may be required. For instance, when generating code that connects to a specific server. Use this parameter in case your template relies on users' information about what server from the specification file they want to use during generation. You also need this parameter if you want to use server.protocol notation within conditionalFiles configuration option. Once you decide to specify this parameter for your template, it is recommended you make it a mandatory parameter otherwise a feature like conditionalFiles is not going to work if your users do not use this parameter obligatory. |