type-guard-pro
Version:
Zero-dependency TypeScript runtime type validation with full type inference
1 lines • 2.69 kB
JavaScript
;function y(){return{object:r=>(o(r),t=>{try{return!(!t||"object"!=typeof t)&&Object.keys(r).every((e=>(0,r[e])(t[e])))}catch{return!1}}),primitive:r=>t=>{try{return r(t)}catch{return!1}},array:r=>t=>{try{return!!Array.isArray(t)&&t.every((t=>r(t)))}catch{return!1}},union:(r,t)=>e=>{try{return r(e)||t(e)}catch{return!1}},custom:r=>t=>{try{return r(t)}catch{return!1}},intersection:(...r)=>t=>{try{return r.every((r=>r(t)))}catch{return!1}},tuple:(...r)=>t=>{try{return!(!Array.isArray(t)||t.length!==r.length)&&r.every(((r,e)=>r(t[e])))}catch{return!1}},literal:r=>t=>{try{return t===r}catch{return!1}},record:(r,t)=>e=>{try{return!(!e||"object"!=typeof e||Array.isArray(e))&&Object.entries(e).every((([e,n])=>r(e)&&t(n)))}catch{return!1}},partial:r=>(o(r),t=>{try{if(!t||"object"!=typeof t)return!1;let e=t;for(let t in e)if(t in r&&!r[t](e[t]))return!1;return!0}catch{return!1}}),refined:(r,t)=>e=>{try{return!!r(e)&&t(e)}catch{return!1}}}}function o(r){if(!r||"object"!=typeof r)throw new exports.ValidationError("Invalid schema: must be an object");for(let t in r)if("function"!=typeof r[t])throw new exports.ValidationError(`Invalid validator for key "${t}": must be a function`)}function w(r){exports.plugins.set(r.name,r)}function d(r){return exports.plugins.get(r)}exports.VERSION={current:"1.0.1",name:"Type Guard Pro",description:"Zero-dependency TypeScript runtime type validation",repository:"https://github.com/your-username/type-guard-pro"},exports.guards={string:r=>"string"==typeof r,number:r=>"number"==typeof r&&!isNaN(r),boolean:r=>"boolean"==typeof r,null:r=>null===r,undefined:r=>void 0===r,date:r=>r instanceof Date&&!isNaN(r.getTime()),bigint:r=>"bigint"==typeof r,symbol:r=>"symbol"==typeof r,function:r=>"function"==typeof r,object:r=>"object"==typeof r&&null!==r,integer:r=>"number"==typeof r&&!isNaN(r)&&Number.isInteger(r),positiveNumber:r=>"number"==typeof r&&!isNaN(r)&&r>0,negativeNumber:r=>"number"==typeof r&&!isNaN(r)&&r<0,nonEmptyString:r=>"string"==typeof r&&r.length>0,email:r=>"string"==typeof r&&/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(r),url:r=>{if("string"!=typeof r)return!1;try{return new URL(r),!0}catch{return!1}},uuid:r=>"string"==typeof r&&/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(r),iso8601Date:r=>"string"==typeof r&&/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[+-]\d{2}:\d{2})?)?$/.test(r)},exports.ValidationError=class extends Error{constructor(r,t){super(r),this.name="ValidationError",t?.cause&&"cause"in Error&&Object.defineProperty(this,"cause",{value:t.cause,configurable:!0,writable:!0})}},exports.plugins=new Map,exports.createGuard=y,exports.getPlugin=d,exports.registerPlugin=w;