stnl
Version:
A simple, opinionated type validator built for performance
1 lines • 1.98 kB
JavaScript
let __null={const:`null`};let __create_const=v=>({const:v});let __loadLimits=(o,schema,idx)=>{if(schema.length>idx)do{let limit=schema[idx++];let id=limit[0];if(id===0)o.minimum=limit[1];else if(id===1)o.maximum=limit[1];else if(id===2)o.minLength=limit[1];else if(id===3)o.maxLength=limit[1];else if(id===4)o.minLength=o.maxLength=limit[1]}while(idx<schema.length);return o};let __parse=(id,t)=>{if(id===0)return __loadLimits({type:`integer`},t,1);if(id===2)return __loadLimits({type:`number`},t,1);if(id===4)return __loadLimits({type:`string`},t,1);if(id===6)return{type:`boolean`};if(id===10)return{anyOf:t[1].map(__create_const)};if(id===12)return __create_const(t[1]);if(id===14)return __loadLimits({type:`array`,items:f(t[1])},t,2);if(id===16){let props={};let requiredProps=t[1];for(let key in requiredProps)props[key]=f(requiredProps[key]);let optionalProps=t[2];if(optionalProps!=null)for(let key in optionalProps)props[key]=f(optionalProps[key]);return{type:`object`,properties:props,required:Object.keys(requiredProps)}}if(id===18)return{type:`array`,prefixItems:t[1].map(f),items:false};if(id===20){let schemas=[];let tag=t[1];let map=t[2];for(const value in map){let props={};props[tag]=__create_const(value);let type=map[value];let requiredProps=type[1];let requiredList=[];for(const key in requiredProps){props[key]=f(requiredProps[key]);requiredList.push(key)}let optionalProps=type[2];if(optionalProps!=null)for(let key in optionalProps)props[key]=f(optionalProps[key]);schemas.push({properties:props,required:requiredList})}return{type:`object`,required:[tag],anyOf:schemas}}if(id===22)return{$ref:t[1]};if(id===24){let defs={};let refs=t[2];for(const name in refs){let subschema=f(refs[name]);if(subschema.$id==null)subschema.$id=name;else subschema={$id:name,anyOf:[subschema]};defs[name]=subschema}let root=f(t[1]);root.$id=``;root.$defs=defs;return root}return{}};let f=t=>(t[0]&1)===1?{anyOf:[__null,__parse(t[0]-1,t)]}:__parse(t[0],t);export default f;