JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 2751
  • Score
    100M100P100Q113748F
  • License ISC

A parser for proto files

Package Exports

  • proto-parser

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (proto-parser) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

proto-parser npm version

A parser for proto files.

Table of Contents

Introduction

The target of proto-parser is to generate an AST for a proto file, regardless of injecting upper functions into the AST structure, such as encoding/decoding.

vs protobuf.js

Proto-parser is developed based on protobuf.js, and uses some codes of protobuf.js。

Compared with protobuf.js, proto-parser is more focused on parsing. so, proto-parser gains some advantages:

  • with less code and higher performance
  • output more pure AST structure
  • support TypeScript

Usage

Install

npm install proto-parser

Coding

A code example:

import * as t from 'proto-parser';

const content = `
syntax = 'proto3';
message Foo {
  string key = 1;
}
`;

const protoDocument = t.parse(content) as t.ProtoDocument;
console.log(JSON.stringify(protoDocument, null, 2));

The resulted AST:

{
  "syntax": "proto3",
  "root": {
    "name": "",
    "fullName": "",
    "syntaxType": "ProtoRoot",
    "nested": {
      "Foo": {
        "name": "Foo",
        "fullName": ".Foo",
        "comment": null,
        "syntaxType": "MessageDefinition",
        "fields": {
          "key": {
            "name": "key",
            "fullName": ".Foo.key",
            "comment": null,
            "type": {
              "value": "string",
              "syntaxType": "BaseType"
            },
            "id": 1,
            "required": false,
            "optional": true,
            "repeated": false,
            "map": false
          }
        }
      }
    }
  },
  "syntaxType": "ProtoDocument"
}

API

> parse(source: string, option?: ParseOption): ProtoDocument | ProtoError

Parse the content of a proto file to an AST.

The definition of ParseOption:

interface ParseOption {
  // Set whethe to keep the origin case. The default value is true.
  keepCase?: boolean

  // Set whethe to enable alternateCommentMode. The default value is true.
  alternateCommentMode?: boolean 

  // Set whethe to resolve types. The default value is true.
  resolve?: boolean

  // Set whethe to return pure json Object. The default value is true.
  toJson?: boolean
}

License

MIT