UNPKG

stnl

Version:

A simple, opinionated type validator built for performance

1 lines 1.48 kB
let __null={const:`null`};let __create_const=e=>({const:e});let __loadLimits=(e,t,n)=>{if(t.length>n)do{let r=t[n++];let i=r[0];if(i===0)e.minimum=r[1];else if(i===1)e.maximum=r[1];else if(i===2)e.minLength=r[1];else if(i===3)e.maxLength=r[1];else if(i===4)e.minLength=e.maxLength=r[1]}while(n<t.length);return e};let __parse=(e,r)=>{if(e===0)return __loadLimits({type:`integer`},r,1);if(e===2)return __loadLimits({type:`number`},r,1);if(e===4)return __loadLimits({type:`string`},r,1);if(e===6)return{type:`boolean`};if(e===10)return{anyOf:r[1].map(__create_const)};if(e===12)return __create_const(r[1]);if(e===14)return __loadLimits({type:`array`,items:f(r[1])},r,2);if(e===16){let e={};let t=r[1];for(let n in t)e[n]=f(t[n]);let n=r[2];if(n!=null)for(let t in n)e[t]=f(n[t]);return{type:`object`,properties:e,required:Object.keys(t)}}if(e===18)return{type:`array`,prefixItems:r[1].map(f),items:false};if(e===20){let e=[];let n=r[1];let a=r[2];for(const r in a){let o={};o[n]=__create_const(r);let s=a[r];let c=s[1];let l=[];for(const e in c){o[e]=f(c[e]);l.push(e)}let u=s[2];if(u!=null)for(let e in u)o[e]=f(u[e]);e.push({properties:o,required:l})}return{type:`object`,required:[n],anyOf:e}}if(e===22)return{$ref:r[1]};if(e===24){let e={};let t=r[2];for(const n in t){let r=f(t[n]);if(r.$id==null)r.$id=n;else r={$id:n,anyOf:[r]};e[n]=r}let n=f(r[1]);n.$id=``;n.$defs=e;return n}return{}};let f=t=>(t[0]&1)===1?{anyOf:[__null,__parse(t[0]-1,t)]}:__parse(t[0],t);export default f;