UNPKG

validate-types

Version:

Validate object properties against type schema

2 lines (1 loc) 3.78 kB
!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r():"function"==typeof define&&define.amd?define(r):(e=e||self).validateTypes=r()}(this,(function(){"use strict";function e(e,r){var t=!1,n=typeof e,a=function(e){t=n===e};switch(r){case String:a("string");break;case Number:a("number");break;case Boolean:a("boolean");break;case Function:a("function");break;case Array:t=Array.isArray(e);break;case Object:t="object"===n&&null!==e&&!Array.isArray(e);break;default:t=e instanceof r}return t}var r=function(e,r){for(var t=0,n=e.length;t<n&&!1!==r(e[t],t);t++);},t=function(e){return!0===Boolean(e)&&"object"==typeof e&&e.constructor===Object},n=function(e,r){return Object.keys(r).forEach((function(t){e[t]=r[t]})),e},a=function(e,r){return"function"==typeof e?e(r):e},i=[{name:"required",validate:function(e){return!e.testConfig||void 0!==e.fieldValue},message:function(e){return'Field "'+e.fieldName+'" is required'},skipFurtherTests:function(e){return!e.validateResult},testUndefinedValues:!0},{name:"type",validate:function(r){return function(r,t){if(Array.isArray(t)){for(var n=!1,a=0,i=t.length;a<i;a++)if(e(r,t[a])){n=!0;break}return n}return e(r,t)}(r.fieldValue,r.testConfig)},message:function(e){return'Field "'+e.fieldName+'" is of invalid type'},skipFurtherTests:function(e){return!e.validateResult}},{name:"validator",validate:function(e){return Boolean(e.testConfig(e.fieldValue,e))},message:function(e){return'Field "'+e.fieldName+'" failed validation'}}];return function e(s,o){s=s||i,o=o||{};var u=[],f={},d=Boolean(o.reportUndeclaredAsError),c=function(e){return'Field "'+e.fieldName+'" is not declared'},l=function(e,n,i){var s={},o=[],f={};n=n||{},i=i||{};return Object.keys(e).forEach((function(f){var d=e[f];!function(t,f){var d=!1===i.assignDefaults?void 0:a(f.default),c=void 0!==n[t]?n[t]:d,v=void 0===c;v||(s[t]=c),r(u,(function(r){var s=f[r.name];if(void 0!==s&&(!v||r.testUndefinedValues)){var u=null,d={fieldValue:c,fieldName:t,fieldSchema:f,testConfig:s,input:n,schema:e,validator:l,addChildError:function(e){(u=u||[]).push(e)}};if(!(d.validateResult=r.validate(d))){var m=i.messages&&i.messages[t]&&i.messages[t][r.name]||r.message,h={field:t,test:r.name,message:a(m,d)};u&&(h.errors=u),o.push(h)}return(!r.skipFurtherTests||!r.skipFurtherTests(d))&&void 0}}))}(f,t(d)?d:{type:d})})),Object.keys(n).forEach((function(r){e[r]||(f[r]=n[r],d&&o.push({field:r,test:"undeclared",message:a(c,{fieldName:r,fieldValue:n[r],input:n,schema:e,validator:l})}))})),{hasErrors:o.length>0,hasUndeclaredFields:Object.keys(f).length>0,errors:o,data:s,undeclaredFields:f}};return l.addTest=function(e,t){var a=n({},e),i=t&&(t.insertAfter||t.insertBefore);if(f[e.name]&&l.removeTest(e.name),i){var s=-1;if(r(u,(function(e,r){if(e.name===i)return s=r,!1})),!(s>=0))throw new Error('Test "'+i+'" not found');u.splice(t.insertAfter?s+1:s,0,a)}else u.push(a);return f[a.name]=a,l},l.removeTest=function(e){return delete f[e],u=u.filter((function(r){return r.name!==e})),l},l.getTest=function(e,r){var t=f[e];return t?r?t:n({},t):void 0},l.setTestMessage=function(e,r){return"undeclared"===e?c=r:l.getTest(e,!0).message=r,l},l.validateValue=function(e,r){var t=l({field:r},{field:e});return{hasErrors:t.hasErrors,errors:t.errors.map((function(e){return{test:e.test}}))}},l.extractDefaults=function(e){var r={};return Object.keys(e).forEach((function(n){var i=e[n],s=t(i)?i.default:void 0;if("undefined"!==typeof s){var o=a(s);void 0!==o&&(r[n]=o)}})),r},l.clone=function(){return e(u,{reportUndeclaredAsError:d,messages:{undeclared:c}})},l.reportUndeclaredAsError=function(e){return d=e,l},l.createValidator=e,s.forEach((function(e){l.addTest(e)})),Object.keys(o.messages||{}).forEach((function(e){l.setTestMessage(e,o.messages[e])})),l}()}));