<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class=""><div class=""><blockquote type="cite" class=""><div class="">On Feb 18, 2018, at 4:52 AM, sagiv ben giat <<a href="mailto:sagiv.bengiat@gmail.com" class="">sagiv.bengiat@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><span class="" style="float: none; display: inline !important;">> </span><span class="" style="color: rgb(51, 51, 51); font-family: Georgia, 'Times New Roman', Times, serif; font-variant-ligatures: normal; background-color: rgb(255, 255, 255); float: none; display: inline;">Can you provide a clear use case that can't (or shouldn't) be covered by what others have mentioned?</span></div></blockquote></div><div class=""><span class="" style="color: rgb(51, 51, 51); font-family: Georgia, 'Times New Roman', Times, serif; font-variant-ligatures: normal; background-color: rgb(255, 255, 255); float: none; display: inline;"><br class=""></span></div><div class=""><font color="#333333" face="Georgia, Times New Roman, Times, serif" class=""><span style="background-color: rgb(255, 255, 255);" class="">@sagiv, if you need guidance by use-case/example, here’s a real-world example [1] of a validator “god” function (with 100% code-coverage [2]) that encapsulates most of the logic for validating user-inputs against the full swagger/openapi 2.0 spec [3].  attached screenshot showing how its used from browser-console (works just as well in nodejs).</span></font></div><div class=""><font color="#333333" face="Georgia, Times New Roman, Times, serif" class=""><span style="background-color: rgb(255, 255, 255);" class=""><br class=""></span></font></div><div class=""><font color="#333333" face="Georgia, Times New Roman, Times, serif" class=""><span style="background-color: rgb(255, 255, 255);" class="">and yes, the code-sample makes use of break statements in:</span></font></div><div class=""><font color="#333333" face="Georgia, Times New Roman, Times, serif" class=""><span style="background-color: rgb(255, 255, 255);" class="">1. a recursive while loop to dereference schema pointers [4]</span></font></div><div class=""><font color="#333333" face="Georgia, Times New Roman, Times, serif" class=""><span style="background-color: rgb(255, 255, 255);" class="">2. in switch/case blocks which are </span></font><span style="color: rgb(51, 51, 51); font-family: Georgia, 'Times New Roman', Times, serif; background-color: rgb(255, 255, 255);" class="">conceptually similar to what you want to do</span></div><div class=""><font color="#333333" face="Georgia, Times New Roman, Times, serif" class=""><span style="background-color: rgb(255, 255, 255);" class=""><br class=""></span></font></div><div class=""><font color="#333333" face="Georgia, Times New Roman, Times, serif" class=""><span style="background-color: rgb(255, 255, 255);" class="">[1] </span></font><a href="https://github.com/kaizhu256/node-swgg/blob/2018.2.1/lib.swgg.js#L4076" class="">https://github.com/kaizhu256/node-swgg/blob/2018.2.1/lib.swgg.js#L4076</a></div><div class="">[2] <a href="https://kaizhu256.github.io/node-swgg/build..beta..travis-ci.org/coverage.html/node-swgg/lib.swgg.js.html" class="">https://kaizhu256.github.io/node-swgg/build..beta..travis-ci.org/coverage.html/node-swgg/lib.swgg.js.html</a></div><div class="">[3] <a href="https://github.com/OAI/OpenAPI-Specification/blob/3.0.1/versions/2.0.md" class="">https://github.com/OAI/OpenAPI-Specification/blob/3.0.1/versions/2.0.md</a></div><div class="">[4] <a href="https://github.com/OAI/OpenAPI-Specification/blob/3.0.1/versions/2.0.md#referenceObject" class="">https://github.com/OAI/OpenAPI-Specification/blob/3.0.1/versions/2.0.md#referenceObject</a></div><div class=""><img apple-inline="yes" id="D080EF95-B781-4656-AF20-E07A3AC7E06C" src="cid:3FAE97D6-AED5-47C0-8C4B-0D2C08BB4114" class=""></div><div class=""><br class=""></div><div class=""><font color="#333333" face="Menlo" class="">```javascript</font></div><div class=""><div class=""><font color="#333333" face="Menlo" class="">/*</font></div><div class=""><font color="#333333" face="Menlo" class=""> * real-world example of swagger-validator from</font></div><div class=""><font color="#333333" face="Menlo" class=""> * <a href="https://github.com/kaizhu256/node-swgg/blob/2018.2.1/lib.swgg.js#L4076" class="">https://github.com/kaizhu256/node-swgg/blob/2018.2.1/lib.swgg.js#L4076</a></font></div><div class=""><font color="#333333" face="Menlo" class=""> */</font></div><div class=""><font color="#333333" face="Menlo" class=""><br class=""></font></div><div class=""><font color="#333333" face="Menlo" class=""><div class="">/*jslint</div><div class="">    bitwise: true,</div><div class="">    browser: true,</div><div class="">    maxerr: 8,</div><div class="">    maxlen: 100,</div><div class="">    node: true,</div><div class="">    nomen: true,</div><div class="">    regexp: true,</div><div class="">    stupid: true</div><div class="">*/</div><div class=""><br class=""></div></font></div><div class=""><font color="#333333" face="Menlo" class="">local.validateBySwaggerSchema = function (options) {</font></div><div class=""><font color="#333333" face="Menlo" class="">/*</font></div><div class=""><font color="#333333" face="Menlo" class=""><div class=""> * this function will validate options.data against the swagger options.schema</div><div class=""> * according to the spec defined at:</div><div class=""> * <a href="http://json-schema.org/draft-04/json-schema-validation.html#rfc.section.5" class="">http://json-schema.org/draft-04/json-schema-validation.html#rfc.section.5</a></div></font></div><div class=""><font color="#333333" face="Menlo" class=""> */</font></div><div class=""><font color="#333333" face="Menlo" class="">    var $ref,</font></div><div class=""><font color="#333333" face="Menlo" class="">        circularList,</font></div><div class=""><font color="#333333" face="Menlo" class="">        data,</font></div><div class=""><font color="#333333" face="Menlo" class="">        dataReadonlyRemove2,</font></div><div class=""><font color="#333333" face="Menlo" class="">        ii,</font></div><div class=""><font color="#333333" face="Menlo" class="">        oneOf,</font></div><div class=""><font color="#333333" face="Menlo" class="">        schema,</font></div><div class=""><font color="#333333" face="Menlo" class="">        test,</font></div><div class=""><font color="#333333" face="Menlo" class="">        tmp;</font></div><div class=""><font color="#333333" face="Menlo" class="">    if (!options.schema) {</font></div><div class=""><font color="#333333" face="Menlo" class="">        return;</font></div><div class=""><font color="#333333" face="Menlo" class="">    }</font></div><div class=""><font color="#333333" face="Menlo" class="">    data = options.data;</font></div><div class=""><font color="#333333" face="Menlo" class="">    options.dataReadonlyRemove = options.dataReadonlyRemove || [{}, '', null];</font></div><div class=""><font color="#333333" face="Menlo" class="">    dataReadonlyRemove2 = options.dataReadonlyRemove[2] || {};</font></div><div class=""><font color="#333333" face="Menlo" class="">    schema = options.schema;</font></div><div class=""><font color="#333333" face="Menlo" class="">    circularList = [];</font></div><div class=""><font color="#333333" face="Menlo" class="">    while (true) {</font></div><div class=""><font color="#333333" face="Menlo" class="">        // dereference schema.schema</font></div><div class=""><font color="#333333" face="Menlo" class="">        while (schema.schema) {</font></div><div class=""><font color="#333333" face="Menlo" class="">            schema = schema.schema;</font></div><div class=""><font color="#333333" face="Menlo" class="">        }</font></div><div class=""><font color="#333333" face="Menlo" class="">        // dereference schema.oneOf</font></div><div class=""><font color="#333333" face="Menlo" class="">        oneOf = (data && schema.oneOf) || [];</font></div><div class=""><font color="#333333" face="Menlo" class="">        for (ii = 0; ii < oneOf.length; ii += 1) {</font></div><div class=""><font color="#333333" face="Menlo" class="">            tmp = String(oneOf[ii] && oneOf[ii].$ref)</font></div><div class=""><font color="#333333" face="Menlo" class="">                .replace('<a href="http://json-schema.org/draft-04/schema#', '#" class="">http://json-schema.org/draft-04/schema#', '#</a>');</font></div><div class=""><font color="#333333" face="Menlo" class="">            switch (tmp + ' ' + (!local.isNullOrUndefined(data.$ref) || data.in)) {</font></div><div class=""><font color="#333333" face="Menlo" class="">            case '#/definitions/bodyParameter body':</font></div><div class=""><font color="#333333" face="Menlo" class="">            case '#/definitions/formDataParameterSubSchema formData':</font></div><div class=""><font color="#333333" face="Menlo" class="">            case '#/definitions/headerParameterSubSchema header':</font></div><div class=""><font color="#333333" face="Menlo" class="">            case '#/definitions/jsonReference true':</font></div><div class=""><font color="#333333" face="Menlo" class="">            case '#/definitions/pathParameterSubSchema path':</font></div><div class=""><font color="#333333" face="Menlo" class="">            case '#/definitions/queryParameterSubSchema query':</font></div><div class=""><font color="#333333" face="Menlo" class="">                schema = local.swaggerSchemaJson.definitions[tmp.split('/')[2]];</font></div><div class=""><font color="#333333" face="Menlo" class="">                break;</font></div><div class=""><font color="#333333" face="Menlo" class="">            default:</font></div><div class=""><font color="#333333" face="Menlo" class="">                switch (tmp) {</font></div><div class=""><font color="#333333" face="Menlo" class="">                case '#/definitions/bodyParameter':</font></div><div class=""><font color="#333333" face="Menlo" class="">                case '#/definitions/jsonReference':</font></div><div class=""><font color="#333333" face="Menlo" class="">                    schema = oneOf[ii ^ 1];</font></div><div class=""><font color="#333333" face="Menlo" class="">                    break;</font></div><div class=""><font color="#333333" face="Menlo" class="">                }</font></div><div class=""><font color="#333333" face="Menlo" class="">            }</font></div><div class=""><font color="#333333" face="Menlo" class="">            if (!schema.oneOf) {</font></div><div class=""><font color="#333333" face="Menlo" class="">                break;</font></div><div class=""><font color="#333333" face="Menlo" class="">            }</font></div><div class=""><font color="#333333" face="Menlo" class="">        }</font></div><div class=""><font color="#333333" face="Menlo" class="">        // dereference schema.$ref</font></div><div class=""><font color="#333333" face="Menlo" class="">        $ref = schema && schema.$ref;</font></div><div class=""><font color="#333333" face="Menlo" class="">        if (!$ref) {</font></div><div class=""><font color="#333333" face="Menlo" class="">            break;</font></div><div class=""><font color="#333333" face="Menlo" class="">        }</font></div><div class=""><font color="#333333" face="Menlo" class="">        test = circularList.indexOf($ref) < 0;</font></div><div class=""><font color="#333333" face="Menlo" class="">        local.throwSwaggerError(!test && {</font></div><div class=""><font color="#333333" face="Menlo" class="">            data: data,</font></div><div class=""><font color="#333333" face="Menlo" class="">            errorType: 'schemaDeferenceCircular',</font></div><div class=""><font color="#333333" face="Menlo" class="">            prefix: options.prefix,</font></div><div class=""><font color="#333333" face="Menlo" class="">            schema: schema</font></div><div class=""><font color="#333333" face="Menlo" class="">        });</font></div><div class=""><font color="#333333" face="Menlo" class="">        circularList.push($ref);</font></div><div class=""><font color="#333333" face="Menlo" class="">        tmp = $ref.split('/').slice(-2);</font></div><div class=""><font color="#333333" face="Menlo" class="">        schema = $ref.indexOf('<a href="http://json-schema.org/draft-04/schema#/'" class="">http://json-schema.org/draft-04/schema#/'</a>) === 0</font></div><div class=""><font color="#333333" face="Menlo" class="">            ? local.swaggerSchemaJson[tmp[0]]</font></div><div class=""><font color="#333333" face="Menlo" class="">            : options.swaggerJson[tmp[0]];</font></div><div class=""><font color="#333333" face="Menlo" class="">        schema = schema && schema[tmp[1]];</font></div><div class=""><font color="#333333" face="Menlo" class="">        test = schema;</font></div><div class=""><font color="#333333" face="Menlo" class="">        local.throwSwaggerError(!test && {</font></div><div class=""><font color="#333333" face="Menlo" class="">            data: data,</font></div><div class=""><font color="#333333" face="Menlo" class="">            errorType: 'schemaDeference',</font></div><div class=""><font color="#333333" face="Menlo" class="">            prefix: options.prefix,</font></div><div class=""><font color="#333333" face="Menlo" class="">            schema: options.schema</font></div><div class=""><font color="#333333" face="Menlo" class="">        });</font></div><div class=""><font color="#333333" face="Menlo" class="">    }</font></div><div class=""><font color="#333333" face="Menlo" class="">    if (options.modeDereference) {</font></div><div class=""><font color="#333333" face="Menlo" class="">        if (options.modeDereferenceDepth > 1) {</font></div><div class=""><font color="#333333" face="Menlo" class="">            schema = local.jsonCopy(schema);</font></div><div class=""><font color="#333333" face="Menlo" class="">            Object.keys(schema.properties || {}).forEach(function (key) {</font></div><div class=""><font color="#333333" face="Menlo" class="">                schema.properties[key] = local.validateBySwaggerSchema({</font></div><div class=""><font color="#333333" face="Menlo" class="">                    // dereference property</font></div><div class=""><font color="#333333" face="Menlo" class="">                    modeDereference: true,</font></div><div class=""><font color="#333333" face="Menlo" class="">                    modeDereferenceDepth: options.modeDereferenceDepth - 1,</font></div><div class=""><font color="#333333" face="Menlo" class="">                    prefix: options.prefix.concat(['properties', key]),</font></div><div class=""><font color="#333333" face="Menlo" class="">                    schema: schema.properties[key],</font></div><div class=""><font color="#333333" face="Menlo" class="">                    swaggerJson: options.swaggerJson</font></div><div class=""><font color="#333333" face="Menlo" class="">                });</font></div><div class=""><font color="#333333" face="Menlo" class="">            });</font></div><div class=""><font color="#333333" face="Menlo" class="">        }</font></div><div class=""><font color="#333333" face="Menlo" class="">        return schema;</font></div><div class=""><font color="#333333" face="Menlo" class="">    }</font></div><div class=""><font color="#333333" face="Menlo" class="">    // validate schema.default</font></div><div class=""><font color="#333333" face="Menlo" class="">    if (options.modeDefault) {</font></div><div class=""><font color="#333333" face="Menlo" class="">        data = schema.default;</font></div><div class=""><font color="#333333" face="Menlo" class="">    }</font></div><div class=""><font color="#333333" face="Menlo" class="">    // validate semanticRequired</font></div><div class=""><font color="#333333" face="Menlo" class="">    test = options.modeDefault ||</font></div><div class=""><font color="#333333" face="Menlo" class="">        !local.isNullOrUndefined(data) ||</font></div><div class=""><font color="#333333" face="Menlo" class="">        schema.required !== true ||</font></div><div class=""><font color="#333333" face="Menlo" class="">        schema['x-swgg-notRequired'];</font></div><div class=""><font color="#333333" face="Menlo" class="">    local.throwSwaggerError(!test && {</font></div><div class=""><font color="#333333" face="Menlo" class="">        data: data,</font></div><div class=""><font color="#333333" face="Menlo" class="">        errorType: 'semanticRequired',</font></div><div class=""><font color="#333333" face="Menlo" class="">        prefix: options.prefix,</font></div><div class=""><font color="#333333" face="Menlo" class="">        schema: schema</font></div><div class=""><font color="#333333" face="Menlo" class="">    });</font></div><div class=""><font color="#333333" face="Menlo" class="">    if (local.isNullOrUndefined(data)) {</font></div><div class=""><font color="#333333" face="Menlo" class="">        return;</font></div><div class=""><font color="#333333" face="Menlo" class="">    }</font></div><div class=""><font color="#333333" face="Menlo" class="">    // validate semanticRequiredArrayItems</font></div><div class=""><font color="#333333" face="Menlo" class="">    test = !options.modeSchema || local.schemaPType(data) !== 'array' ||</font></div><div class=""><font color="#333333" face="Menlo" class="">        (typeof local.schemaPItems(data) === 'object' && local.schemaPItems(data));</font></div><div class=""><font color="#333333" face="Menlo" class="">    local.throwSwaggerError(!test && {</font></div><div class=""><font color="#333333" face="Menlo" class="">        errorType: 'semanticRequiredArrayItems',</font></div><div class=""><font color="#333333" face="Menlo" class="">        prefix: options.prefix,</font></div><div class=""><font color="#333333" face="Menlo" class="">        schema: data</font></div><div class=""><font color="#333333" face="Menlo" class="">    });</font></div><div class=""><font color="#333333" face="Menlo" class="">    // remove readOnly property</font></div><div class=""><font color="#333333" face="Menlo" class="">    if (schema.readOnly) {</font></div><div class=""><font color="#333333" face="Menlo" class="">        delete options.dataReadonlyRemove[0][options.dataReadonlyRemove[1]];</font></div><div class=""><font color="#333333" face="Menlo" class="">    }</font></div><div class=""><font color="#333333" face="Menlo" class="">    // optimization - validate schema.type first</font></div><div class=""><font color="#333333" face="Menlo" class="">    // 5.5.2. type</font></div><div class=""><font color="#333333" face="Menlo" class="">    // <a href="https://swagger.io/docs/specification/data-models/data-types/" class="">https://swagger.io/docs/specification/data-models/data-types/</a></font></div><div class=""><font color="#333333" face="Menlo" class="">    // <a href="https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md#data-types" class="">https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md#data-types</a></font></div><div class=""><font color="#333333" face="Menlo" class="">    switch (local.schemaPType(schema)) {</font></div><div class=""><font color="#333333" face="Menlo" class="">    case 'array':</font></div><div class=""><font color="#333333" face="Menlo" class="">        test = Array.isArray(data);</font></div><div class=""><font color="#333333" face="Menlo" class="">        break;</font></div><div class=""><font color="#333333" face="Menlo" class="">    case 'boolean':</font></div><div class=""><font color="#333333" face="Menlo" class="">        test = typeof data === 'boolean';</font></div><div class=""><font color="#333333" face="Menlo" class="">        break;</font></div><div class=""><font color="#333333" face="Menlo" class="">    case 'file':</font></div><div class=""><font color="#333333" face="Menlo" class="">        test = !options.modeSchema;</font></div><div class=""><font color="#333333" face="Menlo" class="">        break;</font></div><div class=""><font color="#333333" face="Menlo" class="">    case 'integer':</font></div><div class=""><font color="#333333" face="Menlo" class="">        test = Number.isFinite(data) && Math.floor(data) === data;</font></div><div class=""><font color="#333333" face="Menlo" class="">        switch (schema.format) {</font></div><div class=""><font color="#333333" face="Menlo" class="">        case 'int32':</font></div><div class=""><font color="#333333" face="Menlo" class="">            break;</font></div><div class=""><font color="#333333" face="Menlo" class="">        case 'int64':</font></div><div class=""><font color="#333333" face="Menlo" class="">            break;</font></div><div class=""><font color="#333333" face="Menlo" class="">        }</font></div><div class=""><font color="#333333" face="Menlo" class="">        break;</font></div><div class=""><font color="#333333" face="Menlo" class="">    case 'number':</font></div><div class=""><font color="#333333" face="Menlo" class="">        test = Number.isFinite(data);</font></div><div class=""><font color="#333333" face="Menlo" class="">        switch (schema.format) {</font></div><div class=""><font color="#333333" face="Menlo" class="">        case 'double':</font></div><div class=""><font color="#333333" face="Menlo" class="">            break;</font></div><div class=""><font color="#333333" face="Menlo" class="">        case 'float':</font></div><div class=""><font color="#333333" face="Menlo" class="">            break;</font></div><div class=""><font color="#333333" face="Menlo" class="">        }</font></div><div class=""><font color="#333333" face="Menlo" class="">        break;</font></div><div class=""><font color="#333333" face="Menlo" class="">    case 'string':</font></div><div class=""><font color="#333333" face="Menlo" class="">        test = typeof data === 'string' ||</font></div><div class=""><font color="#333333" face="Menlo" class="">            (!options.modeSchema && schema.format === 'binary');</font></div><div class=""><font color="#333333" face="Menlo" class="">        switch (test && !options.modeSchema && schema.format) {</font></div><div class=""><font color="#333333" face="Menlo" class="">        // Clarify 'byte' format #50</font></div><div class=""><font color="#333333" face="Menlo" class="">        // <a href="https://github.com/swagger-api/swagger-spec/issues/50" class="">https://github.com/swagger-api/swagger-spec/issues/50</a></font></div><div class=""><font color="#333333" face="Menlo" class="">        case 'byte':</font></div><div class=""><font color="#333333" face="Menlo" class="">            test = !(/[^\n\r\+\/0-9\=A-Za-z]/).test(data);</font></div><div class=""><font color="#333333" face="Menlo" class="">            break;</font></div><div class=""><font color="#333333" face="Menlo" class="">        case 'date':</font></div><div class=""><font color="#333333" face="Menlo" class="">        case 'date-time':</font></div><div class=""><font color="#333333" face="Menlo" class="">            test = JSON.stringify(new Date(data)) !== 'null';</font></div><div class=""><font color="#333333" face="Menlo" class="">            break;</font></div><div class=""><font color="#333333" face="Menlo" class="">        case 'email':</font></div><div class=""><font color="#333333" face="Menlo" class="">            test = local.regexpEmailValidate.test(data);</font></div><div class=""><font color="#333333" face="Menlo" class="">            break;</font></div><div class=""><font color="#333333" face="Menlo" class="">        case 'json':</font></div><div class=""><font color="#333333" face="Menlo" class="">            test = local.tryCatchOnError(function () {</font></div><div class=""><font color="#333333" face="Menlo" class="">                JSON.parse(data);</font></div><div class=""><font color="#333333" face="Menlo" class="">                return true;</font></div><div class=""><font color="#333333" face="Menlo" class="">            }, local.nop);</font></div><div class=""><font color="#333333" face="Menlo" class="">            break;</font></div><div class=""><font color="#333333" face="Menlo" class="">        case 'phone':</font></div><div class=""><font color="#333333" face="Menlo" class="">            test = local.regexpPhoneValidate.test(data);</font></div><div class=""><font color="#333333" face="Menlo" class="">            break;</font></div><div class=""><font color="#333333" face="Menlo" class="">        }</font></div><div class=""><font color="#333333" face="Menlo" class="">        break;</font></div><div class=""><font color="#333333" face="Menlo" class="">    default:</font></div><div class=""><font color="#333333" face="Menlo" class="">        test = options.modeSchema || typeof data === 'object';</font></div><div class=""><font color="#333333" face="Menlo" class="">        break;</font></div><div class=""><font color="#333333" face="Menlo" class="">    }</font></div><div class=""><font color="#333333" face="Menlo" class="">    local.throwSwaggerError(!test && {</font></div><div class=""><font color="#333333" face="Menlo" class="">        data: data,</font></div><div class=""><font color="#333333" face="Menlo" class="">        errorType: 'itemType',</font></div><div class=""><font color="#333333" face="Menlo" class="">        prefix: options.prefix,</font></div><div class=""><font color="#333333" face="Menlo" class="">        schema: schema,</font></div><div class=""><font color="#333333" face="Menlo" class="">        typeof: typeof data</font></div><div class=""><font color="#333333" face="Menlo" class="">    });</font></div><div class=""><font color="#333333" face="Menlo" class="">    tmp = typeof data;</font></div><div class=""><font color="#333333" face="Menlo" class="">    if (tmp === 'object' && Array.isArray(data)) {</font></div><div class=""><font color="#333333" face="Menlo" class="">        tmp = 'array';</font></div><div class=""><font color="#333333" face="Menlo" class="">    }</font></div><div class=""><font color="#333333" face="Menlo" class="">    switch (tmp) {</font></div><div class=""><font color="#333333" face="Menlo" class="">    // 5.1. Validation keywords for numeric instances (number and integer)</font></div><div class=""><font color="#333333" face="Menlo" class="">    case 'number':</font></div><div class=""><font color="#333333" face="Menlo" class="">        // 5.1.1. multipleOf</font></div><div class=""><font color="#333333" face="Menlo" class="">        test = typeof schema.multipleOf !== 'number' || data % schema.multipleOf === 0;</font></div><div class=""><font color="#333333" face="Menlo" class="">        local.throwSwaggerError(!test && {</font></div><div class=""><font color="#333333" face="Menlo" class="">            data: data,</font></div><div class=""><font color="#333333" face="Menlo" class="">            errorType: 'numberMultipleOf',</font></div><div class=""><font color="#333333" face="Menlo" class="">            prefix: options.prefix,</font></div><div class=""><font color="#333333" face="Menlo" class="">            schema: schema</font></div><div class=""><font color="#333333" face="Menlo" class="">        });</font></div><div class=""><font color="#333333" face="Menlo" class="">        // 5.1.2. maximum and exclusiveMaximum</font></div><div class=""><font color="#333333" face="Menlo" class="">        test = typeof schema.maximum !== 'number' || (schema.exclusiveMaximum</font></div><div class=""><font color="#333333" face="Menlo" class="">            ? data < schema.maximum</font></div><div class=""><font color="#333333" face="Menlo" class="">            : data <= schema.maximum);</font></div><div class=""><font color="#333333" face="Menlo" class="">        local.throwSwaggerError(!test && {</font></div><div class=""><font color="#333333" face="Menlo" class="">            data: data,</font></div><div class=""><font color="#333333" face="Menlo" class="">            errorType: schema.exclusiveMaximum</font></div><div class=""><font color="#333333" face="Menlo" class="">                ? 'numberExclusiveMaximum'</font></div><div class=""><font color="#333333" face="Menlo" class="">                : 'numberMaximum',</font></div><div class=""><font color="#333333" face="Menlo" class="">            prefix: options.prefix,</font></div><div class=""><font color="#333333" face="Menlo" class="">            schema: schema</font></div><div class=""><font color="#333333" face="Menlo" class="">        });</font></div><div class=""><font color="#333333" face="Menlo" class="">        // 5.1.3. minimum and exclusiveMinimum</font></div><div class=""><font color="#333333" face="Menlo" class="">        test = typeof schema.minimum !== 'number' || (schema.exclusiveMinimum</font></div><div class=""><font color="#333333" face="Menlo" class="">            ? data > schema.minimum</font></div><div class=""><font color="#333333" face="Menlo" class="">            : data >= schema.minimum);</font></div><div class=""><font color="#333333" face="Menlo" class="">        local.throwSwaggerError(!test && {</font></div><div class=""><font color="#333333" face="Menlo" class="">            data: data,</font></div><div class=""><font color="#333333" face="Menlo" class="">            errorType: schema.exclusiveMinimum</font></div><div class=""><font color="#333333" face="Menlo" class="">                ? 'numberExclusiveMinimum'</font></div><div class=""><font color="#333333" face="Menlo" class="">                : 'numberMinimum',</font></div><div class=""><font color="#333333" face="Menlo" class="">            prefix: options.prefix,</font></div><div class=""><font color="#333333" face="Menlo" class="">            schema: schema</font></div><div class=""><font color="#333333" face="Menlo" class="">        });</font></div><div class=""><font color="#333333" face="Menlo" class="">        break;</font></div><div class=""><font color="#333333" face="Menlo" class="">    // 5.2. Validation keywords for strings</font></div><div class=""><font color="#333333" face="Menlo" class="">    case 'string':</font></div><div class=""><font color="#333333" face="Menlo" class="">        // 5.2.1. maxLength</font></div><div class=""><font color="#333333" face="Menlo" class="">        test = typeof schema.maxLength !== 'number' || data.length <= schema.maxLength;</font></div><div class=""><font color="#333333" face="Menlo" class="">        local.throwSwaggerError(!test && {</font></div><div class=""><font color="#333333" face="Menlo" class="">            data: data,</font></div><div class=""><font color="#333333" face="Menlo" class="">            errorType: 'stringMaxLength',</font></div><div class=""><font color="#333333" face="Menlo" class="">            prefix: options.prefix,</font></div><div class=""><font color="#333333" face="Menlo" class="">            schema: schema</font></div><div class=""><font color="#333333" face="Menlo" class="">        });</font></div><div class=""><font color="#333333" face="Menlo" class="">        // 5.2.2. minLength</font></div><div class=""><font color="#333333" face="Menlo" class="">        test = typeof schema.minLength !== 'number' || data.length >= schema.minLength;</font></div><div class=""><font color="#333333" face="Menlo" class="">        local.throwSwaggerError(!test && {</font></div><div class=""><font color="#333333" face="Menlo" class="">            data: data,</font></div><div class=""><font color="#333333" face="Menlo" class="">            errorType: 'stringMinLength',</font></div><div class=""><font color="#333333" face="Menlo" class="">            prefix: options.prefix,</font></div><div class=""><font color="#333333" face="Menlo" class="">            schema: schema</font></div><div class=""><font color="#333333" face="Menlo" class="">        });</font></div><div class=""><font color="#333333" face="Menlo" class="">        // 5.2.3. pattern</font></div><div class=""><font color="#333333" face="Menlo" class="">        test = !schema.pattern || new RegExp(schema.pattern).test(data);</font></div><div class=""><font color="#333333" face="Menlo" class="">        local.throwSwaggerError(!test && {</font></div><div class=""><font color="#333333" face="Menlo" class="">            data: data,</font></div><div class=""><font color="#333333" face="Menlo" class="">            errorType: 'stringPattern',</font></div><div class=""><font color="#333333" face="Menlo" class="">            prefix: options.prefix,</font></div><div class=""><font color="#333333" face="Menlo" class="">            schema: schema</font></div><div class=""><font color="#333333" face="Menlo" class="">        });</font></div><div class=""><font color="#333333" face="Menlo" class="">        break;</font></div><div class=""><font color="#333333" face="Menlo" class="">    // 5.3. Validation keywords for arrays</font></div><div class=""><font color="#333333" face="Menlo" class="">    case 'array':</font></div><div class=""><font color="#333333" face="Menlo" class="">        // 5.3.1. additionalItems and items</font></div><div class=""><font color="#333333" face="Menlo" class="">        // swagger disallows array items</font></div><div class=""><font color="#333333" face="Menlo" class="">        data.forEach(function (element, ii) {</font></div><div class=""><font color="#333333" face="Menlo" class="">            // recurse - schema.additionalItems and schema.items</font></div><div class=""><font color="#333333" face="Menlo" class="">            local.validateBySwaggerSchema({</font></div><div class=""><font color="#333333" face="Menlo" class="">                data: element,</font></div><div class=""><font color="#333333" face="Menlo" class="">                dataReadonlyRemove: [dataReadonlyRemove2, ii, dataReadonlyRemove2[ii]],</font></div><div class=""><font color="#333333" face="Menlo" class="">                modeSchema: options.modeSchema,</font></div><div class=""><font color="#333333" face="Menlo" class="">                prefix: options.prefix.concat([ii]),</font></div><div class=""><font color="#333333" face="Menlo" class="">                schema: local.schemaPItems(schema) || schema.additionalItems,</font></div><div class=""><font color="#333333" face="Menlo" class="">                swaggerJson: options.swaggerJson</font></div><div class=""><font color="#333333" face="Menlo" class="">            });</font></div><div class=""><font color="#333333" face="Menlo" class="">        });</font></div><div class=""><font color="#333333" face="Menlo" class="">        // 5.3.2. maxItems</font></div><div class=""><font color="#333333" face="Menlo" class="">        test = typeof schema.maxItems !== 'number' || data.length <= schema.maxItems;</font></div><div class=""><font color="#333333" face="Menlo" class="">        local.throwSwaggerError(!test && {</font></div><div class=""><font color="#333333" face="Menlo" class="">            data: data,</font></div><div class=""><font color="#333333" face="Menlo" class="">            errorType: 'arrayMaxItems',</font></div><div class=""><font color="#333333" face="Menlo" class="">            prefix: options.prefix,</font></div><div class=""><font color="#333333" face="Menlo" class="">            schema: schema</font></div><div class=""><font color="#333333" face="Menlo" class="">        });</font></div><div class=""><font color="#333333" face="Menlo" class="">        // 5.3.3. minItems</font></div><div class=""><font color="#333333" face="Menlo" class="">        test = typeof schema.minItems !== 'number' || data.length >= schema.minItems;</font></div><div class=""><font color="#333333" face="Menlo" class="">        local.throwSwaggerError(!test && {</font></div><div class=""><font color="#333333" face="Menlo" class="">            data: data,</font></div><div class=""><font color="#333333" face="Menlo" class="">            errorType: 'arrayMinItems',</font></div><div class=""><font color="#333333" face="Menlo" class="">            prefix: options.prefix,</font></div><div class=""><font color="#333333" face="Menlo" class="">            schema: schema</font></div><div class=""><font color="#333333" face="Menlo" class="">        });</font></div><div class=""><font color="#333333" face="Menlo" class="">        // 5.3.4. uniqueItems</font></div><div class=""><font color="#333333" face="Menlo" class="">        test = !schema.uniqueItems || data.every(function (element) {</font></div><div class=""><font color="#333333" face="Menlo" class="">            tmp = element;</font></div><div class=""><font color="#333333" face="Menlo" class="">            return data.indexOf(element) === data.lastIndexOf(element);</font></div><div class=""><font color="#333333" face="Menlo" class="">        });</font></div><div class=""><font color="#333333" face="Menlo" class="">        local.throwSwaggerError(!test && {</font></div><div class=""><font color="#333333" face="Menlo" class="">            data: data,</font></div><div class=""><font color="#333333" face="Menlo" class="">            errorType: 'arrayUniqueItems',</font></div><div class=""><font color="#333333" face="Menlo" class="">            prefix: options.prefix,</font></div><div class=""><font color="#333333" face="Menlo" class="">            schema: schema,</font></div><div class=""><font color="#333333" face="Menlo" class="">            tmp: tmp</font></div><div class=""><font color="#333333" face="Menlo" class="">        });</font></div><div class=""><font color="#333333" face="Menlo" class="">        break;</font></div><div class=""><font color="#333333" face="Menlo" class="">    // 5.4. Validation keywords for objects</font></div><div class=""><font color="#333333" face="Menlo" class="">    case 'object':</font></div><div class=""><font color="#333333" face="Menlo" class="">        // 5.4.1. maxProperties</font></div><div class=""><font color="#333333" face="Menlo" class="">        test = typeof schema.maxProperties !== 'number' ||</font></div><div class=""><font color="#333333" face="Menlo" class="">            Object.keys(data).length <= schema.maxProperties;</font></div><div class=""><font color="#333333" face="Menlo" class="">        local.throwSwaggerError(!test && {</font></div><div class=""><font color="#333333" face="Menlo" class="">            data: data,</font></div><div class=""><font color="#333333" face="Menlo" class="">            errorType: 'objectMaxProperties',</font></div><div class=""><font color="#333333" face="Menlo" class="">            prefix: options.prefix,</font></div><div class=""><font color="#333333" face="Menlo" class="">            schema: schema</font></div><div class=""><font color="#333333" face="Menlo" class="">        });</font></div><div class=""><font color="#333333" face="Menlo" class="">        // 5.4.2. minProperties</font></div><div class=""><font color="#333333" face="Menlo" class="">        test = typeof schema.minProperties !== 'number' ||</font></div><div class=""><font color="#333333" face="Menlo" class="">            Object.keys(data).length >= schema.minProperties;</font></div><div class=""><font color="#333333" face="Menlo" class="">        local.throwSwaggerError(!test && {</font></div><div class=""><font color="#333333" face="Menlo" class="">            data: data,</font></div><div class=""><font color="#333333" face="Menlo" class="">            errorType: 'objectMinProperties',</font></div><div class=""><font color="#333333" face="Menlo" class="">            prefix: options.prefix,</font></div><div class=""><font color="#333333" face="Menlo" class="">            schema: schema</font></div><div class=""><font color="#333333" face="Menlo" class="">        });</font></div><div class=""><font color="#333333" face="Menlo" class="">        // 5.4.3. required</font></div><div class=""><font color="#333333" face="Menlo" class="">        local.normalizeValue('list', schema.required).forEach(function (key) {</font></div><div class=""><font color="#333333" face="Menlo" class="">            test = !local.isNullOrUndefined(data[key]);</font></div><div class=""><font color="#333333" face="Menlo" class="">            local.throwSwaggerError(!test && {</font></div><div class=""><font color="#333333" face="Menlo" class="">                data: data,</font></div><div class=""><font color="#333333" face="Menlo" class="">                errorType: 'objectRequired',</font></div><div class=""><font color="#333333" face="Menlo" class="">                key: key,</font></div><div class=""><font color="#333333" face="Menlo" class="">                prefix: options.prefix,</font></div><div class=""><font color="#333333" face="Menlo" class="">                schema: schema</font></div><div class=""><font color="#333333" face="Menlo" class="">            });</font></div><div class=""><font color="#333333" face="Menlo" class="">        });</font></div><div class=""><font color="#333333" face="Menlo" class="">        // 5.4.4. additionalProperties, properties and patternProperties</font></div><div class=""><font color="#333333" face="Menlo" class="">        Object.keys(data).forEach(function (key) {</font></div><div class=""><font color="#333333" face="Menlo" class="">            tmp = null;</font></div><div class=""><font color="#333333" face="Menlo" class="">            if (schema.properties && schema.properties[key]) {</font></div><div class=""><font color="#333333" face="Menlo" class="">                tmp = true;</font></div><div class=""><font color="#333333" face="Menlo" class="">                // recurse - schema.properties</font></div><div class=""><font color="#333333" face="Menlo" class="">                local.validateBySwaggerSchema({</font></div><div class=""><font color="#333333" face="Menlo" class="">                    data: data[key],</font></div><div class=""><font color="#333333" face="Menlo" class="">                    dataReadonlyRemove: [</font></div><div class=""><font color="#333333" face="Menlo" class="">                        dataReadonlyRemove2,</font></div><div class=""><font color="#333333" face="Menlo" class="">                        key,</font></div><div class=""><font color="#333333" face="Menlo" class="">                        dataReadonlyRemove2[key]</font></div><div class=""><font color="#333333" face="Menlo" class="">                    ],</font></div><div class=""><font color="#333333" face="Menlo" class="">                    modeSchema: options.modeSchema,</font></div><div class=""><font color="#333333" face="Menlo" class="">                    prefix: options.prefix.concat([key]),</font></div><div class=""><font color="#333333" face="Menlo" class="">                    schema: schema.properties[key],</font></div><div class=""><font color="#333333" face="Menlo" class="">                    swaggerJson: options.swaggerJson</font></div><div class=""><font color="#333333" face="Menlo" class="">                });</font></div><div class=""><font color="#333333" face="Menlo" class="">            }</font></div><div class=""><font color="#333333" face="Menlo" class="">            Object.keys(schema.patternProperties || {}).forEach(function (rgx) {</font></div><div class=""><font color="#333333" face="Menlo" class="">                if (new RegExp(rgx).test(key)) {</font></div><div class=""><font color="#333333" face="Menlo" class="">                    tmp = true;</font></div><div class=""><font color="#333333" face="Menlo" class="">                    // recurse - schema.patternProperties</font></div><div class=""><font color="#333333" face="Menlo" class="">                    local.validateBySwaggerSchema({</font></div><div class=""><font color="#333333" face="Menlo" class="">                        data: data[key],</font></div><div class=""><font color="#333333" face="Menlo" class="">                        modeSchema: options.modeSchema,</font></div><div class=""><font color="#333333" face="Menlo" class="">                        prefix: options.prefix.concat([key]),</font></div><div class=""><font color="#333333" face="Menlo" class="">                        schema: schema.patternProperties[rgx],</font></div><div class=""><font color="#333333" face="Menlo" class="">                        swaggerJson: options.swaggerJson</font></div><div class=""><font color="#333333" face="Menlo" class="">                    });</font></div><div class=""><font color="#333333" face="Menlo" class="">                }</font></div><div class=""><font color="#333333" face="Menlo" class="">            });</font></div><div class=""><font color="#333333" face="Menlo" class="">/*</font></div><div class=""><font color="#333333" face="Menlo" class="">* validate</font></div><div class=""><font color="#333333" face="Menlo" class="">* 5.4.4.4. If "additionalProperties" has boolean value false</font></div><div class=""><font color="#333333" face="Menlo" class="">*</font></div><div class=""><font color="#333333" face="Menlo" class="">* In this case, validation of the instance depends on the property set of</font></div><div class=""><font color="#333333" face="Menlo" class="">* "properties" and "patternProperties". In this section, the property names of</font></div><div class=""><font color="#333333" face="Menlo" class="">* "patternProperties" will be called regexes for convenience.</font></div><div class=""><font color="#333333" face="Menlo" class="">*</font></div><div class=""><font color="#333333" face="Menlo" class="">* The first step is to collect the following sets:</font></div><div class=""><font color="#333333" face="Menlo" class="">*</font></div><div class=""><font color="#333333" face="Menlo" class="">* s</font></div><div class=""><font color="#333333" face="Menlo" class="">* The property set of the instance to validate.</font></div><div class=""><font color="#333333" face="Menlo" class="">* p</font></div><div class=""><font color="#333333" face="Menlo" class="">* The property set from "properties".</font></div><div class=""><font color="#333333" face="Menlo" class="">* pp</font></div><div class=""><font color="#333333" face="Menlo" class="">* The property set from "patternProperties".</font></div><div class=""><font color="#333333" face="Menlo" class="">* Having collected these three sets, the process is as follows:</font></div><div class=""><font color="#333333" face="Menlo" class="">*</font></div><div class=""><font color="#333333" face="Menlo" class="">* remove from "s" all elements of "p", if any;</font></div><div class=""><font color="#333333" face="Menlo" class="">* for each regex in "pp", remove all elements of "s" which this regex matches.</font></div><div class=""><font color="#333333" face="Menlo" class="">* Validation of the instance succeeds if, after these two steps, set "s" is empty.</font></div><div class=""><font color="#333333" face="Menlo" class="">*/</font></div><div class=""><font color="#333333" face="Menlo" class="">            test = tmp || schema.additionalProperties !== false;</font></div><div class=""><font color="#333333" face="Menlo" class="">            local.throwSwaggerError(!test && {</font></div><div class=""><font color="#333333" face="Menlo" class="">                data: data,</font></div><div class=""><font color="#333333" face="Menlo" class="">                errorType: 'objectAdditionalProperties',</font></div><div class=""><font color="#333333" face="Menlo" class="">                key: key,</font></div><div class=""><font color="#333333" face="Menlo" class="">                prefix: options.prefix,</font></div><div class=""><font color="#333333" face="Menlo" class="">                schema: schema</font></div><div class=""><font color="#333333" face="Menlo" class="">            });</font></div><div class=""><font color="#333333" face="Menlo" class="">            // recurse - schema.additionalProperties</font></div><div class=""><font color="#333333" face="Menlo" class="">            local.validateBySwaggerSchema({</font></div><div class=""><font color="#333333" face="Menlo" class="">                data: data[key],</font></div><div class=""><font color="#333333" face="Menlo" class="">                modeSchema: options.modeSchema,</font></div><div class=""><font color="#333333" face="Menlo" class="">                prefix: options.prefix.concat([key]),</font></div><div class=""><font color="#333333" face="Menlo" class="">                schema: schema.additionalProperties,</font></div><div class=""><font color="#333333" face="Menlo" class="">                swaggerJson: options.swaggerJson</font></div><div class=""><font color="#333333" face="Menlo" class="">            });</font></div><div class=""><font color="#333333" face="Menlo" class="">        });</font></div><div class=""><font color="#333333" face="Menlo" class="">        // 5.4.5. dependencies</font></div><div class=""><font color="#333333" face="Menlo" class="">        Object.keys(schema.dependencies || {}).forEach(function (key) {</font></div><div class=""><font color="#333333" face="Menlo" class="">            if (local.isNullOrUndefined(data[key])) {</font></div><div class=""><font color="#333333" face="Menlo" class="">                return;</font></div><div class=""><font color="#333333" face="Menlo" class="">            }</font></div><div class=""><font color="#333333" face="Menlo" class="">            // 5.4.5.2.1. Schema dependencies</font></div><div class=""><font color="#333333" face="Menlo" class="">            // recurse - schema.dependencies</font></div><div class=""><font color="#333333" face="Menlo" class="">            local.validateBySwaggerSchema({</font></div><div class=""><font color="#333333" face="Menlo" class="">                data: data[key],</font></div><div class=""><font color="#333333" face="Menlo" class="">                modeSchema: options.modeSchema,</font></div><div class=""><font color="#333333" face="Menlo" class="">                prefix: options.prefix.concat([key]),</font></div><div class=""><font color="#333333" face="Menlo" class="">                schema: schema.dependencies[key],</font></div><div class=""><font color="#333333" face="Menlo" class="">                swaggerJson: options.swaggerJson</font></div><div class=""><font color="#333333" face="Menlo" class="">            });</font></div><div class=""><font color="#333333" face="Menlo" class="">            // 5.4.5.2.2. Property dependencies</font></div><div class=""><font color="#333333" face="Menlo" class="">            local.normalizeValue('list', schema.dependencies[key]).every(function (key2) {</font></div><div class=""><font color="#333333" face="Menlo" class="">                test = !local.isNullOrUndefined(data[key2]);</font></div><div class=""><font color="#333333" face="Menlo" class="">                local.throwSwaggerError(!test && {</font></div><div class=""><font color="#333333" face="Menlo" class="">                    data: data,</font></div><div class=""><font color="#333333" face="Menlo" class="">                    errorType: 'objectDependencies',</font></div><div class=""><font color="#333333" face="Menlo" class="">                    key: key,</font></div><div class=""><font color="#333333" face="Menlo" class="">                    key2: key2,</font></div><div class=""><font color="#333333" face="Menlo" class="">                    prefix: options.prefix,</font></div><div class=""><font color="#333333" face="Menlo" class="">                    schema: schema</font></div><div class=""><font color="#333333" face="Menlo" class="">                });</font></div><div class=""><font color="#333333" face="Menlo" class="">            });</font></div><div class=""><font color="#333333" face="Menlo" class="">        });</font></div><div class=""><font color="#333333" face="Menlo" class="">        break;</font></div><div class=""><font color="#333333" face="Menlo" class="">    }</font></div><div class=""><font color="#333333" face="Menlo" class="">    // 5.5. Validation keywords for any instance type</font></div><div class=""><font color="#333333" face="Menlo" class="">    // 5.5.1. enum</font></div><div class=""><font color="#333333" face="Menlo" class="">    tmp = schema.enum || (!options.modeSchema && (local.schemaPItems(schema) || {}).enum);</font></div><div class=""><font color="#333333" face="Menlo" class="">    test = !tmp || (Array.isArray(data)</font></div><div class=""><font color="#333333" face="Menlo" class="">        ? data</font></div><div class=""><font color="#333333" face="Menlo" class="">        : [data]).every(function (element) {</font></div><div class=""><font color="#333333" face="Menlo" class="">        return tmp.indexOf(element) >= 0;</font></div><div class=""><font color="#333333" face="Menlo" class="">    });</font></div><div class=""><font color="#333333" face="Menlo" class="">    local.throwSwaggerError(!test && {</font></div><div class=""><font color="#333333" face="Menlo" class="">        data: data,</font></div><div class=""><font color="#333333" face="Menlo" class="">        errorType: 'itemEnum',</font></div><div class=""><font color="#333333" face="Menlo" class="">        prefix: options.prefix,</font></div><div class=""><font color="#333333" face="Menlo" class="">        schema: schema,</font></div><div class=""><font color="#333333" face="Menlo" class="">        tmp: tmp</font></div><div class=""><font color="#333333" face="Menlo" class="">    });</font></div><div class=""><font color="#333333" face="Menlo" class="">    // 5.5.2. type</font></div><div class=""><font color="#333333" face="Menlo" class="">    local.nop();</font></div><div class=""><font color="#333333" face="Menlo" class="">    // 5.5.3. allOf</font></div><div class=""><font color="#333333" face="Menlo" class="">    (schema.allOf || []).forEach(function (element) {</font></div><div class=""><font color="#333333" face="Menlo" class="">        // recurse - schema.allOf</font></div><div class=""><font color="#333333" face="Menlo" class="">        local.validateBySwaggerSchema({</font></div><div class=""><font color="#333333" face="Menlo" class="">            data: data,</font></div><div class=""><font color="#333333" face="Menlo" class="">            prefix: options.prefix,</font></div><div class=""><font color="#333333" face="Menlo" class="">            modeSchema: options.modeSchema,</font></div><div class=""><font color="#333333" face="Menlo" class="">            schema: element,</font></div><div class=""><font color="#333333" face="Menlo" class="">            swaggerJson: options.swaggerJson</font></div><div class=""><font color="#333333" face="Menlo" class="">        });</font></div><div class=""><font color="#333333" face="Menlo" class="">    });</font></div><div class=""><font color="#333333" face="Menlo" class="">    // 5.5.4. anyOf</font></div><div class=""><font color="#333333" face="Menlo" class="">    tmp = null;</font></div><div class=""><font color="#333333" face="Menlo" class="">    test = !schema.anyOf || schema.anyOf.some(function (element) {</font></div><div class=""><font color="#333333" face="Menlo" class="">        local.tryCatchOnError(function () {</font></div><div class=""><font color="#333333" face="Menlo" class="">            // recurse - schema.anyOf</font></div><div class=""><font color="#333333" face="Menlo" class="">            local.validateBySwaggerSchema({</font></div><div class=""><font color="#333333" face="Menlo" class="">                data: data,</font></div><div class=""><font color="#333333" face="Menlo" class="">                modeSchema: options.modeSchema,</font></div><div class=""><font color="#333333" face="Menlo" class="">                prefix: options.prefix,</font></div><div class=""><font color="#333333" face="Menlo" class="">                schema: element,</font></div><div class=""><font color="#333333" face="Menlo" class="">                swaggerJson: options.swaggerJson</font></div><div class=""><font color="#333333" face="Menlo" class="">            });</font></div><div class=""><font color="#333333" face="Menlo" class="">            return true;</font></div><div class=""><font color="#333333" face="Menlo" class="">        }, local.nop);</font></div><div class=""><font color="#333333" face="Menlo" class="">        tmp = tmp || local.utility2._debugTryCatchError;</font></div><div class=""><font color="#333333" face="Menlo" class="">        return !tmp;</font></div><div class=""><font color="#333333" face="Menlo" class="">    });</font></div><div class=""><font color="#333333" face="Menlo" class="">    local.throwSwaggerError(!test && {</font></div><div class=""><font color="#333333" face="Menlo" class="">        data: data,</font></div><div class=""><font color="#333333" face="Menlo" class="">        errorType: 'itemOneOf',</font></div><div class=""><font color="#333333" face="Menlo" class="">        prefix: options.prefix,</font></div><div class=""><font color="#333333" face="Menlo" class="">        schema: schema,</font></div><div class=""><font color="#333333" face="Menlo" class="">        tmp: tmp</font></div><div class=""><font color="#333333" face="Menlo" class="">    });</font></div><div class=""><font color="#333333" face="Menlo" class="">    // 5.5.5. oneOf</font></div><div class=""><font color="#333333" face="Menlo" class="">    tmp = !schema.oneOf</font></div><div class=""><font color="#333333" face="Menlo" class="">        ? 1</font></div><div class=""><font color="#333333" face="Menlo" class="">        : 0;</font></div><div class=""><font color="#333333" face="Menlo" class="">    (schema.oneOf || []).some(function (element) {</font></div><div class=""><font color="#333333" face="Menlo" class="">        local.tryCatchOnError(function () {</font></div><div class=""><font color="#333333" face="Menlo" class="">            // recurse - schema.oneOf</font></div><div class=""><font color="#333333" face="Menlo" class="">            local.validateBySwaggerSchema({</font></div><div class=""><font color="#333333" face="Menlo" class="">                data: data,</font></div><div class=""><font color="#333333" face="Menlo" class="">                modeSchema: options.modeSchema,</font></div><div class=""><font color="#333333" face="Menlo" class="">                prefix: options.prefix,</font></div><div class=""><font color="#333333" face="Menlo" class="">                schema: element,</font></div><div class=""><font color="#333333" face="Menlo" class="">                swaggerJson: options.swaggerJson</font></div><div class=""><font color="#333333" face="Menlo" class="">            });</font></div><div class=""><font color="#333333" face="Menlo" class="">            tmp += 1;</font></div><div class=""><font color="#333333" face="Menlo" class="">        }, local.nop);</font></div><div class=""><font color="#333333" face="Menlo" class="">        return tmp > 1;</font></div><div class=""><font color="#333333" face="Menlo" class="">    });</font></div><div class=""><font color="#333333" face="Menlo" class="">    test = tmp === 1;</font></div><div class=""><font color="#333333" face="Menlo" class="">    local.throwSwaggerError(!test && {</font></div><div class=""><font color="#333333" face="Menlo" class="">        data: data,</font></div><div class=""><font color="#333333" face="Menlo" class="">        errorType: 'itemOneOf',</font></div><div class=""><font color="#333333" face="Menlo" class="">        prefix: options.prefix,</font></div><div class=""><font color="#333333" face="Menlo" class="">        schema: schema,</font></div><div class=""><font color="#333333" face="Menlo" class="">        tmp: tmp</font></div><div class=""><font color="#333333" face="Menlo" class="">    });</font></div><div class=""><font color="#333333" face="Menlo" class="">    // 5.5.6. not</font></div><div class=""><font color="#333333" face="Menlo" class="">    test = !schema.not || !local.tryCatchOnError(function () {</font></div><div class=""><font color="#333333" face="Menlo" class="">        // recurse - schema.not</font></div><div class=""><font color="#333333" face="Menlo" class="">        local.validateBySwaggerSchema({</font></div><div class=""><font color="#333333" face="Menlo" class="">            data: data,</font></div><div class=""><font color="#333333" face="Menlo" class="">            modeSchema: options.modeSchema,</font></div><div class=""><font color="#333333" face="Menlo" class="">            prefix: options.prefix,</font></div><div class=""><font color="#333333" face="Menlo" class="">            schema: schema.not,</font></div><div class=""><font color="#333333" face="Menlo" class="">            swaggerJson: options.swaggerJson</font></div><div class=""><font color="#333333" face="Menlo" class="">        });</font></div><div class=""><font color="#333333" face="Menlo" class="">        return true;</font></div><div class=""><font color="#333333" face="Menlo" class="">    }, local.nop);</font></div><div class=""><font color="#333333" face="Menlo" class="">    local.throwSwaggerError(!test && {</font></div><div class=""><font color="#333333" face="Menlo" class="">        data: data,</font></div><div class=""><font color="#333333" face="Menlo" class="">        errorType: 'itemNot',</font></div><div class=""><font color="#333333" face="Menlo" class="">        prefix: options.prefix,</font></div><div class=""><font color="#333333" face="Menlo" class="">        schema: schema</font></div><div class=""><font color="#333333" face="Menlo" class="">    });</font></div><div class=""><font color="#333333" face="Menlo" class="">    // 5.5.7. definitions</font></div><div class=""><font color="#333333" face="Menlo" class="">    local.nop();</font></div><div class=""><font color="#333333" face="Menlo" class="">    // validate data.$ref</font></div><div class=""><font color="#333333" face="Menlo" class="">    if (schema === local.swaggerSchemaJson.definitions.jsonReference) {</font></div><div class=""><font color="#333333" face="Menlo" class="">        local.validateBySwaggerSchema({</font></div><div class=""><font color="#333333" face="Menlo" class="">            modeDereference: true,</font></div><div class=""><font color="#333333" face="Menlo" class="">            modeSchema: options.modeSchema,</font></div><div class=""><font color="#333333" face="Menlo" class="">            prefix: options.prefix,</font></div><div class=""><font color="#333333" face="Menlo" class="">            schema: data,</font></div><div class=""><font color="#333333" face="Menlo" class="">            swaggerJson: options.swaggerJson</font></div><div class=""><font color="#333333" face="Menlo" class="">        });</font></div><div class=""><font color="#333333" face="Menlo" class="">    }</font></div><div class=""><font color="#333333" face="Menlo" class="">    return schema;</font></div><div class=""><font color="#333333" face="Menlo" class="">};</font></div></div><div class=""><br class=""></div><div class=""><font color="#333333" face="Menlo" class="">```</font></div><div class=""><font face="Menlo" class=""><br class=""></font></div><div class=""><font face="Menlo" class="">```javascript</font></div><div class=""><font face="Menlo" class="">/*</font></div><div class=""><font face="Menlo" class=""> * output from running code inside browser-console</font></div><div class=""><font face="Menlo" class=""> */</font></div><div class=""><div class=""><font face="Menlo" class="">var mySchema = {</font></div><div class=""><font face="Menlo" class="">    required: ['myBoolean'],</font></div><div class=""><font face="Menlo" class="">    properties: {</font></div><div class=""><font face="Menlo" class="">        myArrayOfStrings: { items: { type: 'string' }, type: 'array' },</font></div><div class=""><font face="Menlo" class="">        myBoolean: { type: 'boolean' },</font></div><div class=""><font face="Menlo" class="">        myNumber: { type: 'number' },</font></div><div class=""><font face="Menlo" class="">        myString: { enum: ['hello world', 'bye world'], type: 'string' }</font></div><div class=""><font face="Menlo" class="">    }</font></div><div class=""><font face="Menlo" class="">};</font></div><div class=""><font face="Menlo" class=""><br class=""></font></div><div class=""><font face="Menlo" class="">undefined</font></div><div class=""><font face="Menlo" class=""><br class=""></font></div><div class=""><font face="Menlo" class="">local.validateBySwaggerSchema({</font></div><div class=""><font face="Menlo" class="">    data: {</font></div><div class=""><font face="Menlo" class="">        myArrayOfStrings: ['foo', 'bar'],</font></div><div class=""><font face="Menlo" class="">        myBoolean: false,</font></div><div class=""><font face="Menlo" class="">        myString: 'hello world'</font></div><div class=""><font face="Menlo" class="">    },</font></div><div class=""><font face="Menlo" class="">    prefix: ['myData'],</font></div><div class=""><font face="Menlo" class="">    schema: mySchema</font></div><div class=""><font face="Menlo" class="">});</font></div><div class=""><font face="Menlo" class=""><br class=""></font></div><div class=""><font face="Menlo" class="">{required: Array(1), properties: {…}}</font></div><div class=""><font face="Menlo" class=""><br class=""></font></div><div class=""><font face="Menlo" class="">local.validateBySwaggerSchema({</font></div><div class=""><font face="Menlo" class="">    data: {</font></div><div class=""><font face="Menlo" class="">        myArrayOfStrings: [1, 2],</font></div><div class=""><font face="Menlo" class="">        myBoolean: false</font></div><div class=""><font face="Menlo" class="">    },</font></div><div class=""><font face="Menlo" class="">    prefix: ['myData'],</font></div><div class=""><font face="Menlo" class="">    schema: mySchema</font></div><div class=""><font face="Menlo" class="">});</font></div><div class=""><font face="Menlo" class=""><br class=""></font></div><div class=""><font face="Menlo" class="">assets.utility2.rollup.js:26060 Uncaught Error: error.itemType - value myData["myArrayOfStrings"][0] = 1 is not a valid string</font></div><div class=""><font face="Menlo" class="">    at Object.local.throwSwaggerError (assets.utility2.rollup.js:26048)</font></div><div class=""><font face="Menlo" class="">    at Object.local.validateBySwaggerSchema (assets.utility2.rollup.js:27017)</font></div><div class=""><font face="Menlo" class="">    at assets.utility2.rollup.js:27097</font></div><div class=""><font face="Menlo" class="">    at Array.forEach (<anonymous>)</font></div><div class=""><font face="Menlo" class="">    at Object.local.validateBySwaggerSchema (assets.utility2.rollup.js:27095)</font></div><div class=""><font face="Menlo" class="">    at assets.utility2.rollup.js:27172</font></div><div class=""><font face="Menlo" class="">    at Array.forEach (<anonymous>)</font></div><div class=""><font face="Menlo" class="">    at Object.local.validateBySwaggerSchema (assets.utility2.rollup.js:27167)</font></div><div class=""><font face="Menlo" class="">    at <anonymous>:2:7</font></div><div class=""><font face="Menlo" class="">local.throwSwaggerError @ assets.utility2.rollup.js:26048</font></div><div class=""><font face="Menlo" class="">local.validateBySwaggerSchema @ assets.utility2.rollup.js:27017</font></div><div class=""><font face="Menlo" class="">(anonymous) @ assets.utility2.rollup.js:27097</font></div><div class=""><font face="Menlo" class="">local.validateBySwaggerSchema @ assets.utility2.rollup.js:27095</font></div><div class=""><font face="Menlo" class="">(anonymous) @ assets.utility2.rollup.js:27172</font></div><div class=""><font face="Menlo" class="">local.validateBySwaggerSchema @ assets.utility2.rollup.js:27167</font></div><div class=""><font face="Menlo" class="">(anonymous) @ VM341:2</font></div><div class=""><font face="Menlo" class=""><br class=""></font></div><div class=""><font face="Menlo" class="">local.validateBySwaggerSchema({</font></div><div class=""><font face="Menlo" class="">    data: {</font></div><div class=""><font face="Menlo" class="">        myArrayOfStrings: ['foo', 'bar'],</font></div><div class=""><font face="Menlo" class="">        myBoolean: null</font></div><div class=""><font face="Menlo" class="">    },</font></div><div class=""><font face="Menlo" class="">    prefix: ['myData'],</font></div><div class=""><font face="Menlo" class="">    schema: mySchema</font></div><div class=""><font face="Menlo" class="">});</font></div><div class=""><font face="Menlo" class=""><br class=""></font></div><div class=""><font face="Menlo" class="">assets.utility2.rollup.js:26060 Uncaught Error: error.objectRequired - object myData = {"myArrayOfStrings":["foo","bar"],"myBoolean":null} must have property "myBoolean"</font></div><div class=""><font face="Menlo" class="">    at Object.local.throwSwaggerError (assets.utility2.rollup.js:26048)</font></div><div class=""><font face="Menlo" class="">    at assets.utility2.rollup.js:27158</font></div><div class=""><font face="Menlo" class="">    at Array.forEach (<anonymous>)</font></div><div class=""><font face="Menlo" class="">    at Object.local.validateBySwaggerSchema (assets.utility2.rollup.js:27156)</font></div><div class=""><font face="Menlo" class="">    at <anonymous>:2:7</font></div><div class=""><font face="Menlo" class="">local.throwSwaggerError @ assets.utility2.rollup.js:26048</font></div><div class=""><font face="Menlo" class="">(anonymous) @ assets.utility2.rollup.js:27158</font></div><div class=""><font face="Menlo" class="">local.validateBySwaggerSchema @ assets.utility2.rollup.js:27156</font></div><div class=""><font face="Menlo" class="">(anonymous) @ VM343:2</font></div><div class=""><font face="Menlo" class=""><br class=""></font></div><div class=""><font face="Menlo" class="">local.validateBySwaggerSchema({</font></div><div class=""><font face="Menlo" class="">    data: {</font></div><div class=""><font face="Menlo" class="">        myBoolean: false,</font></div><div class=""><font face="Menlo" class="">        myString: 'hello undefined'</font></div><div class=""><font face="Menlo" class="">    },</font></div><div class=""><font face="Menlo" class="">    prefix: ['myData'],</font></div><div class=""><font face="Menlo" class="">    schema: mySchema</font></div><div class=""><font face="Menlo" class="">});</font></div><div class=""><font face="Menlo" class=""><br class=""></font></div><div class=""><font face="Menlo" class="">assets.utility2.rollup.js:26060 Uncaught Error: error.itemEnum - string myData["myString"] = "hello undefined" can only have items from the list ["hello world","bye world"]</font></div><div class=""><font face="Menlo" class="">    at Object.local.throwSwaggerError (assets.utility2.rollup.js:26048)</font></div><div class=""><font face="Menlo" class="">    at Object.local.validateBySwaggerSchema (assets.utility2.rollup.js:27274)</font></div><div class=""><font face="Menlo" class="">    at assets.utility2.rollup.js:27172</font></div><div class=""><font face="Menlo" class="">    at Array.forEach (<anonymous>)</font></div><div class=""><font face="Menlo" class="">    at Object.local.validateBySwaggerSchema (assets.utility2.rollup.js:27167)</font></div><div class=""><font face="Menlo" class="">    at <anonymous>:2:7</font></div><div class=""><font face="Menlo" class="">local.throwSwaggerError @ assets.utility2.rollup.js:26048</font></div><div class=""><font face="Menlo" class="">local.validateBySwaggerSchema @ assets.utility2.rollup.js:27274</font></div><div class=""><font face="Menlo" class="">(anonymous) @ assets.utility2.rollup.js:27172</font></div><div class=""><font face="Menlo" class="">local.validateBySwaggerSchema @ assets.utility2.rollup.js:27167</font></div><div class=""><font face="Menlo" class="">(anonymous) @ VM345:2</font></div></div><div class=""><font face="Menlo" class="">```</font></div></div><br class=""><div><blockquote type="cite" class=""><div class="">On Feb 18, 2018, at 9:42 AM, Jordan Harband <<a href="mailto:ljharb@gmail.com" class="">ljharb@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">Your proposal is conceptually the same as a labelled break statement (ie, GOTO); if you want to follow the advice to avoid labels, I suspect it would apply to your proposal as well.</div><div class="gmail_extra"><br class=""><div class="gmail_quote">On Sat, Feb 17, 2018 at 4:44 PM, 李白|字一日 <span dir="ltr" class=""><<a href="mailto:calidion@gmail.com" target="_blank" class="">calidion@gmail.com</a>></span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="">you can simply put these value handler pairs into an array.<div class=""><br class=""></div><div class=""><div style="background-color:rgb(30,30,30);font-family:"Droid Sans Mono","Courier New",monospace,"Droid Sans Fallback";font-weight:normal;font-size:14px;line-height:19px;white-space:pre-wrap" class=""><div class=""><br class=""></div><div style="color:rgb(212,212,212)" class=""><span style="color:rgb(86,156,214)" class="">const</span><span style="color:rgb(212,212,212)" class=""> </span><span style="color:rgb(156,220,254)" class="">a</span><span style="color:rgb(212,212,212)" class=""> </span><span style="color:rgb(212,212,212)" class="">=</span><span style="color:rgb(212,212,212)" class=""> [[</span><span style="color:rgb(181,206,168)" class="">0</span><span style="color:rgb(212,212,212)" class="">, </span><span style="color:rgb(86,156,214)" class="">function</span><span style="color:rgb(212,212,212)" class="">(){}], [</span><span style="color:rgb(181,206,168)" class="">1</span><span style="color:rgb(212,212,212)" class="">, </span><span style="color:rgb(86,156,214)" class="">function</span><span style="color:rgb(212,212,212)" class="">(){}]];</span></div><div style="color:rgb(212,212,212)" class=""><span style="color:rgb(86,156,214)" class="">let</span><span style="color:rgb(212,212,212)" class=""> </span><span style="color:rgb(156,220,254)" class="">i</span><span style="color:rgb(212,212,212)" class=""> </span><span style="color:rgb(212,212,212)" class="">=</span><span style="color:rgb(212,212,212)" class=""> </span><span style="color:rgb(181,206,168)" class="">0</span><span style="color:rgb(212,212,212)" class="">;</span></div><font color="#d4d4d4" class=""><br class=""></font><div style="color:rgb(212,212,212)" class=""><span style="color:rgb(197,134,192)" class="">while</span><span style="color:rgb(212,212,212)" class=""> (</span><span style="color:rgb(156,220,254)" class="">a</span><span style="color:rgb(212,212,212)" class="">[</span><span style="color:rgb(156,220,254)" class="">i</span><span style="color:rgb(212,212,212)" class="">++</span><span style="color:rgb(212,212,212)" class="">][</span><span style="color:rgb(181,206,168)" class="">0</span><span style="color:rgb(212,212,212)" class="">]) {</span></div><div style="color:rgb(212,212,212)" class=""><span style="color:rgb(212,212,212)" class="">  </span><span style="color:rgb(156,220,254)" class="">a</span><span style="color:rgb(212,212,212)" class="">[</span><span style="color:rgb(156,220,254)" class="">i</span><span style="color:rgb(212,212,212)" class=""> </span><span style="color:rgb(212,212,212)" class="">-</span><span style="color:rgb(212,212,212)" class=""> </span><span style="color:rgb(181,206,168)" class="">1</span><span style="color:rgb(212,212,212)" class="">][</span><span style="color:rgb(181,206,168)" class="">1</span><span style="color:rgb(212,212,212)" class="">]()</span></div><div style="color:rgb(212,212,212)" class=""><span style="color:rgb(212,212,212)" class="">  </span><span style="color:rgb(197,134,192)" class="">break</span><span style="color:rgb(212,212,212)" class="">;</span></div><div style="color:rgb(212,212,212)" class=""><span style="color:rgb(212,212,212)" class="">}</span></div></div><br class=""></div></div><div class="gmail_extra"><br class=""><div class="gmail_quote"><div class=""><div class="h5">2018-02-18 5:58 GMT+08:00 sagiv ben giat <span dir="ltr" class=""><<a href="mailto:sagiv.bengiat@gmail.com" target="_blank" class="">sagiv.bengiat@gmail.com</a>></span>:<br class=""></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class=""><div class="h5"><div dir="ltr" class=""><span class="">> 

