protocol-buffers-schema-ts
No nonsense protocol buffers schema parser written in Typescript.
npm install protocol-buffers-schema-ts
Usage
First save the following file as example.proto
syntax = "proto3";package example;option java_package = "com.example";option optimize_for = SPEED;import "other.proto";// example fileenum Hello { Hello = 0; Welcome = 1; GDay = 2; Yo = 3;} message Test { map<string, string> data = 1; required string hello = 2; oneof test { uint32 age = 3; uint32 year = 4; } message Nested { optional bytes thing = 1; } Nested item = 5; required Hello welcoming = 6; /** A block comment * Longer * Longer */ repeated uint32 timings = 7[deprecated=true]; repeated uint32 timings_info = 8 [packed=true];}service ServiceName { rpc MethodName (Hello) returns (Test);}
Then, run the example:
;; // pass a buffer or string (implements Object.toString()) to schema.parse. // will print out the schema as a javascript objectconsole.logsch
Running the above example will print something similar to
Schemasyntax: 3package: 'example'imports: 'other.proto'enums:Enum name: 'Hello' enums: values: Array allow_alias: falsemessages:Messagename: 'Test'enums:extends:messages: Arrayfields: Arrayextensions: nullextends:services: Service name: 'ServiceName' methods: Arrayoptimize_for: 'SPEED'
Note that this example is included as lib/example
.
API
parse<T extends {toString(): string}>(from: T): Schema
Parses a .proto schema into a javascript object
Schema.toString()
Stringifies a parsed schema back into .proto format
Schema.toJSON()
Converts a parsed schema into its JSON equivalent.
License
MIT
Testing
Testing is currently done in an automated fashion in lib/test
, relying on files in the test/fixtures/
directory.
Testing should be done both in the browser and in node, for various purposes.
Updating of properties would inherently include updating of test/fixtures.