| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 | <!DOCTYPE html><html lang="en"><head>    <meta charset="utf-8">    <title>JSDoc: Source: src/protobuf_js_5_common.js</title>    <script src="scripts/prettify/prettify.js"> </script>    <script src="scripts/prettify/lang-css.js"> </script>    <!--[if lt IE 9]>      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>    <![endif]-->    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"></head><body><div id="main">    <h1 class="page-title">Source: src/protobuf_js_5_common.js</h1>            <section>        <article>            <pre class="prettyprint source linenums"><code>/** * @license * Copyright 2017 gRPC authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * *     http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * *//** * @module * @private */'use strict';var _ = require('lodash');var client = require('./client');/** * Get a function that deserializes a specific type of protobuf. * @param {function()} cls The constructor of the message type to deserialize * @param {bool=} binaryAsBase64 Deserialize bytes fields as base64 strings *     instead of Buffers. Defaults to false * @param {bool=} longsAsStrings Deserialize long values as strings instead of *     objects. Defaults to true * @return {function(Buffer):cls} The deserialization function */exports.deserializeCls = function deserializeCls(cls, options) {  /**   * Deserialize a buffer to a message object   * @param {Buffer} arg_buf The buffer to deserialize   * @return {cls} The resulting object   */  return function deserialize(arg_buf) {    // Convert to a native object with binary fields as Buffers (first argument)    // and longs as strings (second argument)    return cls.decode(arg_buf).toRaw(options.binaryAsBase64,                                     options.longsAsStrings);  };};var deserializeCls = exports.deserializeCls;/** * Get a function that serializes objects to a buffer by protobuf class. * @param {function()} Cls The constructor of the message type to serialize * @return {function(Cls):Buffer} The serialization function */exports.serializeCls = function serializeCls(Cls) {  /**   * Serialize an object to a Buffer   * @param {Object} arg The object to serialize   * @return {Buffer} The serialized object   */  return function serialize(arg) {    return new Buffer(new Cls(arg).encode().toBuffer());  };};var serializeCls = exports.serializeCls;/** * Get the fully qualified (dotted) name of a ProtoBuf.Reflect value. * @param {ProtoBuf.Reflect.Namespace} value The value to get the name of * @return {string} The fully qualified name of the value */exports.fullyQualifiedName = function fullyQualifiedName(value) {  if (value === null || value === undefined) {    return '';  }  var name = value.name;  var parent_name = fullyQualifiedName(value.parent);  if (parent_name !== '') {    name = parent_name + '.' + name;  }  return name;};var fullyQualifiedName = exports.fullyQualifiedName;/** * Return a map from method names to method attributes for the service. * @param {ProtoBuf.Reflect.Service} service The service to get attributes for * @param {Object=} options Options to apply to these attributes * @return {Object} The attributes map */exports.getProtobufServiceAttrs = function getProtobufServiceAttrs(service,                                                                   options) {  var prefix = '/' + fullyQualifiedName(service) + '/';  var binaryAsBase64, longsAsStrings;  if (options) {    binaryAsBase64 = options.binaryAsBase64;    longsAsStrings = options.longsAsStrings;  }  /* This slightly awkward construction is used to make sure we only use     lodash@3.10.1-compatible functions. A previous version used     _.fromPairs, which would be cleaner, but was introduced in lodash     version 4 */  return _.zipObject(_.map(service.children, function(method) {    return _.camelCase(method.name);  }), _.map(service.children, function(method) {    return {      originalName: method.name,      path: prefix + method.name,      requestStream: method.requestStream,      responseStream: method.responseStream,      requestType: method.resolvedRequestType,      responseType: method.resolvedResponseType,      requestSerialize: serializeCls(method.resolvedRequestType.build()),      requestDeserialize: deserializeCls(method.resolvedRequestType.build(),                                         options),      responseSerialize: serializeCls(method.resolvedResponseType.build()),      responseDeserialize: deserializeCls(method.resolvedResponseType.build(),                                          options)    };  }));};var getProtobufServiceAttrs = exports.getProtobufServiceAttrs;/** * Load a gRPC object from an existing ProtoBuf.Reflect object. * @param {ProtoBuf.Reflect.Namespace} value The ProtoBuf object to load. * @param {Object=} options Options to apply to the loaded object * @return {Object<string, *>} The resulting gRPC object */exports.loadObject = function loadObject(value, options) {  var result = {};  if (!value) {    return value;  }  if (value.hasOwnProperty('ns')) {    return loadObject(value.ns, options);  }  if (value.className === 'Namespace') {    _.each(value.children, function(child) {      result[child.name] = loadObject(child, options);    });    return result;  } else if (value.className === 'Service') {    return client.makeClientConstructor(getProtobufServiceAttrs(value, options),                                        options);  } else if (value.className === 'Message' || value.className === 'Enum') {    return value.build();  } else {    return value;  }};/** * The primary purpose of this method is to distinguish between reflection * objects from different versions of ProtoBuf.js. This is just a heuristic, * checking for properties that are (currently) specific to this version of * ProtoBuf.js * @param {Object} obj The object to check * @return {boolean} Whether the object appears to be a Protobuf.js 5 *   ReflectionObject */exports.isProbablyProtobufJs5 = function isProbablyProtobufJs5(obj) {  return _.isArray(obj.children) && (typeof obj.build === 'function');};</code></pre>        </article>    </section></div><nav>    <h2><a href="index.html">Home</a></h2><h3>Externals</h3><ul><li><a href="external-Duplex.html">Duplex</a></li><li><a href="external-EventEmitter.html">EventEmitter</a></li><li><a href="external-GoogleCredential.html">GoogleCredential</a></li><li><a href="external-Readable.html">Readable</a></li><li><a href="external-Writable.html">Writable</a></li></ul><h3>Classes</h3><ul><li><a href="grpc.Client.html">Client</a></li><li><a href="grpc.credentials-CallCredentials.html">CallCredentials</a></li><li><a href="grpc.credentials-ChannelCredentials.html">ChannelCredentials</a></li><li><a href="grpc.Metadata.html">Metadata</a></li><li><a href="grpc.Server.html">Server</a></li><li><a href="grpc.ServerCredentials.html">ServerCredentials</a></li><li><a href="grpc-ClientDuplexStream.html">ClientDuplexStream</a></li><li><a href="grpc-ClientReadableStream.html">ClientReadableStream</a></li><li><a href="grpc-ClientUnaryCall.html">ClientUnaryCall</a></li><li><a href="grpc-ClientWritableStream.html">ClientWritableStream</a></li><li><a href="grpc-ServerDuplexStream.html">ServerDuplexStream</a></li><li><a href="grpc-ServerReadableStream.html">ServerReadableStream</a></li><li><a href="grpc-ServerUnaryCall.html">ServerUnaryCall</a></li><li><a href="grpc-ServerWritableStream.html">ServerWritableStream</a></li></ul><h3>Events</h3><ul><li><a href="grpc-ClientDuplexStream.html#event:metadata">metadata</a></li><li><a href="grpc-ClientDuplexStream.html#event:status">status</a></li><li><a href="grpc-ClientReadableStream.html#event:metadata">metadata</a></li><li><a href="grpc-ClientReadableStream.html#event:status">status</a></li><li><a href="grpc-ClientUnaryCall.html#event:metadata">metadata</a></li><li><a href="grpc-ClientUnaryCall.html#event:status">status</a></li><li><a href="grpc-ClientWritableStream.html#event:metadata">metadata</a></li><li><a href="grpc-ClientWritableStream.html#event:status">status</a></li><li><a href="grpc-ServerDuplexStream.html#~event:cancelled">cancelled</a></li><li><a href="grpc-ServerReadableStream.html#~event:cancelled">cancelled</a></li><li><a href="grpc-ServerUnaryCall.html#~event:cancelled">cancelled</a></li><li><a href="grpc-ServerWritableStream.html#~event:cancelled">cancelled</a></li></ul><h3>Namespaces</h3><ul><li><a href="grpc.html">grpc</a></li><li><a href="grpc.credentials.html">credentials</a></li></ul></nav><br class="clear"><footer>    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.3</a> on Fri Sep 08 2017 11:10:31 GMT-0700 (PDT)</footer><script> prettyPrint(); </script><script src="scripts/linenumber.js"> </script></body></html>
 |