<span style="color:rgb(51,51,51);font-family:Georgia,"Times New Roman",Times,serif;font-size:16px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline" class="">What kind of argument is that? ESlint isn't a JavaScript runtime, it is fully configurable, and I don't see how it's at all relevant.</span> <div class=""><br class=""></div></span><div class="">I know ESLint can be configured, it was just an example for how `label`  statements are considered as poor design of code.</div><div class=""><br class=""></div><div class=""><div class=""><div class="m_4124491056283685345m_-8210242143068756002gmail_signature" data-smartmail="gmail_signature"><div dir="ltr" class=""><div class=""><div dir="ltr" class=""><div class=""><div dir="ltr" class=""><div class=""><div dir="ltr" class=""><div style="text-align:left" class=""><b class=""><br class=""></b></div><div style="text-align:left" class=""><b class=""><br class=""></b></div><div style="text-align:left" class=""><b class="">Sagiv B.G</b></div></div></div></div></div></div></div></div></div></div>
</div></div>
<br class=""></div></div><span class="">______________________________<wbr class="">_________________<br class="">
es-discuss mailing list<br class="">
<a href="mailto:es-discuss@mozilla.org" target="_blank" class="">es-discuss@mozilla.org</a><br class="">
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank" class="">https://mail.mozilla.org/listi<wbr class="">nfo/es-discuss</a><br class="">
<br class=""></span></blockquote></div><br class=""></div>
<br class="">______________________________<wbr class="">_________________<br class="">
es-discuss mailing list<br class="">
<a href="mailto:es-discuss@mozilla.org" class="">es-discuss@mozilla.org</a><br class="">
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank" class="">https://mail.mozilla.org/<wbr class="">listinfo/es-discuss</a><br class="">
<br class=""></blockquote></div><br class=""></div>
_______________________________________________<br class="">es-discuss mailing list<br class=""><a href="mailto:es-discuss@mozilla.org" class="">es-discuss@mozilla.org</a><br class="">https://mail.mozilla.org/listinfo/es-discuss<br class=""></div></blockquote></div><br class=""></body></html>