basant307/AI_Governance_Project
048
1"use strict";2 3/**4 * Wrappers for common types.5 * @type {Object.<string,IWrapper>}6 * @const7 */8var wrappers = exports;9 10var Message = require("./message"),11 util = require("./util/minimal");12 13/**14 * From object converter part of an {@link IWrapper}.15 * @typedef WrapperFromObjectConverter16 * @type {function}17 * @param {Object.<string,*>} object Plain object18 * @returns {Message<{}>} Message instance19 * @this Type20 */21 22/**23 * To object converter part of an {@link IWrapper}.24 * @typedef WrapperToObjectConverter25 * @type {function}26 * @param {Message<{}>} message Message instance27 * @param {IConversionOptions} [options] Conversion options28 * @returns {Object.<string,*>} Plain object29 * @this Type30 */31 32/**33 * Common type wrapper part of {@link wrappers}.34 * @interface IWrapper35 * @property {WrapperFromObjectConverter} [fromObject] From object converter36 * @property {WrapperToObjectConverter} [toObject] To object converter37 */38 39// Custom wrapper for Any40wrappers[".google.protobuf.Any"] = {41 42 fromObject: function(object, depth) {43 44 // unwrap value type if mapped45 if (object && object["@type"]) {46 // Only use fully qualified type name after the last '/'47 var name = object["@type"].substring(object["@type"].lastIndexOf("/") + 1);48 var type = this.lookup(name);49 /* istanbul ignore else */50 if (type) {51 // type_url does not accept leading "."52 var type_url = object["@type"].charAt(0) === "." ?53 object["@type"].slice(1) : object["@type"];54 // type_url prefix is optional, but path seperator is required55 if (type_url.indexOf("/") === -1) {56 type_url = "/" + type_url;57 }58 return this.create({59 type_url: type_url,60 value: type.encode(type.fromObject(object, depth === undefined ? 1 : depth + 1)).finish()61 });62 }63 }64 65 return this.fromObject(object, depth);66 },67 68 toObject: function(message, options, depth) {69 if (depth === undefined)70 depth = 0;71 if (depth > util.recursionLimit)72 throw Error("max depth exceeded");73 74 // Default prefix75 var googleApi = "type.googleapis.com/";76 var prefix = "";77 var name = "";78 79 // decode value if requested and unmapped80 if (options && options.json && message.type_url && message.value) {81 // Only use fully qualified type name after the last '/'82 name = message.type_url.substring(message.type_url.lastIndexOf("/") + 1);83 // Separate the prefix used84 prefix = message.type_url.substring(0, message.type_url.lastIndexOf("/") + 1);85 var type = this.lookup(name);86 /* istanbul ignore else */87 if (type)88 message = type.decode(message.value, undefined, undefined, depth + 1);89 }90 91 // wrap value if unmapped92 if (!(message instanceof this.ctor) && message instanceof Message) {93 var object = message.$type.toObject(message, options, depth + 1);94 var messageName = message.$type.fullName[0] === "." ?95 message.$type.fullName.slice(1) : message.$type.fullName;96 // Default to type.googleapis.com prefix if no prefix is used97 if (prefix === "") {98 prefix = googleApi;99 }100 name = prefix + messageName;101 object["@type"] = name;102 return object;103 }104 105 return this.toObject(message, options, depth);106 }107};108 