Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

@asyncapi/protobuf-schema-parser

asyncapi514.4kApache-2.03.5.1TypeScript support: included

An AsyncAPI schema parser for Protocol Buffers data types.

asyncapi, protbuff, datatype, schema, parser

readme

ProtoBuff Data Types Schema Parser

A schema parser for Protocol Buffers data types. For ProtoBuff 2 and 3 schemas.

There is no explicit distinction between ProtoBuff 2 and 3. You dont have to expect any errors if your schemaFormat is application/vnd.google.protobuf;version=2 defined, but your schema is proto3.

Version >= 2.0.0 of package is only supported by @asyncapi/parser version >= 2.0.0.

This package is browser-compatible.

Installation

npm install @asyncapi/protobuf-schema-parser
// OR
yarn add @asyncapi/protobuf-schema-parser

Usage

import {Parser} from '@asyncapi/parser';
import {ProtoSchemaParser} from '@asyncapi/protobuf-schema-parser'

const parser = new Parser();
parser.registerSchemaParser(ProtoSchemaParser());

const asyncapiWithProto = `
asyncapi: 2.0.0
info:
  title: Example with ProtoBuff
  version: 0.1.0
channels:
  example:
    publish:
      message:
        schemaFormat: 'application/vnd.google.protobuf;version=3'
        payload: |
            message Point {
                required int32 x = 1;
                required int32 y = 2;
                optional string label = 3;
            }

            message Line {
                required Point start = 1;
                required Point end = 2;
                optional string label = 3;
            }
`

const {document} = await parser.parse(asyncapiWithProto);
const {Parser} = require('@asyncapi/parser');
const {ProtoSchemaParser} = require('@asyncapi/protobuf-schema-parser');

const parser = new Parser();
parser.registerSchemaParser(ProtoSchemaParser());

const asyncapiWithProto = `
asyncapi: 2.0.0
info:
  title: Example with ProtoBuff
  version: 0.1.0
channels:
  example:
    publish:
      message:
        schemaFormat: 'application/vnd.google.protobuf;version=3'
        payload: |
            message Point {
                required int32 x = 1;
                required int32 y = 2;
                optional string label = 3;
            }

            message Line {
                required Point start = 1;
                required Point end = 2;
                optional string label = 3;
            }
`

const {document} = await parser.parse(asyncapiWithProto);

Place your protoBuff schema as string in payload to get it parsed.

References are NOT supported:

  • no support for $ref
  • no support for import, except the default google types:
    • google/protobuf/*
    • google/type/*

Comments

Each field of a message may have a comment witch will be reflected as json schema description. Furthermore, the comment can contain the following annotations:

message Point {
    /*
     * The cordinate on the x axis.
     * @Default 99
     * @Min 0
     * @Max 100 
     */
    required int32 x = 1;

    /*
     * The cordinate on the y axis.
     * @Default 12
     * @Min 0
     * @Max 100 
     */
    required int32 y = 2;
    optional string label = 3;
}

Per field annotation

annotation description
@Example json schema examples keyword. Can exists multiple times. If used with an complex type, an single lines json object hast to be used.
@Min or @Minimum json schema numeric validator
@Max or @Maximum json schema numeric validator
@Pattern json scheme string validator
@ExclusiveMinimum json schema numeric validator
@ExclusiveMaximum json schema numeric validator
@MultipleOf json schema numeric validator
@MinLength json scheme string validator
@MaxLength json scheme string validator
@MinItems json scheme array validator
@MaxItems json scheme array validator
@Default json schema default value

Per message annotation

annotation description
@RootNode If there are multiple types without an parent you can give a hint to the root node with this annotation.

Head annotation

annotation description
@Option In head of your file you can place options for the parser

Head annotation "Option"

The @Option have to follow by space separated options key and another space separated value

// @Option primitiveTypesWithLimits false

message Point {

}

Possible options are:

option description def
primitiveTypesWithLimits If you dont like to get default Min and Max limits for primitive types, you can set this option to false true

Supported validation frameworks

If you would like to add additional validation to your proto files, you can use one of the following validation frameworks.