Security News
Fluent Assertions Faces Backlash After Abandoning Open Source Licensing
Fluent Assertions is facing backlash after dropping the Apache license for a commercial model, leaving users blindsided and questioning contributor rights.
protoscript
Advanced tools
A Protobuf runtime and code generation tool for JavaScript and TypeScript
ProtoScript is a protocol buffers runtime and code generation tool for JavaScript, written in TypeScript.
Isomorphic. ProtoScript's generated serializers/deserializers can be consumed in the browser or Node.js runtimes.
Small. ProtoScript's runtime and generated code are built with tree shaking to minimize bundle sizes. This results in a significantly smaller bundle size than google-protobuf.
In-editor API documentation. Comments in your .proto
files become TSDoc comments in the generated code and will show inline documentation in supported editors.
Idiomatic JavaScript / TypeScript code. None of the Java idioms that protoc --js_out
generates such as the List
suffix naming for repeated fields, Map
suffix for maps, or the various getter and setter methods. ProtoScript generates and consumes plain JavaScript objects over classes.
No runtime dependencies.
Install the protocol buffers compiler:
MacOS:
brew install protobuf
Linux:
apt install -y protobuf-compiler
Windows:
choco install protoc
Or install from a precompiled binary.
Add this package to your project:
yarn add protoscript
or npm install protoscript
yarn protoscript
protoc \
--plugin=protoc-gen-protoscript=./node_modules/protoscript/compiler.js
--protoscript_out=. \
--protoscript_opt=language=typescript \
Note: Windows users replace ./node_modules/protoscript/compiler.js
above with ./node_modules/protoscript/compiler.cmd
ProtoScript can be used with Buf.
buf.gen.yaml
version: v1
plugins:
- name: protoc-gen-protoscript
path: ./node_modules/protoscript/compiler.js
out: .
opt:
- language=typescript
strategy: all
As a design goal, ProtoScript should always work with the strictest TypeScript compiler settings. If your generated ProtoScript files are failing type checking, please open an issue.
ProtoScript does not make any guarantees for tools like linters and formatters such as prettier or eslint. It generally does not make sense to run these tools against code generation artifacts, like the .pb.ts
or .pb.js
files generated by ProtoScript. This is because:
ProtoScript aims to be zero config, but can be configured via the cli interface, or when using the yarn protoscript
command, by creating a .protoscript.json
file in your project root.
Name | Description | Type |
---|---|---|
root |
The root directory. `.proto` files will be searched under this directory, and `proto` import paths will be resolved relative to this directory. ProtoScript will recursively search all subdirectories for `.proto` files.
Defaults to the project root. Example: If we have the following project structure:
Default: A.proto would
Setting // .protoscript.json
A.proto would
TypeScript projects will generally want to set this value to match their | string (filepath) |
exclude |
An array of patterns that should be skipped when searching for `.proto` files.
Example: If we have the following project structure: /src /foo A.proto /bar B.proto Setting // .protoscript.json
Will only process A.proto (B.proto) will be excluded from ProtoScript's code generation. | string[] (RegExp pattern) |
dest |
The destination folder for generated files.
Defaults to colocating generated files with the corresponding If we have the following project structure:
ProtoScript will generate the following:
Setting // .protoscript.json
Note that the generated directory structure will mirror the Setting // .protoscript.json
| string (filepath) |
language |
Whether to generate JavaScript or TypeScript.
If omitted, ProtoScript will attempt to autodetect the language by looking for a | javascript | typescript |
json |
JSON serializer options.
See https://developers.google.com/protocol-buffers/docs/proto3#json for more context. | { emitFieldsWithDefaultValues?: boolean, useProtoFieldName?: boolean } |
typecript |
TypeScript options.
| { emitDeclarationOnly?: boolean } |
ProtoScript's JSON serialization/deserialization implements the proto3 specification. This is nearly complete, but still in progress.
ProtoScript will serialize JSON keys as lowerCamelCase
versions of the proto field. Per the proto3 spec, the runtime will accept both lowerCamelCase
and the original proto field name when deserializing. You can provide the json_name
field option to specify an alternate key name. When doing so, the runtime will accept the json_name
and the origin proto field name, but not lowerCamelCase
.
PR's and issues welcomed! For more guidance check out CONTRIBUTING.md
See the project's MIT License.
FAQs
A Protobuf runtime and code generation tool for JavaScript and TypeScript
We found that protoscript demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Fluent Assertions is facing backlash after dropping the Apache license for a commercial model, leaving users blindsided and questioning contributor rights.
Research
Security News
Socket researchers uncover the risks of a malicious Python package targeting Discord developers.
Security News
The UK is proposing a bold ban on ransomware payments by public entities to disrupt cybercrime, protect critical services, and lead global cybersecurity efforts.