Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add support for comments and annotations #66

Merged
merged 1 commit into from
Jan 30, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 10 additions & 9 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
node_modules
*.tgz
.vscode
.DS_Store
/docs
/coverage
/lib
/esm
/cjs
node_modules
*.tgz
.vscode
.DS_Store
.idea
/docs
/coverage
/lib
/esm
/cjs
83 changes: 68 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
# ProtoBuff Data Types Schema Parser

A schema parser for Protocol Buffers data types.
For ProtoBuff 2 and 3 schemas.
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.
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

```
Expand All @@ -21,11 +21,11 @@ yarn add @asyncapi/protobuf-schema-parser
## Usage

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

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

const asyncapiWithProto = `
asyncapi: 2.0.0
Expand All @@ -51,15 +51,15 @@ channels:
}
`

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

```js
const { Parser } = require('@asyncapi/parser');
const { ProtoSchemaParser } = require('@asyncapi/protobuf-schema-parser');
const {Parser} = require('@asyncapi/parser');
const {ProtoSchemaParser} = require('@asyncapi/protobuf-schema-parser');

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

const asyncapiWithProto = `
asyncapi: 2.0.0
Expand All @@ -85,14 +85,67 @@ channels:
}
`

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

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

Refferences are NOT supported:
References are NOT supported:

- no support for `$ref`
- no support for [`import`](https://protobuf.dev/programming-guides/proto3/#importing-definitions), except the default google types:
- google/protobuf/*
- google/type/*
- no support for [`import`](https://protobuf.dev/programming-guides/proto3/#importing-definitions), 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. |
| @Min or @Minimum | json schema [numeric validator](https://json-schema.org/understanding-json-schema/reference/numeric#range) |
| @Max or @Maximum | json schema [numeric validator](https://json-schema.org/understanding-json-schema/reference/numeric#range) |
| @Pattern | json scheme [string validator](https://json-schema.org/understanding-json-schema/reference/string#regexp) |
| @ExclusiveMinimum | json schema [numeric validator](https://json-schema.org/understanding-json-schema/reference/numeric#range) |
| @ExclusiveMaximum | json schema [numeric validator](https://json-schema.org/understanding-json-schema/reference/numeric#range) |
| @MultipleOf | json schema [numeric validator](https://json-schema.org/understanding-json-schema/reference/numeric#multiples) |
| @MinLength | json scheme [string validator](https://json-schema.org/understanding-json-schema/reference/string#length) |
| @MaxLength | json scheme [string validator](https://json-schema.org/understanding-json-schema/reference/string#length) |
| @MinItems | json scheme [array validator](https://json-schema.org/understanding-json-schema/reference/array#length) |
| @MaxItems | json scheme [array validator](https://json-schema.org/understanding-json-schema/reference/array#length) |
| @Default | json schema [default value](https://opis.io/json-schema/1.x/default-value.html) |

### 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. |


86 changes: 82 additions & 4 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@
"dependencies": {
"@asyncapi/parser": "^3.0.3",
"@types/protocol-buffers-schema": "^3.4.1",
"protocol-buffers-schema": "^3.6.0"
"protobufjs": "^7.2.6"
},
"devDependencies": {
"@jest/types": "^29.2.1",
Expand Down
Loading
Loading