广州专业展台制作_国外vps加速免费_网页设计外包价格_太原网络推广

html教程菜鸟教程下载

高端网站设计公司如何设计网站、58网页版登录打开、永久使用、不限域名、黄山网站推广公司

硬件工程师?

广州专业展台制作_国外vps加速免费_网页设计外包价格_太原网络推广

/***/ function(module, exports, __webpack_require__) {/*## valid(template, data)校验真实数据 data 是否与数据模板 template 匹配。实现思路:1. 解析规则。先把数据模板 template 解析为更方便机器解析的 JSON-Schamename 属性名 type 属性值类型template 属性值模板properties 对象属性数组items 数组元素数组rule 属性值生成规则2. 递归验证规则。然后用 JSON-Schema 校验真实数据,校验项包括属性名、值类型、值、值生成规则。提示信息 https://github.com/fge/json-schema-validator/blob/master/src/main/resources/com/github/fge/jsonschema/validator/validation.properties[JSON-Schama validator](http://json-schema-validator.herokuapp.com/)[Regexp Demo](http://demos.forbeslindesay.co.uk/regexp/)*/var Constant = __webpack_require__(2)var Util = __webpack_require__(3)var toJSONSchema = __webpack_require__(23)function valid(template, data) {var schema = toJSONSchema(template)var result = Diff.diff(schema, data)for (var i = 0; i < result.length; i++) {// console.log(template, data)// console.warn(Assert.message(result[i]))}return result}/*## name有生成规则:比较解析后的 name无生成规则:直接比较## type无类型转换:直接比较有类型转换:先试着解析 template,然后再检查?## value vs. template基本类型无生成规则:直接比较有生成规则:numbermin-max.dmin-dmaxmin-max.dcountcount.dmin-dmaxcount.dcount+step整数部分小数部分boolean string min-maxcount## properties对象有生成规则:检测期望的属性个数,继续递归无生成规则:检测全部的属性个数,继续递归## items数组有生成规则:`'name|1': [{}, {} ...]` 其中之一,继续递归`'name|+1': [{}, {} ...]` 顺序检测,继续递归`'name|min-max': [{}, {} ...]` 检测个数,继续递归`'name|count': [{}, {} ...]` 检测个数,继续递归无生成规则:检测全部的元素个数,继续递归*/var Diff = {diff: function diff(schema, data, name /* Internal Use Only */ ) {var result = []// 先检测名称 name 和类型 type,如果匹配,才有必要继续检测if (this.name(schema, data, name, result) &&this.type(schema, data, name, result)) {this.value(schema, data, name, result)this.properties(schema, data, name, result)this.items(schema, data, name, result)}return result},/* jshint unused:false */name: function(schema, data, name, result) {var length = result.lengthAssert.equal('name', schema.path, name + '', schema.name + '', result)return result.length === length},type: function(schema, data, name, result) {var length = result.lengthswitch (schema.type) {case 'string':// 跳过含有『占位符』的属性值,因为『占位符』返回值的类型可能和模板不一致,例如 '@int' 会返回一个整形值if (schema.template.match(Constant.RE_PLACEHOLDER)) return truebreakcase 'array':if (schema.rule.parameters) {// name|count: arrayif (schema.rule.min !== undefined && schema.rule.max === undefined) {// 跳过 name|1: array,因为最终值的类型(很可能)不是数组,也不一定与 `array` 中的类型一致if (schema.rule.count === 1) return true}// 跳过 name|+inc: arrayif (schema.rule.parameters[2]) return true}breakcase 'function':// 跳过 `'name': function`,因为函数可以返回任何类型的值。return true}Assert.equal('type', schema.path, Util.type(data), schema.type, result)return result.length === length},value: function(schema, data, name, result) {var length = result.lengthvar rule = schema.rulevar templateType = schema.typeif (templateType === 'object' || templateType === 'array' || templateType === 'function') return true// 无生成规则if (!rule.parameters) {switch (templateType) {case 'regexp':Assert.match('value', schema.path, data, schema.template, result)return result.length === lengthcase 'string':// 同样跳过含有『占位符』的属性值,因为『占位符』的返回值会通常会与模板不一致if (schema.template.match(Constant.RE_PLACEHOLDER)) return result.length === lengthbreak}Assert.equal('value', schema.path, data, schema.template, result)return result.length === length}// 有生成规则var actualRepeatCountswitch (templateType) {case 'number':var parts = (data + '').split('.')parts[0] = +parts[0]// 整数部分// |min-maxif (rule.min !== undefined && rule.max !== undefined) {Assert.greaterThanOrEqualTo('value', schema.path, parts[0], Math.min(rule.min, rule.max), result)// , 'numeric instance is lower than the required minimum (minimum: {expected}, found: {actual})')Assert.lessThanOrEqualTo('value', schema.path, parts[0], Math.max(rule.min, rule.max), result)}// |countif (rule.min !== undefined && rule.max === undefined) {Assert.equal('value', schema.path, parts[0], rule.min, result, '[value] ' + name)}// 小数部分if (rule.decimal) {// |dmin-dmaxif (rule.dmin !== undefined && rule.dmax !== undefined) {Assert.greaterThanOrEqualTo('value', schema.path, parts[1].length, rule.dmin, result)Assert.lessThanOrEqualTo('value', schema.path, parts[1].length, rule.dmax, result)}// |dcountif (rule.dmin !== undefined && rule.dmax === undefined) {Assert.equal('value', schema.path, parts[1].length, rule.dmin, result)}}breakcase 'boolean':breakcase 'string':// 'aaa'.match(/a/g)actualRepeatCount = data.match(new RegExp(schema.template, 'g'))actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0// |min-maxif (rule.min !== undefined && rule.max !== undefined) {Assert.greaterThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.min, result)Assert.lessThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.max, result)}// |countif (rule.min !== undefined && rule.max === undefined) {Assert.equal('repeat count', schema.path, actualRepeatCount, rule.min, result)}breakcase 'regexp':actualRepeatCount = data.match(new RegExp(schema.template.source.replace(/^\^|$$/g, ''), 'g'))actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0// |min-maxif (rule.min !== undefined && rule.max !== undefined) {Assert.greaterThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.min, result)Assert.lessThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.max, result)}// |countif (rule.min !== undefined && rule.max === undefined) {Assert.equal('repeat count', schema.path, actualRepeatCount, rule.min, result)}break}return result.length === length},properties: function(schema, data, name, result) {var length = result.lengthvar rule = schema.rulevar keys = Util.keys(data)if (!schema.properties) return// 无生成规则if (!schema.rule.parameters) {Assert.equal('properties length', schema.path, keys.length, schema.properties.length, result)} else {// 有生成规则// |min-maxif (rule.min !== undefined && rule.max !== undefined) {Assert.greaterThanOrEqualTo('properties length', schema.path, keys.length, Math.min(rule.min, rule.max), result)Assert.lessThanOrEqualTo('properties length', schema.path, keys.length, Math.max(rule.min, rule.max), result)}// |countif (rule.min !== undefined && rule.max === undefined) {// |1, |>1if (rule.count !== 1) Assert.equal('properties length', schema.path, keys.length, rule.min, result)}}if (result.length !== length) return falsefor (var i = 0; i < keys.length; i++) {result.push.apply(result,this.diff(function() {var propertyUtil.each(schema.properties, function(item /*, index*/ ) {if (item.name === keys[i]) property = item})return property || schema.properties[i]}(),data[keys[i]],keys[i]))}return result.length === length},items: function(schema, data, name, result) {var length = result.lengthif (!schema.items) returnvar rule = schema.rule// 无生成规则if (!schema.rule.parameters) {Assert.equal('items length', schema.path, data.length, schema.items.length, result)} else {// 有生成规则// |min-maxif (rule.min !== undefined && rule.max !== undefined) {Assert.greaterThanOrEqualTo('items', schema.path, data.length, (Math.min(rule.min, rule.max) * schema.items.length), result,'[{utype}] array is too short: {path} must have at least {expected} elements but instance has {actual} elements')Assert.lessThanOrEqualTo('items', schema.path, data.length, (Math.max(rule.min, rule.max) * schema.items.length), result,'[{utype}] array is too long: {path} must have at most {expected} elements but instance has {actual} elements')}// |countif (rule.min !== undefined && rule.max === undefined) {// |1, |>1if (rule.count === 1) return result.length === lengthelse Assert.equal('items length', schema.path, data.length, (rule.min * schema.items.length), result)}// |+incif (rule.parameters[2]) return result.length === length}if (result.length !== length) return falsefor (var i = 0; i < data.length; i++) {result.push.apply(result,this.diff(schema.items[i % schema.items.length],data[i],i % schema.items.length))}return result.length === length}}/*完善、友好的提示信息Equal, not equal to, greater than, less than, greater than or equal to, less than or equal to路径 验证类型 描述 Expect path.name is less than or equal to expected, but path.name is actual.Expect path.name is less than or equal to expected, but path.name is actual.Expect path.name is greater than or equal to expected, but path.name is actual.*/var Assert = {message: function(item) {return (item.message ||'[{utype}] Expect {path}\'{ltype} {action} {expected}, but is {actual}').replace('{utype}', item.type.toUpperCase()).replace('{ltype}', item.type.toLowerCase()).replace('{path}', Util.isArray(item.path) && item.path.join('.') || item.path).replace('{action}', item.action).replace('{expected}', item.expected).replace('{actual}', item.actual)},equal: function(type, path, actual, expected, result, message) {if (actual === expected) return trueswitch (type) {case 'type':// 正则模板 === 字符串最终值if (expected === 'regexp' && actual === 'string') return truebreak}var item = {path: path,type: type,actual: actual,expected: expected,action: 'is equal to',message: message}item.message = Assert.message(item)result.push(item)return false},// actual matches expectedmatch: function(type, path, actual, expected, result, message) {if (expected.test(actual)) return truevar item = {path: path,type: type,actual: actual,expected: expected,action: 'matches',message: message}item.message = Assert.message(item)result.push(item)return false},notEqual: function(type, path, actual, expected, result, message) {if (actual !== expected) return truevar item = {path: path,type: type,actual: actual,expected: expected,action: 'is not equal to',message: message}item.message = Assert.message(item)result.push(item)return false},greaterThan: function(type, path, actual, expected, result, message) {if (actual > expected) return truevar item = {path: path,type: type,actual: actual,expected: expected,action: 'is greater than',message: message}item.message = Assert.message(item)result.push(item)return false},lessThan: function(type, path, actual, expected, result, message) {if (actual < expected) return truevar item = {path: path,type: type,actual: actual,expected: expected,action: 'is less to',message: message}item.message = Assert.message(item)result.push(item)return false},greaterThanOrEqualTo: function(type, path, actual, expected, result, message) {if (actual >= expected) return truevar item = {path: path,type: type,actual: actual,expected: expected,action: 'is greater than or equal to',message: message}item.message = Assert.message(item)result.push(item)return false},lessThanOrEqualTo: function(type, path, actual, expected, result, message) {if (actual <= expected) return truevar item = {path: path,type: type,actual: actual,expected: expected,action: 'is less than or equal to',message: message}item.message = Assert.message(item)result.push(item)return false}}valid.Diff = Diffvalid.Assert = Assertmodule.exports = valid/***/ }, 微店分销系统如何自己做官网专业网站建设在线测试河西网站建设开发网址站网站公安备案外贸营销方案163企业邮箱客服网页设计具体方案网站建设华网天下制作作旅游b2b平台有哪些个人社保缴费证明龙岗区最新通告网址之家123上网主页项目实施方案系统小说设计师网站登录入口用ps制作网页教程网络服务商在哪广州番禺区天气免费设计自己名字头像美国服务器地址企业管理系统排名制作公司网站怎样收费图片在线制作二维码宁波seo服务快速推广广州公司注册办理中国建筑装饰装修官网怎么快速建网站教程免费app制作网站南京外贸推广

猜你喜欢

  • 友情链接:
  • app开发的价格 今日株洲新消息 字体设计网 外贸网站模板源码 西安企业排行榜 梵克雅宝手链