CoolFace
Datasetpublic

basant307/AI_Governance_Project

sourceHugging Faceapache-2.0updated 2mo agoView on Hugging Face
0likes48downloads
verifier.js181 linesDownload Raw Back to src
1"use strict";2module.exports = verifier;3 4var Enum      = require("./enum"),5    util      = require("./util");6 7function invalid(field, expected) {8    return field.name + ": " + expected + (field.repeated && expected !== "array" ? "[]" : field.map && expected !== "object" ? "{k:"+field.keyType+"}" : "") + " expected";9}10 11/**12 * Generates a partial value verifier.13 * @param {Codegen} gen Codegen instance14 * @param {Field} field Reflected field15 * @param {number} fieldIndex Field index16 * @param {string} ref Variable reference17 * @returns {Codegen} Codegen instance18 * @ignore19 */20function genVerifyValue(gen, field, fieldIndex, ref) {21    /* eslint-disable no-unexpected-multiline */22    if (field.resolvedType) {23        if (field.resolvedType instanceof Enum) { gen24            ("switch(%s){", ref)25                ("default:")26                    ("return%j", invalid(field, "enum value"));27            for (var keys = Object.keys(field.resolvedType.values), j = 0; j < keys.length; ++j) gen28                ("case %i:", field.resolvedType.values[keys[j]]);29            gen30                    ("break")31            ("}");32        } else {33            gen34            ("{")35                ("var e=types[%i].verify(%s,n+1);", fieldIndex, ref)36                ("if(e)")37                    ("return%j+e", field.name + ".")38            ("}");39        }40    } else {41        switch (field.type) {42            case "int32":43            case "uint32":44            case "sint32":45            case "fixed32":46            case "sfixed32": gen47                ("if(!util.isInteger(%s))", ref)48                    ("return%j", invalid(field, "integer"));49                break;50            case "int64":51            case "uint64":52            case "sint64":53            case "fixed64":54            case "sfixed64": gen55                ("if(!util.isInteger(%s)&&!(%s&&util.isInteger(%s.low)&&util.isInteger(%s.high)))", ref, ref, ref, ref)56                    ("return%j", invalid(field, "integer|Long"));57                break;58            case "float":59            case "double": gen60                ("if(typeof %s!==\"number\")", ref)61                    ("return%j", invalid(field, "number"));62                break;63            case "bool": gen64                ("if(typeof %s!==\"boolean\")", ref)65                    ("return%j", invalid(field, "boolean"));66                break;67            case "string": gen68                ("if(!util.isString(%s))", ref)69                    ("return%j", invalid(field, "string"));70                break;71            case "bytes": gen72                ("if(!(%s&&typeof %s.length===\"number\"||util.isString(%s)))", ref, ref, ref)73                    ("return%j", invalid(field, "buffer"));74                break;75        }76    }77    return gen;78    /* eslint-enable no-unexpected-multiline */79}80 81/**82 * Generates a partial key verifier.83 * @param {Codegen} gen Codegen instance84 * @param {Field} field Reflected field85 * @param {string} ref Variable reference86 * @returns {Codegen} Codegen instance87 * @ignore88 */89function genVerifyKey(gen, field, ref) {90    /* eslint-disable no-unexpected-multiline */91    switch (field.keyType) {92        case "int32":93        case "uint32":94        case "sint32":95        case "fixed32":96        case "sfixed32": gen97            ("if(!util.key32Re.test(%s))", ref)98                ("return%j", invalid(field, "integer key"));99            break;100        case "int64":101        case "uint64":102        case "sint64":103        case "fixed64":104        case "sfixed64": gen105            ("if(!util.key64Re.test(%s))", ref) // see comment above: x is ok, d is not106                ("return%j", invalid(field, "integer|Long key"));107            break;108        case "bool": gen109            ("if(!util.key2Re.test(%s))", ref)110                ("return%j", invalid(field, "boolean key"));111            break;112    }113    return gen;114    /* eslint-enable no-unexpected-multiline */115}116 117/**118 * Generates a verifier specific to the specified message type.119 * @param {Type} mtype Message type120 * @returns {Codegen} Codegen instance121 */122function verifier(mtype) {123    /* eslint-disable no-unexpected-multiline */124 125    var gen = util.codegen(["m", "n"], mtype.name + "$verify")126    ("if(typeof m!==\"object\"||m===null)")127        ("return%j", "object expected")128    ("if(n===undefined)n=0")129    ("if(n>util.recursionLimit)")130        ("return%j", "maximum nesting depth exceeded");131    var oneofs = mtype.oneofsArray,132        seenFirstField = {};133    if (oneofs.length) gen134    ("var p={}");135 136    for (var i = 0; i < /* initializes */ mtype.fieldsArray.length; ++i) {137        var field = mtype._fieldsArray[i].resolve(),138            ref   = "m" + util.safeProp(field.name);139 140        if (field.optional) gen141        ("if(%s!=null&&Object.hasOwnProperty.call(m,%j)){", ref, field.name); // !== undefined && !== null142 143        // map fields144        if (field.map) { gen145            ("if(!util.isObject(%s))", ref)146                ("return%j", invalid(field, "object"))147            ("var k=Object.keys(%s)", ref)148            ("for(var i=0;i<k.length;++i){");149                genVerifyKey(gen, field, "k[i]");150                genVerifyValue(gen, field, i, ref + "[k[i]]")151            ("}");152 153        // repeated fields154        } else if (field.repeated) { gen155            ("if(!Array.isArray(%s))", ref)156                ("return%j", invalid(field, "array"))157            ("for(var i=0;i<%s.length;++i){", ref);158                genVerifyValue(gen, field, i, ref + "[i]")159            ("}");160 161        // required or present fields162        } else {163            if (field.partOf) {164                var oneofProp = util.safeProp(field.partOf.name);165                if (seenFirstField[field.partOf.name] === 1) gen166            ("if(p%s===1)", oneofProp)167                ("return%j", field.partOf.name + ": multiple values");168                seenFirstField[field.partOf.name] = 1;169                gen170            ("p%s=1", oneofProp);171            }172            genVerifyValue(gen, field, i, ref);173        }174        if (field.optional) gen175        ("}");176    }177    return gen178    ("return null");179    /* eslint-enable no-unexpected-multiline */180}181 
basant307/AI_Governance_Project · CoolFace