Skip to content

Instantly share code, notes, and snippets.

@magopian
Created Mar 11, 2016
Embed
What would you like to do?
requirebin sketch
// require() some stuff from npm (like you were using browserify)
// and then hit Run Code to run it on the right
var Validator = require('jsonschema').Validator;
var v = new Validator();
var schema = { "allOf" : [
{"type": "boolean"},
{"type": "string"}
]}
console.log(v.validate("foobar", schema));
require=function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({1:[function(require,module,exports){"use strict";var helpers=require("./helpers");var ValidatorResult=helpers.ValidatorResult;var SchemaError=helpers.SchemaError;var attribute={};attribute.ignoreProperties={id:true,"default":true,description:true,title:true,exclusiveMinimum:true,exclusiveMaximum:true,additionalItems:true,$schema:true,$ref:true,"extends":true};var validators=attribute.validators={};validators.type=function validateType(instance,schema,options,ctx){if(instance===undefined){return null}var result=new ValidatorResult(instance,schema,options,ctx);var types=schema.type instanceof Array?schema.type:[schema.type];if(!types.some(this.testType.bind(this,instance,schema,options,ctx))){var list=types.map(function(v){return v.id&&"<"+v.id+">"||v+""});result.addError({name:"type",argument:list,message:"is not of a type(s) "+list})}return result};function testSchema(instance,options,ctx,schema){return this.validateSchema(instance,schema,options,ctx).valid}validators.anyOf=function validateAnyOf(instance,schema,options,ctx){if(instance===undefined){return null}var result=new ValidatorResult(instance,schema,options,ctx);if(!(schema.anyOf instanceof Array)){throw new SchemaError("anyOf must be an array")}if(!schema.anyOf.some(testSchema.bind(this,instance,options,ctx))){var list=schema.anyOf.map(function(v,i){return v.id&&"<"+v.id+">"||v.title&&JSON.stringify(v.title)||v["$ref"]&&"<"+v["$ref"]+">"||"[subschema "+i+"]"});result.addError({name:"anyOf",argument:list,message:"is not any of "+list.join(",")})}return result};validators.allOf=function validateAllOf(instance,schema,options,ctx){if(instance===undefined){return null}if(!(schema.allOf instanceof Array)){throw new SchemaError("allOf must be an array")}var result=new ValidatorResult(instance,schema,options,ctx);var self=this;schema.allOf.forEach(function(v,i){var valid=self.validateSchema(instance,v,options,ctx);if(!valid.valid){var msg=v.id&&"<"+v.id+">"||v.title&&JSON.stringify(v.title)||v["$ref"]&&"<"+v["$ref"]+">"||"[subschema "+i+"]";result.addError({name:"allOf",argument:{id:msg,length:valid.errors.length,valid:valid},message:"does not match allOf schema "+msg+" with "+valid.errors.length+" error[s]:"});result.importErrors(valid)}});return result};validators.oneOf=function validateOneOf(instance,schema,options,ctx){if(instance===undefined){return null}if(!(schema.oneOf instanceof Array)){throw new SchemaError("oneOf must be an array")}var result=new ValidatorResult(instance,schema,options,ctx);var count=schema.oneOf.filter(testSchema.bind(this,instance,options,ctx)).length;var list=schema.oneOf.map(function(v,i){return v.id&&"<"+v.id+">"||v.title&&JSON.stringify(v.title)||v["$ref"]&&"<"+v["$ref"]+">"||"[subschema "+i+"]"});if(count!==1){result.addError({name:"oneOf",argument:list,message:"is not exactly one from "+list.join(",")})}return result};validators.properties=function validateProperties(instance,schema,options,ctx){if(instance===undefined||!(instance instanceof Object))return;var result=new ValidatorResult(instance,schema,options,ctx);var properties=schema.properties||{};for(var property in properties){var prop=(instance||undefined)&&instance[property];var res=this.validateSchema(prop,properties[property],options,ctx.makeChild(properties[property],property));if(res.instance!==result.instance[property])result.instance[property]=res.instance;result.importErrors(res)}return result};function testAdditionalProperty(instance,schema,options,ctx,property,result){if(schema.properties&&schema.properties[property]!==undefined){return}if(schema.additionalProperties===false){result.addError({name:"additionalProperties",argument:property,message:"additionalProperty "+JSON.stringify(property)+" exists in instance when not allowed"})}else{var additionalProperties=schema.additionalProperties||{};var res=this.validateSchema(instance[property],additionalProperties,options,ctx.makeChild(additionalProperties,property));if(res.instance!==result.instance[property])result.instance[property]=res.instance;result.importErrors(res)}}validators.patternProperties=function validatePatternProperties(instance,schema,options,ctx){if(instance===undefined)return;if(!this.types.object(instance))return;var result=new ValidatorResult(instance,schema,options,ctx);var patternProperties=schema.patternProperties||{};for(var property in instance){var test=true;for(var pattern in patternProperties){var expr=new RegExp(pattern);if(!expr.test(property)){continue}test=false;var res=this.validateSchema(instance[property],patternProperties[pattern],options,ctx.makeChild(patternProperties[pattern],property));if(res.instance!==result.instance[property])result.instance[property]=res.instance;result.importErrors(res)}if(test){testAdditionalProperty.call(this,instance,schema,options,ctx,property,result)}}return result};validators.additionalProperties=function validateAdditionalProperties(instance,schema,options,ctx){if(instance===undefined)return;if(!this.types.object(instance))return;if(schema.patternProperties){return null}var result=new ValidatorResult(instance,schema,options,ctx);for(var property in instance){testAdditionalProperty.call(this,instance,schema,options,ctx,property,result)}return result};validators.minProperties=function validateMinProperties(instance,schema,options,ctx){if(!instance||typeof instance!=="object"){return null}var result=new ValidatorResult(instance,schema,options,ctx);var keys=Object.keys(instance);if(!(keys.length>=schema.minProperties)){result.addError({name:"minProperties",argument:schema.minProperties,message:"does not meet minimum property length of "+schema.minProperties})}return result};validators.maxProperties=function validateMaxProperties(instance,schema,options,ctx){if(!instance||typeof instance!=="object"){return null}var result=new ValidatorResult(instance,schema,options,ctx);var keys=Object.keys(instance);if(!(keys.length<=schema.maxProperties)){result.addError({name:"maxProperties",argument:schema.maxProperties,message:"does not meet maximum property length of "+schema.maxProperties})}return result};validators.items=function validateItems(instance,schema,options,ctx){if(!(instance instanceof Array)){return null}var self=this;var result=new ValidatorResult(instance,schema,options,ctx);if(instance===undefined||!schema.items){return result}instance.every(function(value,i){var items=schema.items instanceof Array?schema.items[i]||schema.additionalItems:schema.items;if(items===undefined){return true}if(items===false){result.addError({name:"items",message:"additionalItems not permitted"});return false}var res=self.validateSchema(value,items,options,ctx.makeChild(items,i));if(res.instance!==result.instance[i])result.instance[i]=res.instance;result.importErrors(res);return true});return result};validators.minimum=function validateMinimum(instance,schema,options,ctx){if(typeof instance!=="number"){return null}var result=new ValidatorResult(instance,schema,options,ctx);var valid=true;if(schema.exclusiveMinimum&&schema.exclusiveMinimum===true){valid=instance>schema.minimum}else{valid=instance>=schema.minimum}if(!valid){result.addError({name:"minimum",argument:schema.minimum,message:"must have a minimum value of "+schema.minimum})}return result};validators.maximum=function validateMaximum(instance,schema,options,ctx){if(typeof instance!=="number"){return null}var result=new ValidatorResult(instance,schema,options,ctx);var valid;if(schema.exclusiveMaximum&&schema.exclusiveMaximum===true){valid=instance<schema.maximum}else{valid=instance<=schema.maximum}if(!valid){result.addError({name:"maximum",argument:schema.maximum,message:"must have a maximum value of "+schema.maximum})}return result};validators.divisibleBy=function validateDivisibleBy(instance,schema,options,ctx){if(typeof instance!=="number"){return null}if(schema.divisibleBy==0){throw new SchemaError("divisibleBy cannot be zero")}var result=new ValidatorResult(instance,schema,options,ctx);if(instance/schema.divisibleBy%1){result.addError({name:"divisibleBy",argument:schema.divisibleBy,message:"is not divisible by (multiple of) "+JSON.stringify(schema.divisibleBy)})}return result};validators.multipleOf=function validateMultipleOf(instance,schema,options,ctx){if(typeof instance!=="number"){return null}if(schema.multipleOf==0){throw new SchemaError("multipleOf cannot be zero")}var result=new ValidatorResult(instance,schema,options,ctx);if(instance/schema.multipleOf%1){result.addError({name:"multipleOf",argument:schema.multipleOf,message:"is not a multiple of (divisible by) "+JSON.stringify(schema.multipleOf)})}return result};validators.required=function validateRequired(instance,schema,options,ctx){var result=new ValidatorResult(instance,schema,options,ctx);if(instance===undefined&&schema.required===true){result.addError({name:"required",message:"is required"})}else if(instance&&typeof instance==="object"&&Array.isArray(schema.required)){schema.required.forEach(function(n){if(instance[n]===undefined){result.addError({name:"required",argument:n,message:"requires property "+JSON.stringify(n)})}})}return result};validators.pattern=function validatePattern(instance,schema,options,ctx){if(typeof instance!=="string"){return null}var result=new ValidatorResult(instance,schema,options,ctx);if(!instance.match(schema.pattern)){result.addError({name:"pattern",argument:schema.pattern,message:"does not match pattern "+JSON.stringify(schema.pattern)})}return result};validators.format=function validateFormat(instance,schema,options,ctx){var result=new ValidatorResult(instance,schema,options,ctx);if(!result.disableFormat&&!helpers.isFormat(instance,schema.format,this)){result.addError({name:"format",argument:schema.format,message:"does not conform to the "+JSON.stringify(schema.format)+" format"})}return result};validators.minLength=function validateMinLength(instance,schema,options,ctx){if(!(typeof instance==="string")){return null}var result=new ValidatorResult(instance,schema,options,ctx);if(!(instance.length>=schema.minLength)){result.addError({name:"minLength",argument:schema.minLength,message:"does not meet minimum length of "+schema.minLength})}return result};validators.maxLength=function validateMaxLength(instance,schema,options,ctx){if(!(typeof instance==="string")){return null}var result=new ValidatorResult(instance,schema,options,ctx);if(!(instance.length<=schema.maxLength)){result.addError({name:"maxLength",argument:schema.maxLength,message:"does not meet maximum length of "+schema.maxLength})}return result};validators.minItems=function validateMinItems(instance,schema,options,ctx){if(!(instance instanceof Array)){return null}var result=new ValidatorResult(instance,schema,options,ctx);if(!(instance.length>=schema.minItems)){result.addError({name:"minItems",argument:schema.minItems,message:"does not meet minimum length of "+schema.minItems})}return result};validators.maxItems=function validateMaxItems(instance,schema,options,ctx){if(!(instance instanceof Array)){return null}var result=new ValidatorResult(instance,schema,options,ctx);if(!(instance.length<=schema.maxItems)){result.addError({name:"maxItems",argument:schema.maxItems,message:"does not meet maximum length of "+schema.maxItems})}return result};validators.uniqueItems=function validateUniqueItems(instance,schema,options,ctx){var result=new ValidatorResult(instance,schema,options,ctx);if(!(instance instanceof Array)){return result}function testArrays(v,i,a){for(var j=i+1;j<a.length;j++)if(helpers.deepCompareStrict(v,a[j])){return false}return true}if(!instance.every(testArrays)){result.addError({name:"uniqueItems",message:"contains duplicate item"})}return result};function testArrays(v,i,a){var j,len=a.length;for(j=i+1,len;j<len;j++){if(helpers.deepCompareStrict(v,a[j])){return false}}return true}validators.uniqueItems=function validateUniqueItems(instance,schema,options,ctx){if(!(instance instanceof Array)){return null}var result=new ValidatorResult(instance,schema,options,ctx);if(!instance.every(testArrays)){result.addError({name:"uniqueItems",message:"contains duplicate item"})}return result};validators.dependencies=function validateDependencies(instance,schema,options,ctx){if(!instance||typeof instance!="object"){return null}var result=new ValidatorResult(instance,schema,options,ctx);for(var property in schema.dependencies){if(instance[property]===undefined){continue}var dep=schema.dependencies[property];var childContext=ctx.makeChild(dep,property);if(typeof dep=="string"){dep=[dep]}if(dep instanceof Array){dep.forEach(function(prop){if(instance[prop]===undefined){result.addError({name:"dependencies",argument:childContext.propertyPath,message:"property "+prop+" not found, required by "+childContext.propertyPath})}})}else{var res=this.validateSchema(instance,dep,options,childContext);if(result.instance!==res.instance)result.instance=res.instance;if(res&&res.errors.length){result.addError({name:"dependencies",argument:childContext.propertyPath,message:"does not meet dependency required by "+childContext.propertyPath});result.importErrors(res)}}}return result};validators["enum"]=function validateEnum(instance,schema,options,ctx){if(!(schema["enum"]instanceof Array)){throw new SchemaError("enum expects an array",schema)}if(instance===undefined){return null}var result=new ValidatorResult(instance,schema,options,ctx);if(!schema["enum"].some(helpers.deepCompareStrict.bind(null,instance))){result.addError({name:"enum",argument:schema["enum"],message:"is not one of enum values: "+schema["enum"].join(",")})}return result};validators.not=validators.disallow=function validateNot(instance,schema,options,ctx){var self=this;if(instance===undefined)return null;var result=new ValidatorResult(instance,schema,options,ctx);var notTypes=schema.not||schema.disallow;if(!notTypes)return null;if(!(notTypes instanceof Array))notTypes=[notTypes];notTypes.forEach(function(type){if(self.testType(instance,schema,options,ctx,type)){var schemaId=type&&type.id&&"<"+type.id+">"||type;result.addError({name:"not",argument:schemaId,message:"is of prohibited type "+schemaId})}});return result};module.exports=attribute},{"./helpers":2}],2:[function(require,module,exports){"use strict";var uri=require("url");var ValidationError=exports.ValidationError=function ValidationError(message,instance,schema,propertyPath,name,argument){if(propertyPath){this.property=propertyPath}if(message){this.message=message}if(schema){if(schema.id){this.schema=schema.id}else{this.schema=schema}}if(instance){this.instance=instance}this.name=name;this.argument=argument;this.stack=this.toString()};ValidationError.prototype.toString=function toString(){return this.property+" "+this.message};var ValidatorResult=exports.ValidatorResult=function ValidatorResult(instance,schema,options,ctx){this.instance=instance;this.schema=schema;this.propertyPath=ctx.propertyPath;this.errors=[];this.throwError=options&&options.throwError;this.disableFormat=options&&options.disableFormat===true};ValidatorResult.prototype.addError=function addError(detail){var err;if(typeof detail=="string"){err=new ValidationError(detail,this.instance,this.schema,this.propertyPath)}else{if(!detail)throw new Error("Missing error detail");if(!detail.message)throw new Error("Missing error message");if(!detail.name)throw new Error("Missing validator type");err=new ValidationError(detail.message,this.instance,this.schema,this.propertyPath,detail.name,detail.argument)}if(this.throwError){throw err}this.errors.push(err);return err};ValidatorResult.prototype.importErrors=function importErrors(res){if(typeof res=="string"||res&&res.validatorType){this.addError(res)}else if(res&&res.errors){var errs=this.errors;res.errors.forEach(function(v){errs.push(v)})}};ValidatorResult.prototype.toString=function toString(res){return this.errors.map(function(v,i){return i+": "+v.toString()+"\n"}).join("")};Object.defineProperty(ValidatorResult.prototype,"valid",{get:function(){return!this.errors.length}});var SchemaError=exports.SchemaError=function SchemaError(msg,schema){this.message=msg;this.schema=schema;Error.call(this,msg);Error.captureStackTrace(this,SchemaError)};SchemaError.prototype=Object.create(Error.prototype,{constructor:{value:SchemaError,enumerable:false},name:{value:"SchemaError",enumerable:false}});var SchemaContext=exports.SchemaContext=function SchemaContext(schema,options,propertyPath,base,schemas){this.schema=schema;this.options=options;this.propertyPath=propertyPath;this.base=base;this.schemas=schemas};SchemaContext.prototype.resolve=function resolve(target){return uri.resolve(this.base,target)};SchemaContext.prototype.makeChild=function makeChild(schema,propertyName){var propertyPath=propertyName===undefined?this.propertyPath:this.propertyPath+makeSuffix(propertyName);var base=uri.resolve(this.base,schema.id||"");var ctx=new SchemaContext(schema,this.options,propertyPath,base,Object.create(this.schemas));if(schema.id&&!ctx.schemas[base]){ctx.schemas[base]=schema}return ctx};var FORMAT_REGEXPS=exports.FORMAT_REGEXPS={"date-time":/^\d{4}-(?:0[0-9]{1}|1[0-2]{1})-(3[01]|0[1-9]|[12][0-9])[tT ](2[0-4]|[01][0-9]):([0-5][0-9]):(60|[0-5][0-9])(\.\d+)?([zZ]|[+-]([0-5][0-9]):(60|[0-5][0-9]))$/,date:/^\d{4}-(?:0[0-9]{1}|1[0-2]{1})-(3[01]|0[1-9]|[12][0-9])$/,time:/^(2[0-4]|[01][0-9]):([0-5][0-9]):(60|[0-5][0-9])$/,email:/^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@(?:(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9\-](?!\.)){0,61}[a-zA-Z0-9]?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9\-](?!$)){0,61}[a-zA-Z0-9]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/,"ip-address":/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/,ipv6:/^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/,uri:/^[a-zA-Z][a-zA-Z0-9+-.]*:[^\s]*$/,color:/^(#?([0-9A-Fa-f]{3}){1,2}\b|aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow|(rgb\(\s*\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\s*,\s*\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\s*,\s*\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\s*\))|(rgb\(\s*(\d?\d%|100%)+\s*,\s*(\d?\d%|100%)+\s*,\s*(\d?\d%|100%)+\s*\)))$/,hostname:/^(?=.{1,255}$)[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?(?:\.[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?)*\.?$/,"host-name":/^(?=.{1,255}$)[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?(?:\.[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?)*\.?$/,alpha:/^[a-zA-Z]+$/,alphanumeric:/^[a-zA-Z0-9]+$/,"utc-millisec":function(input){return typeof input==="string"&&parseFloat(input)===parseInt(input,10)&&!isNaN(input)},regex:function(input){var result=true;try{new RegExp(input)}catch(e){result=false}return result},style:/\s*(.+?):\s*([^;]+);?/g,phone:/^\+(?:[0-9] ?){6,14}[0-9]$/};FORMAT_REGEXPS.regexp=FORMAT_REGEXPS.regex;FORMAT_REGEXPS.pattern=FORMAT_REGEXPS.regex;FORMAT_REGEXPS.ipv4=FORMAT_REGEXPS["ip-address"];exports.isFormat=function isFormat(input,format,validator){if(typeof input==="string"&&FORMAT_REGEXPS[format]!==undefined){if(FORMAT_REGEXPS[format]instanceof RegExp){return FORMAT_REGEXPS[format].test(input)}if(typeof FORMAT_REGEXPS[format]==="function"){return FORMAT_REGEXPS[format](input)}}else if(validator&&validator.customFormats&&typeof validator.customFormats[format]==="function"){return validator.customFormats[format](input)}return true};var makeSuffix=exports.makeSuffix=function makeSuffix(key){key=key.toString();if(!key.match(/[.\s\[\]]/)&&!key.match(/^[\d]/)){return"."+key}if(key.match(/^\d+$/)){return"["+key+"]"}return"["+JSON.stringify(key)+"]"};exports.deepCompareStrict=function deepCompareStrict(a,b){if(typeof a!==typeof b){return false}if(a instanceof Array){if(!(b instanceof Array)){return false}if(a.length!==b.length){return false}return a.every(function(v,i){return deepCompareStrict(a[i],b[i])})}if(typeof a==="object"){if(!a||!b){return a===b}var aKeys=Object.keys(a);var bKeys=Object.keys(b);if(aKeys.length!==bKeys.length){return false}return aKeys.every(function(v){return deepCompareStrict(a[v],b[v])})}return a===b};module.exports.deepMerge=function deepMerge(target,src){var array=Array.isArray(src);var dst=array&&[]||{};if(array){target=target||[];dst=dst.concat(target);src.forEach(function(e,i){if(typeof e==="object"){dst[i]=deepMerge(target[i],e)}else{if(target.indexOf(e)===-1){dst.push(e)}}})}else{if(target&&typeof target==="object"){Object.keys(target).forEach(function(key){dst[key]=target[key]})}Object.keys(src).forEach(function(key){if(typeof src[key]!=="object"||!src[key]){dst[key]=src[key]}else{if(!target[key]){dst[key]=src[key]}else{dst[key]=deepMerge(target[key],src[key])}}})}return dst};exports.objectGetPath=function objectGetPath(o,s){var parts=s.split("/").slice(1);var k;while(typeof(k=parts.shift())=="string"){var n=decodeURIComponent(k.replace(/~0/,"~").replace(/~1/g,"/"));if(!(n in o))return;o=o[n]}return o};exports.encodePath=function encodePointer(a){return a.map(function(v){return"/"+encodeURIComponent(v).replace(/~/g,"%7E")}).join("")}},{url:8}],3:[function(require,module,exports){"use strict";var urilib=require("url");var attribute=require("./attribute");var helpers=require("./helpers");var ValidatorResult=helpers.ValidatorResult;var SchemaError=helpers.SchemaError;var SchemaContext=helpers.SchemaContext;var Validator=function Validator(){this.customFormats=Object.create(Validator.prototype.customFormats);this.schemas={};this.unresolvedRefs=[];this.types=Object.create(types);this.attributes=Object.create(attribute.validators)};Validator.prototype.customFormats={};Validator.prototype.schemas=null;Validator.prototype.types=null;Validator.prototype.attributes=null;Validator.prototype.unresolvedRefs=null;Validator.prototype.addSchema=function addSchema(schema,uri){if(!schema){return null}var ourUri=uri||schema.id;this.addSubSchema(ourUri,schema);if(ourUri){this.schemas[ourUri]=schema}return this.schemas[ourUri]};Validator.prototype.addSubSchema=function addSubSchema(baseuri,schema){if(!schema||typeof schema!="object")return;if(schema.$ref){var resolvedUri=urilib.resolve(baseuri,schema.$ref);if(this.schemas[resolvedUri]===undefined){this.schemas[resolvedUri]=null;this.unresolvedRefs.push(resolvedUri)}return}var ourUri=schema.id&&urilib.resolve(baseuri,schema.id);var ourBase=ourUri||baseuri;if(ourUri){if(this.schemas[ourUri]){if(!helpers.deepCompareStrict(this.schemas[ourUri],schema)){throw new Error("Schema <"+schema+"> already exists with different definition")}return this.schemas[ourUri]}this.schemas[ourUri]=schema;var documentUri=ourUri.replace(/^([^#]*)#$/,"$1");this.schemas[documentUri]=schema}this.addSubSchemaArray(ourBase,schema.items instanceof Array?schema.items:[schema.items]);this.addSubSchemaArray(ourBase,schema.extends instanceof Array?schema.extends:[schema.extends]);this.addSubSchema(ourBase,schema.additionalItems);this.addSubSchemaObject(ourBase,schema.properties);this.addSubSchema(ourBase,schema.additionalProperties);this.addSubSchemaObject(ourBase,schema.definitions);this.addSubSchemaObject(ourBase,schema.patternProperties);this.addSubSchemaObject(ourBase,schema.dependencies);this.addSubSchemaArray(ourBase,schema.disallow);this.addSubSchemaArray(ourBase,schema.allOf);this.addSubSchemaArray(ourBase,schema.anyOf);this.addSubSchemaArray(ourBase,schema.oneOf);this.addSubSchema(ourBase,schema.not);return this.schemas[ourUri]};Validator.prototype.addSubSchemaArray=function addSubSchemaArray(baseuri,schemas){if(!(schemas instanceof Array))return;for(var i=0;i<schemas.length;i++){this.addSubSchema(baseuri,schemas[i])}};Validator.prototype.addSubSchemaObject=function addSubSchemaArray(baseuri,schemas){if(!schemas||typeof schemas!="object")return;for(var p in schemas){this.addSubSchema(baseuri,schemas[p])}};Validator.prototype.setSchemas=function setSchemas(schemas){this.schemas=schemas};Validator.prototype.getSchema=function getSchema(urn){return this.schemas[urn]};Validator.prototype.validate=function validate(instance,schema,options,ctx){if(!options){options={}}var propertyName=options.propertyName||"instance";var base=urilib.resolve(options.base||"/",schema.id||"");if(!ctx){ctx=new SchemaContext(schema,options,propertyName,base,Object.create(this.schemas));if(!ctx.schemas[base]){ctx.schemas[base]=schema}}if(schema){var result=this.validateSchema(instance,schema,options,ctx);if(!result){throw new Error("Result undefined")}return result}throw new SchemaError("no schema specified",schema)};Validator.prototype.validateSchema=function validateSchema(instance,schema,options,ctx){var self=this;var result=new ValidatorResult(instance,schema,options,ctx);if(!schema){throw new Error("schema is undefined")}function shouldResolve(schema){var ref=typeof schema==="string"?schema:schema.$ref;if(typeof ref=="string")return ref;return false}function resolve(schema,ctx){var ref;if(ref=shouldResolve(schema)){return self.resolve(schema,ref,ctx).subschema}return schema}if(schema["extends"]){if(schema["extends"]instanceof Array){schema["extends"].forEach(function(s){schema=helpers.deepMerge(schema,resolve(s,ctx))})}else{schema=helpers.deepMerge(schema,resolve(schema["extends"],ctx))}}var switchSchema;if(switchSchema=shouldResolve(schema)){var resolved=this.resolve(schema,switchSchema,ctx);var subctx=new SchemaContext(resolved.subschema,options,ctx.propertyPath,resolved.switchSchema,ctx.schemas);return this.validateSchema(instance,resolved.subschema,options,subctx)}var skipAttributes=options&&options.skipAttributes||[];for(var key in schema){if(!attribute.ignoreProperties[key]&&skipAttributes.indexOf(key)<0){var validatorErr=null;var validator=self.attributes[key];if(validator){validatorErr=validator.call(self,instance,schema,options,ctx)}else if(options.allowUnknownAttributes===false){throw new SchemaError("Unsupported attribute: "+key,schema)}if(validatorErr){result.importErrors(validatorErr)}}}if(typeof options.rewrite=="function"){var value=options.rewrite.call(this,instance,schema,options,ctx);result.instance=value}return result};Validator.prototype.resolve=function resolve(schema,switchSchema,ctx){switchSchema=ctx.resolve(switchSchema);if(ctx.schemas[switchSchema]){return{subschema:ctx.schemas[switchSchema],switchSchema:switchSchema}}var parsed=urilib.parse(switchSchema);var fragment=parsed&&parsed.hash;var document=fragment&&fragment.length&&switchSchema.substr(0,switchSchema.length-fragment.length);if(!document||!ctx.schemas[document]){throw new SchemaError("no such schema <"+switchSchema+">",schema)}var subschema=helpers.objectGetPath(ctx.schemas[document],fragment.substr(1));if(subschema===undefined){throw new SchemaError("no such schema "+fragment+" located in <"+document+">",schema)}return{subschema:subschema,switchSchema:switchSchema}};Validator.prototype.testType=function validateType(instance,schema,options,ctx,type){if(typeof this.types[type]=="function"){return this.types[type].call(this,instance)}if(type&&typeof type=="object"){var res=this.validateSchema(instance,type,options,ctx);return res===undefined||!(res&&res.errors.length)}return true};var types=Validator.prototype.types={};types.string=function testString(instance){return typeof instance=="string"};types.number=function testNumber(instance){return typeof instance=="number"&&isFinite(instance)};types.integer=function testInteger(instance){return typeof instance=="number"&&instance%1===0};types.boolean=function testBoolean(instance){return typeof instance=="boolean"};types.array=function testArray(instance){return instance instanceof Array};types["null"]=function testNull(instance){return instance===null};types.date=function testDate(instance){return instance instanceof Date};types.any=function testAny(instance){return true};types.object=function testObject(instance){return instance&&typeof instance==="object"&&!(instance instanceof Array)&&!(instance instanceof Date)};module.exports=Validator},{"./attribute":1,"./helpers":2,url:8}],4:[function(require,module,exports){(function(global){(function(root){var freeExports=typeof exports=="object"&&exports;var freeModule=typeof module=="object"&&module&&module.exports==freeExports&&module;var freeGlobal=typeof global=="object"&&global;if(freeGlobal.global===freeGlobal||freeGlobal.window===freeGlobal){root=freeGlobal}var punycode,maxInt=2147483647,base=36,tMin=1,tMax=26,skew=38,damp=700,initialBias=72,initialN=128,delimiter="-",regexPunycode=/^xn--/,regexNonASCII=/[^ -~]/,regexSeparators=/\x2E|\u3002|\uFF0E|\uFF61/g,errors={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},baseMinusTMin=base-tMin,floor=Math.floor,stringFromCharCode=String.fromCharCode,key;function error(type){throw RangeError(errors[type])}function map(array,fn){var length=array.length;while(length--){array[length]=fn(array[length])}return array}function mapDomain(string,fn){return map(string.split(regexSeparators),fn).join(".")}function ucs2decode(string){var output=[],counter=0,length=string.length,value,extra;while(counter<length){value=string.charCodeAt(counter++);if(value>=55296&&value<=56319&&counter<length){extra=string.charCodeAt(counter++);if((extra&64512)==56320){output.push(((value&1023)<<10)+(extra&1023)+65536)}else{output.push(value);counter--}}else{output.push(value)}}return output}function ucs2encode(array){return map(array,function(value){var output="";if(value>65535){value-=65536;output+=stringFromCharCode(value>>>10&1023|55296);value=56320|value&1023}output+=stringFromCharCode(value);return output}).join("")}function basicToDigit(codePoint){if(codePoint-48<10){return codePoint-22}if(codePoint-65<26){return codePoint-65}if(codePoint-97<26){return codePoint-97}return base}function digitToBasic(digit,flag){return digit+22+75*(digit<26)-((flag!=0)<<5)}function adapt(delta,numPoints,firstTime){var k=0;delta=firstTime?floor(delta/damp):delta>>1;delta+=floor(delta/numPoints);for(;delta>baseMinusTMin*tMax>>1;k+=base){delta=floor(delta/baseMinusTMin)}return floor(k+(baseMinusTMin+1)*delta/(delta+skew))}function decode(input){var output=[],inputLength=input.length,out,i=0,n=initialN,bias=initialBias,basic,j,index,oldi,w,k,digit,t,baseMinusT;basic=input.lastIndexOf(delimiter);if(basic<0){basic=0}for(j=0;j<basic;++j){if(input.charCodeAt(j)>=128){error("not-basic")}output.push(input.charCodeAt(j))}for(index=basic>0?basic+1:0;index<inputLength;){for(oldi=i,w=1,k=base;;k+=base){if(index>=inputLength){error("invalid-input")}digit=basicToDigit(input.charCodeAt(index++));
if(digit>=base||digit>floor((maxInt-i)/w)){error("overflow")}i+=digit*w;t=k<=bias?tMin:k>=bias+tMax?tMax:k-bias;if(digit<t){break}baseMinusT=base-t;if(w>floor(maxInt/baseMinusT)){error("overflow")}w*=baseMinusT}out=output.length+1;bias=adapt(i-oldi,out,oldi==0);if(floor(i/out)>maxInt-n){error("overflow")}n+=floor(i/out);i%=out;output.splice(i++,0,n)}return ucs2encode(output)}function encode(input){var n,delta,handledCPCount,basicLength,bias,j,m,q,k,t,currentValue,output=[],inputLength,handledCPCountPlusOne,baseMinusT,qMinusT;input=ucs2decode(input);inputLength=input.length;n=initialN;delta=0;bias=initialBias;for(j=0;j<inputLength;++j){currentValue=input[j];if(currentValue<128){output.push(stringFromCharCode(currentValue))}}handledCPCount=basicLength=output.length;if(basicLength){output.push(delimiter)}while(handledCPCount<inputLength){for(m=maxInt,j=0;j<inputLength;++j){currentValue=input[j];if(currentValue>=n&&currentValue<m){m=currentValue}}handledCPCountPlusOne=handledCPCount+1;if(m-n>floor((maxInt-delta)/handledCPCountPlusOne)){error("overflow")}delta+=(m-n)*handledCPCountPlusOne;n=m;for(j=0;j<inputLength;++j){currentValue=input[j];if(currentValue<n&&++delta>maxInt){error("overflow")}if(currentValue==n){for(q=delta,k=base;;k+=base){t=k<=bias?tMin:k>=bias+tMax?tMax:k-bias;if(q<t){break}qMinusT=q-t;baseMinusT=base-t;output.push(stringFromCharCode(digitToBasic(t+qMinusT%baseMinusT,0)));q=floor(qMinusT/baseMinusT)}output.push(stringFromCharCode(digitToBasic(q,0)));bias=adapt(delta,handledCPCountPlusOne,handledCPCount==basicLength);delta=0;++handledCPCount}}++delta;++n}return output.join("")}function toUnicode(domain){return mapDomain(domain,function(string){return regexPunycode.test(string)?decode(string.slice(4).toLowerCase()):string})}function toASCII(domain){return mapDomain(domain,function(string){return regexNonASCII.test(string)?"xn--"+encode(string):string})}punycode={version:"1.2.4",ucs2:{decode:ucs2decode,encode:ucs2encode},decode:decode,encode:encode,toASCII:toASCII,toUnicode:toUnicode};if(typeof define=="function"&&typeof define.amd=="object"&&define.amd){define("punycode",function(){return punycode})}else if(freeExports&&!freeExports.nodeType){if(freeModule){freeModule.exports=punycode}else{for(key in punycode){punycode.hasOwnProperty(key)&&(freeExports[key]=punycode[key])}}}else{root.punycode=punycode}})(this)}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{}],5:[function(require,module,exports){"use strict";function hasOwnProperty(obj,prop){return Object.prototype.hasOwnProperty.call(obj,prop)}module.exports=function(qs,sep,eq,options){sep=sep||"&";eq=eq||"=";var obj={};if(typeof qs!=="string"||qs.length===0){return obj}var regexp=/\+/g;qs=qs.split(sep);var maxKeys=1e3;if(options&&typeof options.maxKeys==="number"){maxKeys=options.maxKeys}var len=qs.length;if(maxKeys>0&&len>maxKeys){len=maxKeys}for(var i=0;i<len;++i){var x=qs[i].replace(regexp,"%20"),idx=x.indexOf(eq),kstr,vstr,k,v;if(idx>=0){kstr=x.substr(0,idx);vstr=x.substr(idx+1)}else{kstr=x;vstr=""}k=decodeURIComponent(kstr);v=decodeURIComponent(vstr);if(!hasOwnProperty(obj,k)){obj[k]=v}else if(isArray(obj[k])){obj[k].push(v)}else{obj[k]=[obj[k],v]}}return obj};var isArray=Array.isArray||function(xs){return Object.prototype.toString.call(xs)==="[object Array]"}},{}],6:[function(require,module,exports){"use strict";var stringifyPrimitive=function(v){switch(typeof v){case"string":return v;case"boolean":return v?"true":"false";case"number":return isFinite(v)?v:"";default:return""}};module.exports=function(obj,sep,eq,name){sep=sep||"&";eq=eq||"=";if(obj===null){obj=undefined}if(typeof obj==="object"){return map(objectKeys(obj),function(k){var ks=encodeURIComponent(stringifyPrimitive(k))+eq;if(isArray(obj[k])){return map(obj[k],function(v){return ks+encodeURIComponent(stringifyPrimitive(v))}).join(sep)}else{return ks+encodeURIComponent(stringifyPrimitive(obj[k]))}}).join(sep)}if(!name)return"";return encodeURIComponent(stringifyPrimitive(name))+eq+encodeURIComponent(stringifyPrimitive(obj))};var isArray=Array.isArray||function(xs){return Object.prototype.toString.call(xs)==="[object Array]"};function map(xs,f){if(xs.map)return xs.map(f);var res=[];for(var i=0;i<xs.length;i++){res.push(f(xs[i],i))}return res}var objectKeys=Object.keys||function(obj){var res=[];for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))res.push(key)}return res}},{}],7:[function(require,module,exports){"use strict";exports.decode=exports.parse=require("./decode");exports.encode=exports.stringify=require("./encode")},{"./decode":5,"./encode":6}],8:[function(require,module,exports){var punycode=require("punycode");exports.parse=urlParse;exports.resolve=urlResolve;exports.resolveObject=urlResolveObject;exports.format=urlFormat;exports.Url=Url;function Url(){this.protocol=null;this.slashes=null;this.auth=null;this.host=null;this.port=null;this.hostname=null;this.hash=null;this.search=null;this.query=null;this.pathname=null;this.path=null;this.href=null}var protocolPattern=/^([a-z0-9.+-]+:)/i,portPattern=/:[0-9]*$/,delims=["<",">",'"',"`"," ","\r","\n"," "],unwise=["{","}","|","\\","^","`"].concat(delims),autoEscape=["'"].concat(unwise),nonHostChars=["%","/","?",";","#"].concat(autoEscape),hostEndingChars=["/","?","#"],hostnameMaxLen=255,hostnamePartPattern=/^[a-z0-9A-Z_-]{0,63}$/,hostnamePartStart=/^([a-z0-9A-Z_-]{0,63})(.*)$/,unsafeProtocol={javascript:true,"javascript:":true},hostlessProtocol={javascript:true,"javascript:":true},slashedProtocol={http:true,https:true,ftp:true,gopher:true,file:true,"http:":true,"https:":true,"ftp:":true,"gopher:":true,"file:":true},querystring=require("querystring");function urlParse(url,parseQueryString,slashesDenoteHost){if(url&&isObject(url)&&url instanceof Url)return url;var u=new Url;u.parse(url,parseQueryString,slashesDenoteHost);return u}Url.prototype.parse=function(url,parseQueryString,slashesDenoteHost){if(!isString(url)){throw new TypeError("Parameter 'url' must be a string, not "+typeof url)}var rest=url;rest=rest.trim();var proto=protocolPattern.exec(rest);if(proto){proto=proto[0];var lowerProto=proto.toLowerCase();this.protocol=lowerProto;rest=rest.substr(proto.length)}if(slashesDenoteHost||proto||rest.match(/^\/\/[^@\/]+@[^@\/]+/)){var slashes=rest.substr(0,2)==="//";if(slashes&&!(proto&&hostlessProtocol[proto])){rest=rest.substr(2);this.slashes=true}}if(!hostlessProtocol[proto]&&(slashes||proto&&!slashedProtocol[proto])){var hostEnd=-1;for(var i=0;i<hostEndingChars.length;i++){var hec=rest.indexOf(hostEndingChars[i]);if(hec!==-1&&(hostEnd===-1||hec<hostEnd))hostEnd=hec}var auth,atSign;if(hostEnd===-1){atSign=rest.lastIndexOf("@")}else{atSign=rest.lastIndexOf("@",hostEnd)}if(atSign!==-1){auth=rest.slice(0,atSign);rest=rest.slice(atSign+1);this.auth=decodeURIComponent(auth)}hostEnd=-1;for(var i=0;i<nonHostChars.length;i++){var hec=rest.indexOf(nonHostChars[i]);if(hec!==-1&&(hostEnd===-1||hec<hostEnd))hostEnd=hec}if(hostEnd===-1)hostEnd=rest.length;this.host=rest.slice(0,hostEnd);rest=rest.slice(hostEnd);this.parseHost();this.hostname=this.hostname||"";var ipv6Hostname=this.hostname[0]==="["&&this.hostname[this.hostname.length-1]==="]";if(!ipv6Hostname){var hostparts=this.hostname.split(/\./);for(var i=0,l=hostparts.length;i<l;i++){var part=hostparts[i];if(!part)continue;if(!part.match(hostnamePartPattern)){var newpart="";for(var j=0,k=part.length;j<k;j++){if(part.charCodeAt(j)>127){newpart+="x"}else{newpart+=part[j]}}if(!newpart.match(hostnamePartPattern)){var validParts=hostparts.slice(0,i);var notHost=hostparts.slice(i+1);var bit=part.match(hostnamePartStart);if(bit){validParts.push(bit[1]);notHost.unshift(bit[2])}if(notHost.length){rest="/"+notHost.join(".")+rest}this.hostname=validParts.join(".");break}}}}if(this.hostname.length>hostnameMaxLen){this.hostname=""}else{this.hostname=this.hostname.toLowerCase()}if(!ipv6Hostname){var domainArray=this.hostname.split(".");var newOut=[];for(var i=0;i<domainArray.length;++i){var s=domainArray[i];newOut.push(s.match(/[^A-Za-z0-9_-]/)?"xn--"+punycode.encode(s):s)}this.hostname=newOut.join(".")}var p=this.port?":"+this.port:"";var h=this.hostname||"";this.host=h+p;this.href+=this.host;if(ipv6Hostname){this.hostname=this.hostname.substr(1,this.hostname.length-2);if(rest[0]!=="/"){rest="/"+rest}}}if(!unsafeProtocol[lowerProto]){for(var i=0,l=autoEscape.length;i<l;i++){var ae=autoEscape[i];var esc=encodeURIComponent(ae);if(esc===ae){esc=escape(ae)}rest=rest.split(ae).join(esc)}}var hash=rest.indexOf("#");if(hash!==-1){this.hash=rest.substr(hash);rest=rest.slice(0,hash)}var qm=rest.indexOf("?");if(qm!==-1){this.search=rest.substr(qm);this.query=rest.substr(qm+1);if(parseQueryString){this.query=querystring.parse(this.query)}rest=rest.slice(0,qm)}else if(parseQueryString){this.search="";this.query={}}if(rest)this.pathname=rest;if(slashedProtocol[lowerProto]&&this.hostname&&!this.pathname){this.pathname="/"}if(this.pathname||this.search){var p=this.pathname||"";var s=this.search||"";this.path=p+s}this.href=this.format();return this};function urlFormat(obj){if(isString(obj))obj=urlParse(obj);if(!(obj instanceof Url))return Url.prototype.format.call(obj);return obj.format()}Url.prototype.format=function(){var auth=this.auth||"";if(auth){auth=encodeURIComponent(auth);auth=auth.replace(/%3A/i,":");auth+="@"}var protocol=this.protocol||"",pathname=this.pathname||"",hash=this.hash||"",host=false,query="";if(this.host){host=auth+this.host}else if(this.hostname){host=auth+(this.hostname.indexOf(":")===-1?this.hostname:"["+this.hostname+"]");if(this.port){host+=":"+this.port}}if(this.query&&isObject(this.query)&&Object.keys(this.query).length){query=querystring.stringify(this.query)}var search=this.search||query&&"?"+query||"";if(protocol&&protocol.substr(-1)!==":")protocol+=":";if(this.slashes||(!protocol||slashedProtocol[protocol])&&host!==false){host="//"+(host||"");if(pathname&&pathname.charAt(0)!=="/")pathname="/"+pathname}else if(!host){host=""}if(hash&&hash.charAt(0)!=="#")hash="#"+hash;if(search&&search.charAt(0)!=="?")search="?"+search;pathname=pathname.replace(/[?#]/g,function(match){return encodeURIComponent(match)});search=search.replace("#","%23");return protocol+host+pathname+search+hash};function urlResolve(source,relative){return urlParse(source,false,true).resolve(relative)}Url.prototype.resolve=function(relative){return this.resolveObject(urlParse(relative,false,true)).format()};function urlResolveObject(source,relative){if(!source)return relative;return urlParse(source,false,true).resolveObject(relative)}Url.prototype.resolveObject=function(relative){if(isString(relative)){var rel=new Url;rel.parse(relative,false,true);relative=rel}var result=new Url;Object.keys(this).forEach(function(k){result[k]=this[k]},this);result.hash=relative.hash;if(relative.href===""){result.href=result.format();return result}if(relative.slashes&&!relative.protocol){Object.keys(relative).forEach(function(k){if(k!=="protocol")result[k]=relative[k]});if(slashedProtocol[result.protocol]&&result.hostname&&!result.pathname){result.path=result.pathname="/"}result.href=result.format();return result}if(relative.protocol&&relative.protocol!==result.protocol){if(!slashedProtocol[relative.protocol]){Object.keys(relative).forEach(function(k){result[k]=relative[k]});result.href=result.format();return result}result.protocol=relative.protocol;if(!relative.host&&!hostlessProtocol[relative.protocol]){var relPath=(relative.pathname||"").split("/");while(relPath.length&&!(relative.host=relPath.shift()));if(!relative.host)relative.host="";if(!relative.hostname)relative.hostname="";if(relPath[0]!=="")relPath.unshift("");if(relPath.length<2)relPath.unshift("");result.pathname=relPath.join("/")}else{result.pathname=relative.pathname}result.search=relative.search;result.query=relative.query;result.host=relative.host||"";result.auth=relative.auth;result.hostname=relative.hostname||relative.host;result.port=relative.port;if(result.pathname||result.search){var p=result.pathname||"";var s=result.search||"";result.path=p+s}result.slashes=result.slashes||relative.slashes;result.href=result.format();return result}var isSourceAbs=result.pathname&&result.pathname.charAt(0)==="/",isRelAbs=relative.host||relative.pathname&&relative.pathname.charAt(0)==="/",mustEndAbs=isRelAbs||isSourceAbs||result.host&&relative.pathname,removeAllDots=mustEndAbs,srcPath=result.pathname&&result.pathname.split("/")||[],relPath=relative.pathname&&relative.pathname.split("/")||[],psychotic=result.protocol&&!slashedProtocol[result.protocol];if(psychotic){result.hostname="";result.port=null;if(result.host){if(srcPath[0]==="")srcPath[0]=result.host;else srcPath.unshift(result.host)}result.host="";if(relative.protocol){relative.hostname=null;relative.port=null;if(relative.host){if(relPath[0]==="")relPath[0]=relative.host;else relPath.unshift(relative.host)}relative.host=null}mustEndAbs=mustEndAbs&&(relPath[0]===""||srcPath[0]==="")}if(isRelAbs){result.host=relative.host||relative.host===""?relative.host:result.host;result.hostname=relative.hostname||relative.hostname===""?relative.hostname:result.hostname;result.search=relative.search;result.query=relative.query;srcPath=relPath}else if(relPath.length){if(!srcPath)srcPath=[];srcPath.pop();srcPath=srcPath.concat(relPath);result.search=relative.search;result.query=relative.query}else if(!isNullOrUndefined(relative.search)){if(psychotic){result.hostname=result.host=srcPath.shift();var authInHost=result.host&&result.host.indexOf("@")>0?result.host.split("@"):false;if(authInHost){result.auth=authInHost.shift();result.host=result.hostname=authInHost.shift()}}result.search=relative.search;result.query=relative.query;if(!isNull(result.pathname)||!isNull(result.search)){result.path=(result.pathname?result.pathname:"")+(result.search?result.search:"")}result.href=result.format();return result}if(!srcPath.length){result.pathname=null;if(result.search){result.path="/"+result.search}else{result.path=null}result.href=result.format();return result}var last=srcPath.slice(-1)[0];var hasTrailingSlash=(result.host||relative.host)&&(last==="."||last==="..")||last==="";var up=0;for(var i=srcPath.length;i>=0;i--){last=srcPath[i];if(last=="."){srcPath.splice(i,1)}else if(last===".."){srcPath.splice(i,1);up++}else if(up){srcPath.splice(i,1);up--}}if(!mustEndAbs&&!removeAllDots){for(;up--;up){srcPath.unshift("..")}}if(mustEndAbs&&srcPath[0]!==""&&(!srcPath[0]||srcPath[0].charAt(0)!=="/")){srcPath.unshift("")}if(hasTrailingSlash&&srcPath.join("/").substr(-1)!=="/"){srcPath.push("")}var isAbsolute=srcPath[0]===""||srcPath[0]&&srcPath[0].charAt(0)==="/";if(psychotic){result.hostname=result.host=isAbsolute?"":srcPath.length?srcPath.shift():"";var authInHost=result.host&&result.host.indexOf("@")>0?result.host.split("@"):false;if(authInHost){result.auth=authInHost.shift();result.host=result.hostname=authInHost.shift()}}mustEndAbs=mustEndAbs||result.host&&srcPath.length;if(mustEndAbs&&!isAbsolute){srcPath.unshift("")}if(!srcPath.length){result.pathname=null;result.path=null}else{result.pathname=srcPath.join("/")}if(!isNull(result.pathname)||!isNull(result.search)){result.path=(result.pathname?result.pathname:"")+(result.search?result.search:"")}result.auth=relative.auth||result.auth;result.slashes=result.slashes||relative.slashes;result.href=result.format();return result};Url.prototype.parseHost=function(){var host=this.host;var port=portPattern.exec(host);if(port){port=port[0];if(port!==":"){this.port=port.substr(1)}host=host.substr(0,host.length-port.length)}if(host)this.hostname=host};function isString(arg){return typeof arg==="string"}function isObject(arg){return typeof arg==="object"&&arg!==null}function isNull(arg){return arg===null}function isNullOrUndefined(arg){return arg==null}},{punycode:4,querystring:7}],jsonschema:[function(require,module,exports){"use strict";var Validator=module.exports.Validator=require("./validator");module.exports.ValidatorResult=require("./helpers").ValidatorResult;module.exports.ValidationError=require("./helpers").ValidationError;module.exports.SchemaError=require("./helpers").SchemaError;module.exports.validate=function(instance,schema,options){var v=new Validator;return v.validate(instance,schema,options)}},{"./helpers":2,"./validator":3}]},{},[]);var Validator=require("jsonschema").Validator;var v=new Validator;var schema={allOf:[{type:"boolean"},{type:"string"}]};console.log(v.validate("foobar",schema));
{
"name": "requirebin-sketch",
"version": "1.0.0",
"dependencies": {
"jsonschema": "1.1.0"
}
}
<!-- contents of this file will be placed inside the <body> -->
<!-- contents of this file will be placed inside the <head> -->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment