Converter for CloudEvents to AsyncAPI is a Node.js library and CLI application that converts any event payload conforming to the CloudEvents specification into an AsyncAPI catalog which can be used in an ABAP environment to generate an Event Consumption Model.
Find the official web application hosted on GitHub Pages at https://sap.github.io/cloudevents-asyncapi-converter.
Note
CloudEvents® is a registered trademark of The Linux Foundation.
- Node.js version 20.x or above
- npm version 9.x or above
- Clone the repository
- Navigate to the repository's root folder
- Install the package and its dependencies
npm install && npm install -g .
Tip
If you wish to install and use the package locally (i.e. not system-wide), simply drop the second npm install
command.
To convert a CloudEvents payload in JSON format to a corresponding AsyncAPI catalog, this package offers the following command:
ce2async [input path] [--output|-o path] [--version|-v version] [--help]
-
Arguments:
input
Path to the input file containing the CloudEvents payload. If not specified, the input is read from stdin instead. If the payload is invalid, the command will fail with a non-zero exit code and print an error message to stderr.
-
Options:
-
--output
,-o
Path to the output file that will contain the AsyncAPI catalog. If not specified, the output is written to stdout instead. -
--version
,-v
Version of the AsyncAPI specification to use for conversion. Presently, only version2.0
for AsyncAPI 2.0.x is supported. -
--help
Help page for this command.
-
Tip
In case you only installed the package locally, you must run the command with npx
from within the repository.
As an example, suppose you want to convert the payload in examples/input.json
to an AsyncAPI 2.0.x catalog file. To achieve that, simply run
ce2async examples/input.json -o output.json
The file output.json
now contains the corresponding AsyncAPI catalog, exactly as in examples/output.json
.
Or alternatively, to read some event payload from stdin and write the converted result to stdout, instead run
echo '{"type":"sap.eee.iwxbe.testproducer.v1.Event.Conversion","specversion":"1.0","source":"/default/sap.eee/XXXCLNT400","id":"42010aef-0cee-1edb-879d-6a2c14dc9326","time":"2020-11-02T09:10:57Z","datacontenttype":"application/json","data":{"Amount":100.0,"Currency":"KWD","Quantity":1000.0,"Unit":"KG","Alpha":"1"}}' | ce2async
Although this package is intended to be primarily used as a CLI application, it also provides an API to perform the conversion programmatically. As to that, the package exports a single class PayloadConverter
, which offers the following methods:
-
Static Methods:
create(version?: string): PayloadConverter;
Creates a new instance of aPayloadConverter
for the optionally specified AsyncAPI specificationversion
, assumingv2.0
by default. Throws an error whenversion
is invalid or not supported.
-
Instance Methods:
-
convert(payload: object): object;
Converts a CloudEventspayload
object to a corresponding AsyncAPI catalog object, using the converter's specification version. Throws an error whenpayload
is malformed according to the CloudEvents specification. -
convertAsString(payload: string): string;
Functions likeconvert(...)
but accepts a JSON string as an input, which is parsed before converting. Returns the output as a JSON string as well.
-
import { PayloadConverter } from 'cloudevents-asyncapi-converter';
const converter = PayloadConverter.create();
const input = '...'; // some CloudEvents JSON string
try {
const output = converter.convertAsString(input);
// conversion succeeded
} catch (error) {
// conversion failed
}
The payload converter only generates a rough AsyncAPI catalog solely based on the CloudEvents payload by inferring data types in a naïve manner. Consequently, it exhibits some limitations that require manual adjustments to the payload prior to conversion or to the resulting catalog.
-
Properties with value
null
or empty objects{}
in the payload are currently rejected by the converter. -
String properties are not analyzed with regards to their data format and have none assigned.
-
Numeric properties always receive the data format
decimal
by the converter. -
For compositions of objects, the converter is currently unable to link parent and child schemas through references. Instead, it treats them independently of each other.
Details
Suppose your payload has nested schemas like the
ComplexCollection
below, containing objects of the typeComplex
.// ... "ComplexCollection": [ { "Amount": 100.000, "Currency": "KWD", "Quantity": 1000.000, "Unit": "KG", "Alpha": "1" }, // ... ], "Complex": { "Amount": 0.000, "Currency": "KWD", "Quantity": 0.000, "Unit": "KG", "Alpha": "1" }, // ...
Rather than linking the items of
ComplexCollection
to theComplex
schema, the converter creates individual schemas for each object.// ... "schemas": { "ComplexCollection": { "type": "array", "items": { "$ref": "#/components/schemas/sap_eee_iwxbe_testproducer_v1_Event_DeepStructure_ComplexCollection" } }, "Complex": { "type": "object", "$ref": "#/components/schemas/sap_eee_iwxbe_testproducer_v1_Event_DeepStructure_Complex" }, // ... "sap_eee_iwxbe_testproducer_v1_Event_DeepStructure_ComplexCollection": { "type": "object", "properties": { "Amount": { "type": "number", "format": "decimal" }, "Currency": { "type": "string" }, "Quantity": { "type": "number", "format": "decimal" }, "Unit": { "type": "string" }, "Alpha": { "type": "string" } } }, "sap_eee_iwxbe_testproducer_v1_Event_DeepStructure_Complex": { "type": "object", "properties": { "Amount": { "type": "number", "format": "decimal" }, "Currency": { "type": "string" }, "Quantity": { "type": "number", "format": "decimal" }, "Unit": { "type": "string" }, "Alpha": { "type": "string" } } } }
This project is open to feature requests/suggestions, bug reports etc. via GitHub issues. Contribution and feedback are encouraged and always welcome. For more information about how to contribute, the project structure, as well as additional contribution information, see our Contribution Guidelines.
If you find any bug that may be a security problem, please follow our instructions at in our security policy on how to report it. Please do not create GitHub issues for security-related doubts or problems.
We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone. By participating in this project, you agree to abide by its Code of Conduct at all times.
Copyright 2024 SAP SE or an SAP affiliate company and cloudevents-asyncapi-converter contributors. Please see our LICENSE for copyright and license information. Detailed information including third-party components and their licensing/copyright information is available via the REUSE tool.