Index: third_party/protobuf/js/README.md |
diff --git a/third_party/protobuf/js/README.md b/third_party/protobuf/js/README.md |
index fc144a3d1d6ad281bdc957e9b11bafc0bd23406d..15d48c87f706bc7258f5e48f667b162704b44c62 100644 |
--- a/third_party/protobuf/js/README.md |
+++ b/third_party/protobuf/js/README.md |
@@ -1,14 +1,159 @@ |
-This directory contains Protocol Buffer support for JavaScript. This code works |
-in browsers and in Node.js. |
+Protocol Buffers - Google's data interchange format |
+=================================================== |
-The packaging work for this is still in-progress. For now you can just run the |
-tests. First you need to build the main C++ distribution because the code |
-generator for JavaScript is written in C++: |
+[](https://travis-ci.org/google/protobuf) |
- $ ./autogen.sh |
- $ ./configure |
- $ make |
+Copyright 2008 Google Inc. |
-Then you can run the JavaScript tests in this directory: |
+This directory contains the JavaScript Protocol Buffers runtime library. |
- $ cd js && gulp test |
+The library is currently compatible with: |
+ |
+1. CommonJS-style imports (eg. `var protos = require('my-protos');`) |
+2. Closure-style imports (eg. `goog.require('my.package.MyProto');`) |
+ |
+Support for ES6-style imports is not implemented yet. Browsers can |
+be supported by using Browserify, webpack, Closure Compiler, etc. to |
+resolve imports at compile time. |
+ |
+To use Protocol Buffers with JavaScript, you need two main components: |
+ |
+1. The protobuf runtime library. You can install this with |
+ `npm install google-protobuf`, or use the files in this directory. |
+2. The Protocol Compiler `protoc`. This translates `.proto` files |
+ into `.js` files. The compiler is not currently available via |
+ npm, but you can download a pre-built binary |
+ [on GitHub](https://github.com/google/protobuf/releases) |
+ (look for the `protoc-*.zip` files under **Downloads**). |
+ |
+ |
+Setup |
+===== |
+ |
+First, obtain the Protocol Compiler. The easiest way is to download |
+a pre-built binary from [https://github.com/google/protobuf/releases](https://github.com/google/protobuf/releases). |
+ |
+If you want, you can compile `protoc` from source instead. To do this |
+follow the instructions in [the top-level |
+README](https://github.com/google/protobuf/blob/master/src/README.md). |
+ |
+Once you have `protoc` compiled, you can run the tests by typing: |
+ |
+ $ cd js |
+ $ npm install |
+ $ npm test |
+ |
+ # If your protoc is somewhere else than ../src/protoc, instead do this. |
+ # But make sure your protoc is the same version as this (or compatible)! |
+ $ PROTOC=/usr/local/bin/protoc npm test |
+ |
+This will run two separate copies of the tests: one that uses |
+Closure Compiler style imports and one that uses CommonJS imports. |
+You can see all the CommonJS files in `commonjs_out/`. |
+If all of these tests pass, you know you have a working setup. |
+ |
+ |
+Using Protocol Buffers in your own project |
+========================================== |
+ |
+To use Protocol Buffers in your own project, you need to integrate |
+the Protocol Compiler into your build system. The details are a |
+little different depending on whether you are using Closure imports |
+or CommonJS imports: |
+ |
+Closure Imports |
+--------------- |
+ |
+If you want to use Closure imports, your build should run a command |
+like this: |
+ |
+ $ protoc --js_out=library=myproto_libs,binary:. messages.proto base.proto |
+ |
+For Closure imports, `protoc` will generate a single output file |
+(`myproto_libs.js` in this example). The generated file will `goog.provide()` |
+all of the types defined in your .proto files. For example, for the unit |
+tests the generated files contain many `goog.provide` statements like: |
+ |
+ goog.provide('proto.google.protobuf.DescriptorProto'); |
+ goog.provide('proto.google.protobuf.DescriptorProto.ExtensionRange'); |
+ goog.provide('proto.google.protobuf.DescriptorProto.ReservedRange'); |
+ goog.provide('proto.google.protobuf.EnumDescriptorProto'); |
+ goog.provide('proto.google.protobuf.EnumOptions'); |
+ |
+The generated code will also `goog.require()` many types in the core library, |
+and they will require many types in the Google Closure library. So make sure |
+that your `goog.provide()` / `goog.require()` setup can find all of your |
+generated code, the core library `.js` files in this directory, and the |
+Google Closure library itself. |
+ |
+Once you've done this, you should be able to import your types with |
+statements like: |
+ |
+ goog.require('proto.my.package.MyMessage'); |
+ |
+ var message = proto.my.package.MyMessage(); |
+ |
+CommonJS imports |
+---------------- |
+ |
+If you want to use CommonJS imports, your build should run a command |
+like this: |
+ |
+ $ protoc --js_out=import_style=commonjs,binary:. messages.proto base.proto |
+ |
+For CommonJS imports, `protoc` will spit out one file per input file |
+(so `messages_pb.js` and `base_pb.js` in this example). The generated |
+code will depend on the core runtime, which should be in a file called |
+`google-protobuf.js`. If you are installing from `npm`, this file should |
+already be built and available. If you are running from GitHub, you need |
+to build it first by running: |
+ |
+ $ gulp dist |
+ |
+Once you've done this, you should be able to import your types with |
+statements like: |
+ |
+ var messages = require('./messages_pb'); |
+ |
+ var message = new messages.MyMessage(); |
+ |
+The `--js_out` flag |
+------------------- |
+ |
+The syntax of the `--js_out` flag is: |
+ |
+ --js_out=[OPTIONS:]output_dir |
+ |
+Where `OPTIONS` are separated by commas. Options are either `opt=val` or |
+just `opt` (for options that don't take a value). The available options |
+are specified and documented in the `GeneratorOptions` struct in |
+[src/google/protobuf/compiler/js/js_generator.h](https://github.com/google/protobuf/blob/master/src/google/protobuf/compiler/js/js_generator.h#L53). |
+ |
+Some examples: |
+ |
+- `--js_out=library=myprotos_lib.js,binary:.`: this contains the options |
+ `library=myprotos.lib.js` and `binary` and outputs to the current directory. |
+ The `import_style` option is left to the default, which is `closure`. |
+- `--js_out=import_style=commonjs,binary:protos`: this contains the options |
+ `import_style=commonjs` and `binary` and outputs to the directory `protos`. |
+ |
+API |
+=== |
+ |
+The API is not well-documented yet. Here is a quick example to give you an |
+idea of how the library generally works: |
+ |
+ var message = new MyMessage(); |
+ |
+ message.setName("John Doe"); |
+ message.setAge(25); |
+ message.setPhoneNumbers(["800-555-1212", "800-555-0000"]); |
+ |
+ // Serializes to a UInt8Array. |
+ bytes = message.serializeBinary(); |
+ |
+ var message2 = new MyMessage(); |
+ message2.deserializeBinary(bytes); |
+ |
+For more examples, see the tests. You can also look at the generated code |
+to see what methods are defined for your generated messages. |