mirror of
https://github.com/github/codeql-action.git
synced 2025-12-27 09:40:17 +08:00
Co-authored-by: Andrew Eisenberg <aeisenberg@github.com> Co-authored-by: Henry Mercer <henrymercer@github.com>
62 lines
2.7 KiB
Markdown
62 lines
2.7 KiB
Markdown
@protobuf-ts/plugin-framework
|
|
=============================
|
|
|
|
A framework to create protoc plugins in typescript.
|
|
|
|
The google protocol buffer compiler (protoc) has a plugin system. With a
|
|
protoc plugin, it is possible to generate code for .proto files in any
|
|
language, not just the ones supported directly by protoc.
|
|
|
|
A protoc plugin receives a `CodeGeneratorRequest` (a protobuf message)
|
|
via stdin and returns a `CodeGeneratorResponse` via stdout.
|
|
|
|
This framework aims to make it as easy as possible to write a protoc
|
|
plugin in typescript. It has special support for generating typescript
|
|
code, but can be used to generate code in other languages.
|
|
|
|
|
|
|
|
### Features
|
|
|
|
- provides a symbol table that can be used to track generated types
|
|
in any language
|
|
|
|
- has special support for generating typescript code using the
|
|
typescript compiler API. For example, it has a simple API to import
|
|
objects from a package, or from the symbol table.
|
|
|
|
- provides a base class for plugins that supports parameters, error
|
|
handling, supported features and easy setup.
|
|
|
|
- builds a tree of descriptors so that it is trivial to lookup the
|
|
parent of a nested message, for example.
|
|
|
|
- builds a lookup object to find the descriptor for a given type name
|
|
|
|
- provides a string format object that can print a message field like
|
|
it was typed by the user.
|
|
|
|
- provides a source code comment lookup that can be used to easily
|
|
find comments for a given element in a .proto
|
|
|
|
- provides convenience methods to check if a field was declared
|
|
optional or as a oneof member
|
|
|
|
|
|
### Getting started
|
|
|
|
- Check the types and comments of [descriptor.proto](https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/descriptor.proto)
|
|
and [plugin.proto](https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/compiler/plugin.proto)
|
|
to get familiar with the plugin system of protoc.
|
|
- Take a look at `descriptor-registry.ts` to see the if it can help you work with the
|
|
descriptor protos that the compiler sends you.
|
|
- Take a look at `plugin-base.ts` for a base class that can help with some plumbing.
|
|
- Take a look at the source code of [protobuf-ts](https://github.com/timostamm/protobuf-ts/), which uses this framework.
|
|
|
|
|
|
### Copyright
|
|
|
|
- The files [plugin.ts](https://github.com/timostamm/protobuf-ts/blob/master/packages/plugin-framework/src/google/protobuf/compiler/plugin.ts) and [descriptor.ts](https://github.com/timostamm/protobuf-ts/blob/master/packages/plugin-framework/src/google/protobuf/descriptor.ts) are Copyright 2008 Google Inc., licensed under BSD-3-Clause
|
|
- All other files are licensed under Apache-2.0, see [LICENSE](https://github.com/timostamm/protobuf-ts/blob/master/packages/plugin-framework/LICENSE).
|
|
|