3.2.14 • Published 1 year ago

@asyncapi/protobuf-schema-parser v3.2.14

Weekly downloads
-
License
Apache-2.0
Repository
github
Last release
1 year ago

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

annotationdescription
@Examplejson schema examples keyword. Can exists multiple times. If used with an complex type, an single lines json object hast to be used.
@Min or @Minimumjson schema numeric validator
@Max or @Maximumjson schema numeric validator
@Patternjson scheme string validator
@ExclusiveMinimumjson schema numeric validator
@ExclusiveMaximumjson schema numeric validator
@MultipleOfjson schema numeric validator
@MinLengthjson scheme string validator
@MaxLengthjson scheme string validator
@MinItemsjson scheme array validator
@MaxItemsjson scheme array validator
@Defaultjson schema default value

Per message annotation

annotationdescription
@RootNodeIf there are multiple types without an parent you can give a hint to the root node with this annotation.
3.2.13

1 year ago

3.2.14

1 year ago

3.2.12

1 year ago

3.2.11

1 year ago

3.2.10

1 year ago

3.2.9

1 year ago

3.2.6

1 year ago

3.2.8

1 year ago

3.2.7

1 year ago

3.2.5

1 year ago

3.2.4

1 year ago

3.2.3

1 year ago

3.2.2

1 year ago

3.2.1

1 year ago

3.1.2

1 year ago

3.2.0

1 year ago

3.1.1

1 year ago

3.1.0

1 year ago

3.0.6

2 years ago

3.0.5

2 years ago

3.0.4

2 years ago

3.0.3

2 years ago

3.0.2

2 years ago

3.0.1

2 years ago

3.0.0

2 years ago

2.0.0

2 years ago

1.0.0

2 years ago