CoolFace
Datasetpublic

basant307/AI_Governance_Project

sourceHugging Faceapache-2.0updated 2mo agoView on Hugging Face
0likes48downloads
converter.js319 linesDownload Raw Back to src
1"use strict";2/**3 * Runtime message from/to plain object converters.4 * @namespace5 */6var converter = exports;7 8var Enum = require("./enum"),9    util = require("./util");10 11/**12 * Generates a partial value fromObject conveter.13 * @param {Codegen} gen Codegen instance14 * @param {Field} field Reflected field15 * @param {number} fieldIndex Field index16 * @param {string} prop Property reference17 * @returns {Codegen} Codegen instance18 * @ignore19 */20function genValuePartial_fromObject(gen, field, fieldIndex, prop) {21    var defaultAlreadyEmitted = false;22    /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */23    if (field.resolvedType) {24        if (field.resolvedType instanceof Enum) { gen25            ("switch(d%s){", prop);26            for (var values = field.resolvedType.values, keys = Object.keys(values), i = 0; i < keys.length; ++i) {27                // enum unknown values passthrough28                if (values[keys[i]] === field.typeDefault && !defaultAlreadyEmitted) { gen29                    ("default:")30                        ("if(typeof(d%s)===\"number\"){m%s=d%s;break}", prop, prop, prop);31                    if (!field.repeated) gen // fallback to default value only for32                                             // arrays, to avoid leaving holes.33                        ("break");           // for non-repeated fields, just ignore34                    defaultAlreadyEmitted = true;35                }36                gen37                ("case%j:", keys[i])38                ("case %i:", values[keys[i]])39                    ("m%s=%j", prop, values[keys[i]])40                    ("break");41            } gen42            ("}");43        } else gen44            ("if(!util.isObject(d%s))", prop)45                ("throw TypeError(%j)", field.fullName + ": object expected")46            ("m%s=types[%i].fromObject(d%s,n+1)", prop, fieldIndex, prop);47    } else {48        var isUnsigned = false;49        switch (field.type) {50            case "double":51            case "float": gen52                ("m%s=Number(d%s)", prop, prop); // also catches "NaN", "Infinity"53                break;54            case "uint32":55            case "fixed32": gen56                ("m%s=d%s>>>0", prop, prop);57                break;58            case "int32":59            case "sint32":60            case "sfixed32": gen61                ("m%s=d%s|0", prop, prop);62                break;63            case "uint64":64            case "fixed64":65                isUnsigned = true;66                // eslint-disable-next-line no-fallthrough67            case "int64":68            case "sint64":69            case "sfixed64": gen70                ("if(util.Long)")71                    ("m%s=util.Long.fromValue(d%s,%j)", prop, prop, isUnsigned)72                ("else if(typeof d%s===\"string\")", prop)73                    ("m%s=parseInt(d%s,10)", prop, prop)74                ("else if(typeof d%s===\"number\")", prop)75                    ("m%s=d%s", prop, prop)76                ("else if(typeof d%s===\"object\")", prop)77                    ("m%s=new util.LongBits(d%s.low>>>0,d%s.high>>>0).toNumber(%s)", prop, prop, prop, isUnsigned ? "true" : "");78                break;79            case "bytes": gen80                ("if(typeof d%s===\"string\")", prop)81                    ("util.base64.decode(d%s,m%s=util.newBuffer(util.base64.length(d%s)),0)", prop, prop, prop)82                ("else if(d%s.length >= 0)", prop)83                    ("m%s=d%s", prop, prop);84                break;85            case "string": gen86                ("m%s=String(d%s)", prop, prop);87                break;88            case "bool": gen89                ("m%s=Boolean(d%s)", prop, prop);90                break;91            /* default: gen92                ("m%s=d%s", prop, prop);93                break; */94        }95    }96    return gen;97    /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */98}99 100/**101 * Generates a plain object to runtime message converter specific to the specified message type.102 * @param {Type} mtype Message type103 * @returns {Codegen} Codegen instance104 */105converter.fromObject = function fromObject(mtype) {106    /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */107    var fields = mtype.fieldsArray;108    var gen = util.codegen(["d", "n"], mtype.name + "$fromObject")109    ("if(d instanceof this.ctor)")110        ("return d");111    if (!fields.length) return gen112    ("return new this.ctor");113    gen114    ("if(!util.isObject(d))")115        ("throw TypeError(%j)", mtype.fullName + ": object expected")116    ("if(n===undefined)n=0")117    ("if(n>util.recursionLimit)")118        ("throw Error(\"maximum nesting depth exceeded\")");119    gen120    ("var m=new this.ctor");121    for (var i = 0; i < fields.length; ++i) {122        var field  = fields[i].resolve(),123            prop   = util.safeProp(field.name);124 125        // Map fields126        if (field.map) { gen127    ("if(d%s){", prop)128        ("if(!util.isObject(d%s))", prop)129            ("throw TypeError(%j)", field.fullName + ": object expected")130        ("m%s={}", prop)131        ("for(var ks=Object.keys(d%s),i=0;i<ks.length;++i){", prop);132            gen133        ("if(ks[i]===\"__proto__\")")134            ("util.makeProp(m%s,ks[i])", prop);135            genValuePartial_fromObject(gen, field, /* not sorted */ i, prop + "[ks[i]]")136        ("}")137    ("}");138 139        // Repeated fields140        } else if (field.repeated) { gen141    ("if(d%s){", prop)142        ("if(!Array.isArray(d%s))", prop)143            ("throw TypeError(%j)", field.fullName + ": array expected")144        ("m%s=[]", prop)145        ("for(var i=0;i<d%s.length;++i){", prop);146            genValuePartial_fromObject(gen, field, /* not sorted */ i, prop + "[i]")147        ("}")148    ("}");149 150        // Non-repeated fields151        } else {152            if (!(field.resolvedType instanceof Enum)) gen // no need to test for null/undefined if an enum (uses switch)153    ("if(d%s!=null){", prop); // !== undefined && !== null154        genValuePartial_fromObject(gen, field, /* not sorted */ i, prop);155            if (!(field.resolvedType instanceof Enum)) gen156    ("}");157        }158    } return gen159    ("return m");160    /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */161};162 163/**164 * Generates a partial value toObject converter.165 * @param {Codegen} gen Codegen instance166 * @param {Field} field Reflected field167 * @param {number} fieldIndex Field index168 * @param {string} prop Property reference169 * @returns {Codegen} Codegen instance170 * @ignore171 */172function genValuePartial_toObject(gen, field, fieldIndex, prop) {173    /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */174    if (field.resolvedType) {175        if (field.resolvedType instanceof Enum) gen176            ("d%s=o.enums===String?(types[%i].values[m%s]===undefined?m%s:types[%i].values[m%s]):m%s", prop, fieldIndex, prop, prop, fieldIndex, prop, prop);177        else gen178            ("d%s=types[%i].toObject(m%s,o,q+1)", prop, fieldIndex, prop);179    } else {180        var isUnsigned = false;181        switch (field.type) {182            case "double":183            case "float": gen184            ("d%s=o.json&&!isFinite(m%s)?String(m%s):m%s", prop, prop, prop, prop);185                break;186            case "uint64":187            case "fixed64":188                isUnsigned = true;189                // eslint-disable-next-line no-fallthrough190            case "int64":191            case "sint64":192            case "sfixed64": gen193            ("if(typeof BigInt!==\"undefined\"&&o.longs===BigInt)")194                ("d%s=typeof m%s===\"number\"?BigInt(m%s):util.Long.fromBits(m%s.low>>>0,m%s.high>>>0,%j).toBigInt()", prop, prop, prop, prop, prop, isUnsigned)195            ("else if(typeof m%s===\"number\")", prop)196                ("d%s=o.longs===String?String(m%s):m%s", prop, prop, prop)197            ("else") // Long-like198                ("d%s=o.longs===String?util.Long.prototype.toString.call(m%s):o.longs===Number?new util.LongBits(m%s.low>>>0,m%s.high>>>0).toNumber(%s):m%s", prop, prop, prop, prop, isUnsigned ? "true": "", prop);199                break;200            case "bytes": gen201            ("d%s=o.bytes===String?util.base64.encode(m%s,0,m%s.length):o.bytes===Array?Array.prototype.slice.call(m%s):m%s", prop, prop, prop, prop, prop);202                break;203            default: gen204            ("d%s=m%s", prop, prop);205                break;206        }207    }208    return gen;209    /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */210}211 212/**213 * Generates a runtime message to plain object converter specific to the specified message type.214 * @param {Type} mtype Message type215 * @returns {Codegen} Codegen instance216 */217converter.toObject = function toObject(mtype) {218    /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */219    var fields = mtype.fieldsArray.slice().sort(util.compareFieldsById);220    if (!fields.length)221        return util.codegen()("return {}");222    var gen = util.codegen(["m", "o", "q"], mtype.name + "$toObject")223    ("if(!o)")224        ("o={}")225    ("if(q===undefined)q=0")226    ("if(q>util.recursionLimit)")227        ("throw Error(\"max depth exceeded\")")228    ("var d={}");229 230    var repeatedFields = [],231        mapFields = [],232        normalFields = [],233        i = 0;234    for (; i < fields.length; ++i)235        if (!fields[i].partOf)236            ( fields[i].resolve().repeated ? repeatedFields237            : fields[i].map ? mapFields238            : normalFields).push(fields[i]);239 240    if (repeatedFields.length) { gen241    ("if(o.arrays||o.defaults){");242        for (i = 0; i < repeatedFields.length; ++i) gen243        ("d%s=[]", util.safeProp(repeatedFields[i].name));244        gen245    ("}");246    }247 248    if (mapFields.length) { gen249    ("if(o.objects||o.defaults){");250        for (i = 0; i < mapFields.length; ++i) gen251        ("d%s={}", util.safeProp(mapFields[i].name));252        gen253    ("}");254    }255 256    if (normalFields.length) { gen257    ("if(o.defaults){");258        for (i = 0; i < normalFields.length; ++i) {259            var field = normalFields[i],260                prop  = util.safeProp(field.name);261            if (field.resolvedType instanceof Enum) gen262        ("d%s=o.enums===String?%j:%j", prop, field.resolvedType.valuesById[field.typeDefault], field.typeDefault);263            else if (field.long) gen264        ("if(util.Long){")265            ("var n=new util.Long(%i,%i,%j)", field.typeDefault.low, field.typeDefault.high, field.typeDefault.unsigned)266            ("d%s=o.longs===String?n.toString():o.longs===Number?n.toNumber():typeof BigInt!==\"undefined\"&&o.longs===BigInt?n.toBigInt():n", prop)267        ("}else")268            ("d%s=o.longs===String?%j:typeof BigInt!==\"undefined\"&&o.longs===BigInt?BigInt(%j):%i", prop, field.typeDefault.toString(), field.typeDefault.toString(), field.typeDefault.toNumber());269            else if (field.bytes) {270                var arrayDefault = Array.prototype.slice.call(field.typeDefault);271                gen272        ("if(o.bytes===String)d%s=%j", prop, String.fromCharCode.apply(String, field.typeDefault))273        ("else{")274            ("d%s=%j", prop, arrayDefault)275            ("if(o.bytes!==Array)d%s=util.newBuffer(d%s)", prop, prop)276        ("}");277            } else gen278        ("d%s=%j", prop, field.typeDefault); // also messages (=null)279        } gen280    ("}");281    }282    var hasKs2 = false;283    for (i = 0; i < fields.length; ++i) {284        var field = fields[i],285            index = mtype._fieldsArray.indexOf(field),286            prop  = util.safeProp(field.name);287        if (field.map) {288            if (!hasKs2) { hasKs2 = true; gen289    ("var ks2");290            } gen291    ("if(m%s&&(ks2=Object.keys(m%s)).length){", prop, prop)292        ("d%s={}", prop)293        ("for(var j=0;j<ks2.length;++j){");294            gen295        ("if(ks2[j]===\"__proto__\")")296            ("util.makeProp(d%s,ks2[j])", prop);297            genValuePartial_toObject(gen, field, /* sorted */ index, prop + "[ks2[j]]")298        ("}");299        } else if (field.repeated) { gen300    ("if(m%s&&m%s.length){", prop, prop)301        ("d%s=[]", prop)302        ("for(var j=0;j<m%s.length;++j){", prop);303            genValuePartial_toObject(gen, field, /* sorted */ index, prop + "[j]")304        ("}");305        } else { gen306    ("if(m%s!=null&&Object.hasOwnProperty.call(m,%j)){", prop, field.name); // !== undefined && !== null307        genValuePartial_toObject(gen, field, /* sorted */ index, prop);308        if (field.partOf) gen309        ("if(o.oneofs)")310            ("d%s=%j", util.safeProp(field.partOf.name), field.name);311        }312        gen313    ("}");314    }315    return gen316    ("return d");317    /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */318};319 
basant307/AI_Governance_Project · CoolFace