{"_id":"@illavv/run_typer","_rev":"27-b962e8b8f3aedba5b080871b3f019fc1","name":"@illavv/run_typer","dist-tags":{"latest":"4.1.1"},"versions":{"0.0.3":{"name":"@illavv/run_typer","version":"0.0.3","keywords":["typer","type_validator","typescript","type-checking","validation","utility"],"author":{"name":"Michael Lavigna"},"license":"MIT","_id":"@illavv/run_typer@0.0.3","maintainers":[{"name":"illavv","email":"michael.lavigna@hotmail.it"}],"homepage":"https://github.com/lavv425/Typer","bugs":{"url":"https://github.com/lavv425/Typer/issues"},"dist":{"shasum":"3f2ff94280ce63431bf49b87561adc9b33ea2b29","tarball":"https://registry.npmjs.org/@illavv/run_typer/-/run_typer-0.0.3.tgz","fileCount":8,"integrity":"sha512-Q9SUbrJwnLmL8RXQbddjm5YLk8FybK9nLr0uZHoQntDEfZl3AI78Zpa5O+RJNz72eqOfwoRKpiZYraGr4gLsVA==","signatures":[{"sig":"MEUCIAICusC5QIsIi6fLdmKPaEsQUUrBCDxZG2pLLDcZq3qlAiEArY0o2Gt53s9b/Fth9Avm++o9ILm5EqYyf4uoH+9r0sE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":73459},"main":"Typer.js","types":"Typer.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"tsc","prepare":"npm run build"},"_npmUser":{"name":"illavv","email":"michael.lavigna@hotmail.it"},"repository":{"url":"git+https://github.com/lavv425/Typer.git","type":"git"},"_npmVersion":"10.8.2","description":"A robust TypeScript class for type checking and validation","directories":{},"_nodeVersion":"22.6.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/run_typer_0.0.3_1723212111961_0.23891514912134526","host":"s3://npm-registry-packages"}},"1.0.0":{"name":"@illavv/run_typer","version":"1.0.0","keywords":["typer","type_validator","typescript","type-checking","validation","utility"],"author":{"name":"Michael Lavigna"},"license":"MIT","_id":"@illavv/run_typer@1.0.0","maintainers":[{"name":"illavv","email":"michael.lavigna@hotmail.it"}],"homepage":"https://github.com/lavv425/Typer","bugs":{"url":"https://github.com/lavv425/Typer/issues"},"dist":{"shasum":"3072993a75078e65075eb6167fa367b836cf678b","tarball":"https://registry.npmjs.org/@illavv/run_typer/-/run_typer-1.0.0.tgz","fileCount":17,"integrity":"sha512-5fSk83SbSDy0HFcs2e701SFHJypXsN74RTIaRmoG/Nw1IJi+bYp63GHK1mO1y6oRu3ipJqaUv1By/5PkUvQTig==","signatures":[{"sig":"MEUCIQD3vrLfP3VQ42CWJSGUNwA/7DMoyVmAaNlRTtFCIzNvrgIgTu/UYk7dzSX6Gdugtp8wZP4vehb/a15Uw4hsZ878m/U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":78827},"main":"dist/Typer.js","types":"dist/Typer.d.ts","gitHead":"f0237eb02c3c4c4ef522ae3efc93afd686f45e14","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"rollup -c"},"_npmUser":{"name":"illavv","email":"michael.lavigna@hotmail.it"},"repository":{"url":"git+https://github.com/lavv425/Typer.git","type":"git"},"_npmVersion":"11.0.0","description":"A robust TypeScript class for type checking and validation","directories":{},"_nodeVersion":"23.3.0","dependencies":{"tslib":"^2.8.1"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^2.79.2","typescript":"^5.7.3","rollup-plugin-terser":"^7.0.2","@rollup/plugin-commonjs":"^28.0.2","@rollup/plugin-typescript":"^12.1.2","@rollup/plugin-node-resolve":"^16.0.0"},"_npmOperationalInternal":{"tmp":"tmp/run_typer_1.0.0_1738509218758_0.37596003118255594","host":"s3://npm-registry-packages-npm-production"}},"2.4.1":{"name":"@illavv/run_typer","version":"2.4.1","keywords":["typer","type_validator","typescript","type-checking","validation","utility"],"author":{"name":"Michael Lavigna"},"license":"MIT","_id":"@illavv/run_typer@2.4.1","maintainers":[{"name":"illavv","email":"michael.lavigna@hotmail.it"}],"homepage":"https://github.com/lavv425/Typer","bugs":{"url":"https://github.com/lavv425/Typer/issues"},"dist":{"shasum":"e843603f0a44d06f36f454998a4b669c02e66705","tarball":"https://registry.npmjs.org/@illavv/run_typer/-/run_typer-2.4.1.tgz","fileCount":19,"integrity":"sha512-9LN5qoKfmBfBTIqwaJLZaPytiElHt3Imen8rErPNyV1pXdrbaLM8uR7o8JJgASvTU5H3xMt0zPXuoblUMe8DpA==","signatures":[{"sig":"MEUCIQDwNEF1Q2r0P0duYwwZVyzmeETFUj8CjP6ts9lJLHgFBgIgQbxxscrLaYb4umwS/4Hr1VQ6e7Ep+jbl3SW4m1o32is=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83992},"main":"dist/Typer.js","types":"dist/Typer.d.ts","gitHead":"f0237eb02c3c4c4ef522ae3efc93afd686f45e14","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"rollup -c","build:docs":"rollup -c && npx typedoc"},"_npmUser":{"name":"illavv","email":"michael.lavigna@hotmail.it"},"repository":{"url":"git+https://github.com/lavv425/Typer.git","type":"git"},"_npmVersion":"11.0.0","description":"A robust TypeScript class for type checking and validation","directories":{},"_nodeVersion":"23.3.0","dependencies":{"tslib":"^2.8.1"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^2.79.2","typedoc":"^0.27.6","typescript":"^5.7.3","rollup-plugin-terser":"^7.0.2","@rollup/plugin-commonjs":"^28.0.2","@rollup/plugin-typescript":"^12.1.2","@rollup/plugin-node-resolve":"^16.0.0"},"_npmOperationalInternal":{"tmp":"tmp/run_typer_2.4.1_1738510843710_0.3740339342254184","host":"s3://npm-registry-packages-npm-production"}},"2.4.2":{"name":"@illavv/run_typer","version":"2.4.2","keywords":["typer","type_validator","typescript","type-checking","validation","utility"],"author":{"name":"Michael Lavigna"},"license":"MIT","_id":"@illavv/run_typer@2.4.2","maintainers":[{"name":"illavv","email":"michael.lavigna@hotmail.it"}],"homepage":"https://github.com/lavv425/Typer","bugs":{"url":"https://github.com/lavv425/Typer/issues"},"dist":{"shasum":"42dadc04c3afb86caf0531709c735a37fb0e2306","tarball":"https://registry.npmjs.org/@illavv/run_typer/-/run_typer-2.4.2.tgz","fileCount":17,"integrity":"sha512-GuwOK7NFtEfrhnsXN8th1A3uNO0n7hnvIHEil0ZQ+N63I92GteOFLd7QFgtuvG9DG1uvpJX4p8Z4ZLTPcQ+9Qg==","signatures":[{"sig":"MEYCIQCIhrWTQUD16l00FhLvnDd9uRMdu0oTNP/EHz0QdKP4WgIhAMKa8I7hPQ6Sf7gZ9jG9+FWgIdRVylvAJlXWlHDTUNDJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":79884},"main":"dist/Typer.js","types":"dist/Typer.d.ts","gitHead":"570a247caa9dc1ac5b11d85ccc74ed45e8fcb868","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"rollup -c","build:docs":"rollup -c && npx typedoc"},"_npmUser":{"name":"illavv","email":"michael.lavigna@hotmail.it"},"repository":{"url":"git+https://github.com/lavv425/Typer.git","type":"git"},"_npmVersion":"11.1.0","description":"A robust TypeScript class for type checking and validation","directories":{},"_nodeVersion":"22.8.0","dependencies":{"tslib":"^2.8.1"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^2.79.2","typedoc":"^0.27.6","typescript":"^5.7.3","rollup-plugin-terser":"^7.0.2","@rollup/plugin-commonjs":"^28.0.2","@rollup/plugin-typescript":"^12.1.2","@rollup/plugin-node-resolve":"^16.0.0"},"_npmOperationalInternal":{"tmp":"tmp/run_typer_2.4.2_1739188389034_0.8509340999729804","host":"s3://npm-registry-packages-npm-production"}},"2.4.3":{"name":"@illavv/run_typer","version":"2.4.3","keywords":["typer","type_validator","typescript","type-checking","validation","utility"],"author":{"name":"Michael Lavigna"},"license":"MIT","_id":"@illavv/run_typer@2.4.3","maintainers":[{"name":"illavv","email":"michael.lavigna@hotmail.it"}],"homepage":"https://github.com/lavv425/Typer","bugs":{"url":"https://github.com/lavv425/Typer/issues"},"dist":{"shasum":"d0a20e5a15d4a52d8ad891719f098126ed8cac2d","tarball":"https://registry.npmjs.org/@illavv/run_typer/-/run_typer-2.4.3.tgz","fileCount":17,"integrity":"sha512-KLxV65ensJVUASY6jX42WxClyglQWRLiPsAMu1u5rG/22K7YKSm1H5q47PCwMsxTiMERWu8LvgQs9CfVDXvEVQ==","signatures":[{"sig":"MEUCIEoFpqrXBBmzMfF9nP62ZNIcQfXIk29dSEHbpsaWXF+lAiEAnBXQSeKDAqfKqIWztun3gmYi0NUu4LrRaNVqg2F+VVI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":79884},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"570a247caa9dc1ac5b11d85ccc74ed45e8fcb868","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"rollup -c","build:docs":"rollup -c && npx typedoc"},"_npmUser":{"name":"illavv","email":"michael.lavigna@hotmail.it"},"repository":{"url":"git+https://github.com/lavv425/Typer.git","type":"git"},"_npmVersion":"11.1.0","description":"A robust TypeScript class for type checking and validation","directories":{},"_nodeVersion":"23.7.0","dependencies":{"tslib":"^2.8.1"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^2.79.2","typedoc":"^0.27.6","typescript":"^5.7.3","rollup-plugin-terser":"^7.0.2","@rollup/plugin-commonjs":"^28.0.2","@rollup/plugin-typescript":"^12.1.2","@rollup/plugin-node-resolve":"^16.0.0"},"_npmOperationalInternal":{"tmp":"tmp/run_typer_2.4.3_1739188803377_0.8037680696403868","host":"s3://npm-registry-packages-npm-production"}},"2.4.4":{"name":"@illavv/run_typer","version":"2.4.4","keywords":["typer","type_validator","typescript","type-checking","validation","utility"],"author":{"name":"Michael Lavigna"},"license":"MIT","_id":"@illavv/run_typer@2.4.4","maintainers":[{"name":"illavv","email":"michael.lavigna@hotmail.it"}],"homepage":"https://github.com/lavv425/Typer","bugs":{"url":"https://github.com/lavv425/Typer/issues"},"dist":{"shasum":"82a5fdaea8913586d03ea8362543afc5316ceee2","tarball":"https://registry.npmjs.org/@illavv/run_typer/-/run_typer-2.4.4.tgz","fileCount":17,"integrity":"sha512-Pi8dO3zHv9eCrcVk/ik8LDNLQx3q6K7CuQmo4Xrl4GqL4wIW4SVO21NZNQNF7tQ6OEcbvJCQIm5rM65uKA6kPA==","signatures":[{"sig":"MEQCIC8k2NJ4kPsPyyZguYARhtYaaUkHz2VHtPl2847hAKpJAiANOO05ozyUCYXGW7fnvkPOaeNZDIobfDo8/Vub4PgG4g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":79896},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"570a247caa9dc1ac5b11d85ccc74ed45e8fcb868","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"rollup -c","build:docs":"rollup -c && npx typedoc"},"_npmUser":{"name":"illavv","email":"michael.lavigna@hotmail.it"},"repository":{"url":"git+https://github.com/lavv425/Typer.git","type":"git"},"_npmVersion":"11.1.0","description":"A robust TypeScript class for type checking and validation","directories":{},"_nodeVersion":"23.7.0","dependencies":{"tslib":"^2.8.1"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^2.79.2","typedoc":"^0.27.6","typescript":"^5.7.3","rollup-plugin-terser":"^7.0.2","@rollup/plugin-commonjs":"^28.0.2","@rollup/plugin-typescript":"^12.1.2","@rollup/plugin-node-resolve":"^16.0.0"},"_npmOperationalInternal":{"tmp":"tmp/run_typer_2.4.4_1739189033351_0.38974378200595505","host":"s3://npm-registry-packages-npm-production"}},"2.4.5":{"name":"@illavv/run_typer","version":"2.4.5","keywords":["typer","type_validator","typescript","type-checking","validation","utility"],"author":{"name":"Michael Lavigna"},"license":"MIT","_id":"@illavv/run_typer@2.4.5","maintainers":[{"name":"illavv","email":"michael.lavigna@hotmail.it"}],"homepage":"https://github.com/lavv425/Typer","bugs":{"url":"https://github.com/lavv425/Typer/issues"},"dist":{"shasum":"a41589fe924d6f8b3f2d96632bdbd9fb565aeca2","tarball":"https://registry.npmjs.org/@illavv/run_typer/-/run_typer-2.4.5.tgz","fileCount":17,"integrity":"sha512-GZ+fPkLHAwXANqxU8HeKeumqIYdFuKAnu9WNpVeTv3mBOQb6/ztTUGz7+f7+WNSy1cXsC7qznv8RJrj9WP9gYg==","signatures":[{"sig":"MEUCIAhBPrwK21inko+/X6SKS6MX58Fa3Xd6cxxJjtHnfyrsAiEAo2KmbLXMvF1rsStcw4bjaXMgIFcpQzNFNXuDLNwUGSI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":80052},"main":"dist/index.min.js","types":"dist/index.d.ts","module":"dist/index.esm.min.js","exports":{"import":"./dist/index.esm.min.js","require":"./dist/index.cjs.min.js"},"gitHead":"570a247caa9dc1ac5b11d85ccc74ed45e8fcb868","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"rollup -c","build:docs":"rollup -c && npx typedoc"},"_npmUser":{"name":"illavv","email":"michael.lavigna@hotmail.it"},"repository":{"url":"git+https://github.com/lavv425/Typer.git","type":"git"},"_npmVersion":"11.1.0","description":"A robust TypeScript class for type checking and validation","directories":{},"_nodeVersion":"22.8.0","dependencies":{"tslib":"^2.8.1"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^2.79.2","typedoc":"^0.27.6","typescript":"^5.7.3","rollup-plugin-terser":"^7.0.2","@rollup/plugin-commonjs":"^28.0.2","@rollup/plugin-typescript":"^12.1.2","@rollup/plugin-node-resolve":"^16.0.0"},"_npmOperationalInternal":{"tmp":"tmp/run_typer_2.4.5_1739300231430_0.21647198589476968","host":"s3://npm-registry-packages-npm-production"}},"2.4.6":{"name":"@illavv/run_typer","version":"2.4.6","keywords":["typer","type_validator","typescript","type-checking","validation","utility"],"author":{"name":"Michael Lavigna"},"license":"MIT","_id":"@illavv/run_typer@2.4.6","maintainers":[{"name":"illavv","email":"michael.lavigna@hotmail.it"}],"homepage":"https://github.com/lavv425/Typer","bugs":{"url":"https://github.com/lavv425/Typer/issues"},"dist":{"shasum":"630dfca2b125e63bf93490c71a5f5b1ac1e4e584","tarball":"https://registry.npmjs.org/@illavv/run_typer/-/run_typer-2.4.6.tgz","fileCount":17,"integrity":"sha512-oKwwayVpandqgSuxWdJRw34nLVGjq7Ig6tOiMknkqHMR9xb+tXYTAlVNxnbfIR0RBCY/jm2+4K+TrdptggqTCA==","signatures":[{"sig":"MEUCIQD+j4EwEUlWXZHtdZ2E7nH+m3i7ekQOm3J8gfh8WznEbgIgMUcVMAcisUDQcM81g03axCDXhjvzeZjQ9T/fTt+R+us=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":80090},"main":"dist/index.min.js","types":"dist/index.d.ts","module":"dist/index.esm.min.js","exports":{"types":"./dist/index.d.ts","import":"./dist/index.esm.min.js","require":"./dist/index.cjs.min.js"},"gitHead":"570a247caa9dc1ac5b11d85ccc74ed45e8fcb868","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"rollup -c","build:docs":"rollup -c && npx typedoc"},"_npmUser":{"name":"illavv","email":"michael.lavigna@hotmail.it"},"repository":{"url":"git+https://github.com/lavv425/Typer.git","type":"git"},"_npmVersion":"11.1.0","description":"A robust TypeScript class for type checking and validation","directories":{},"_nodeVersion":"22.8.0","dependencies":{"tslib":"^2.8.1"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^2.79.2","typedoc":"^0.27.6","typescript":"^5.7.3","rollup-plugin-terser":"^7.0.2","@rollup/plugin-commonjs":"^28.0.2","@rollup/plugin-typescript":"^12.1.2","@rollup/plugin-node-resolve":"^16.0.0"},"_npmOperationalInternal":{"tmp":"tmp/run_typer_2.4.6_1739300588527_0.12319911923433313","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"@illavv/run_typer","version":"3.0.0","keywords":["typer","type_validator","typescript","type-checking","validation","utility"],"author":{"name":"Michael Lavigna"},"license":"MIT","_id":"@illavv/run_typer@3.0.0","maintainers":[{"name":"illavv","email":"michael.lavigna@hotmail.it"}],"homepage":"https://github.com/lavv425/Typer","bugs":{"url":"https://github.com/lavv425/Typer/issues"},"dist":{"shasum":"886e374c3d90f804bd34462be0166e5873d16903","tarball":"https://registry.npmjs.org/@illavv/run_typer/-/run_typer-3.0.0.tgz","fileCount":45,"integrity":"sha512-y55dLjHEJWLK/Oqy7Nmxz9h+u83XE6cZGNdkAUGNqk0L+yvyWIfY6DWZpFVdiaolKUDL0BaDund2UVO27JSblA==","signatures":[{"sig":"MEUCIASTHQalcIfUPd8BBDOz3Jc6mew9REV8tmqCS1FRFnCBAiEAybv4tV/d32KstQWIbcWIEbso3/pCxw0eb+YoZwyp6PI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":135631},"main":"dist/Typer.js","types":"dist/Typer.d.ts","gitHead":"64a7ede05ca8487984df7eb477eac2c8d656c663","scripts":{"test":"jest","build":"rollup -c","build:docs":"rollup -c && npx typedoc","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"illavv","email":"michael.lavigna@hotmail.it"},"deprecated":"Version not supported. Upgrade to @latest","repository":{"url":"git+https://github.com/lavv425/Typer.git","type":"git"},"_npmVersion":"11.6.0","description":"A robust TypeScript class for type checking and validation","directories":{},"_nodeVersion":"24.9.0","dependencies":{"tslib":"^2.8.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","rollup":"^4.52.3","ts-jest":"^29.4.4","typedoc":"0.28.13","typescript":"^5.9.3","@types/jest":"^30.0.0","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^28.0.6","@rollup/plugin-typescript":"^12.1.4","@rollup/plugin-node-resolve":"^16.0.1"},"_npmOperationalInternal":{"tmp":"tmp/run_typer_3.0.0_1759397350884_0.1891537784078905","host":"s3://npm-registry-packages-npm-production"}},"3.0.1":{"name":"@illavv/run_typer","version":"3.0.1","keywords":["typer","type_validator","typescript","type-checking","validation","utility"],"author":{"name":"Michael Lavigna"},"license":"MIT","_id":"@illavv/run_typer@3.0.1","maintainers":[{"name":"illavv","email":"michael.lavigna@hotmail.it"}],"homepage":"https://github.com/lavv425/Typer","bugs":{"url":"https://github.com/lavv425/Typer/issues"},"dist":{"shasum":"fa104de1bf37ef1f111b563cfb796a8e22769101","tarball":"https://registry.npmjs.org/@illavv/run_typer/-/run_typer-3.0.1.tgz","fileCount":45,"integrity":"sha512-0Ujzd0EzleiFDrgle1ugb2T7cEuLrXBFlJrvT7Ee6yky2sqGz9AoE+ue9L46BEbAOlYmmsaWOAnJVNIwB/uufA==","signatures":[{"sig":"MEQCIGxE7Df8zvr/SCskxt+6SzwVPDlFXhEd/7EnECJv03RcAiA30uAEIdD4hjVEBVdfdob8HDbra812irv1EISi6yJiHw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":142999},"main":"dist/Typer.js","types":"dist/Typer.d.ts","gitHead":"22723c77b7aac44ca225eb9d01f96da8a282135d","scripts":{"test":"jest","build":"rollup -c","build:docs":"rollup -c && npx typedoc","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"illavv","email":"michael.lavigna@hotmail.it"},"deprecated":"Version not supported. Upgrade to @latest","repository":{"url":"git+https://github.com/lavv425/Typer.git","type":"git"},"_npmVersion":"11.6.0","description":"A robust TypeScript class for type checking and validation","directories":{},"_nodeVersion":"24.9.0","dependencies":{"tslib":"^2.8.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","rollup":"^4.52.3","ts-jest":"^29.4.4","typedoc":"0.28.13","typescript":"^5.9.3","@types/jest":"^30.0.0","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^28.0.6","@rollup/plugin-typescript":"^12.1.4","@rollup/plugin-node-resolve":"^16.0.1"},"_npmOperationalInternal":{"tmp":"tmp/run_typer_3.0.1_1759398140831_0.542533976470871","host":"s3://npm-registry-packages-npm-production"}},"3.0.2":{"name":"@illavv/run_typer","version":"3.0.2","keywords":["typer","type_validator","typescript","type-checking","validation","utility"],"author":{"name":"Michael Lavigna"},"license":"MIT","_id":"@illavv/run_typer@3.0.2","maintainers":[{"name":"illavv","email":"michael.lavigna@hotmail.it"}],"homepage":"https://github.com/lavv425/Typer","bugs":{"url":"https://github.com/lavv425/Typer/issues"},"dist":{"shasum":"b95bb568e7fd120b40bbc468b41909d9cba2065e","tarball":"https://registry.npmjs.org/@illavv/run_typer/-/run_typer-3.0.2.tgz","fileCount":45,"integrity":"sha512-06fqv+qTY3qA7llsZ4G/C4LK5yMZmaS40I94UKEx7JeP2MVIKqfvNko4HuLBBN9hvCBeZH4NbWbPnYbr/H0TgA==","signatures":[{"sig":"MEQCIBrxOnBHQyOy17bHtwJNXeA8sygOjCH1fDMyTWNeVjq+AiB8PVSxPrmfQWtR4ArTfMGCoJKLF6FdChBFBGmTDv5+Iw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":143506},"main":"dist/Typer.js","types":"dist/Typer.d.ts","gitHead":"5e50007ee9dddf2f2e83f13ca3e988cbf8aa11a5","scripts":{"test":"jest","build":"rollup -c","build:docs":"rollup -c && npx typedoc","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"illavv","email":"michael.lavigna@hotmail.it"},"deprecated":"Version not supported. Upgrade to @latest","repository":{"url":"git+https://github.com/lavv425/Typer.git","type":"git"},"_npmVersion":"11.6.0","description":"A robust TypeScript class for type checking and validation","directories":{},"_nodeVersion":"24.9.0","dependencies":{"tslib":"^2.8.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","rollup":"^4.52.3","ts-jest":"^29.4.4","typedoc":"0.28.13","typescript":"^5.9.3","@types/jest":"^30.0.0","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^28.0.6","@rollup/plugin-typescript":"^12.1.4","@rollup/plugin-node-resolve":"^16.0.1"},"_npmOperationalInternal":{"tmp":"tmp/run_typer_3.0.2_1759399253805_0.1262491656429714","host":"s3://npm-registry-packages-npm-production"}},"3.0.3":{"name":"@illavv/run_typer","version":"3.0.3","keywords":["typer","type_validator","typescript","type-checking","validation","utility"],"author":{"name":"Michael Lavigna"},"license":"MIT","_id":"@illavv/run_typer@3.0.3","maintainers":[{"name":"illavv","email":"michael.lavigna@hotmail.it"}],"homepage":"https://github.com/lavv425/Typer","bugs":{"url":"https://github.com/lavv425/Typer/issues"},"dist":{"shasum":"d7fe1f86ed3f78ebf164dfcdcdbb4130ce6ac3ed","tarball":"https://registry.npmjs.org/@illavv/run_typer/-/run_typer-3.0.3.tgz","fileCount":17,"integrity":"sha512-1C9Elm/CmaTcm+yT4tGgVQF9eDqdEVBKBP26UxI/2gfGgwYWEZVxJKZVDSvxf3yJSp5GuYUWide2Hn93YudcNw==","signatures":[{"sig":"MEUCIGSmORHvDjnEyWoyuKlXX3P3CpftcLO+5Z6Skj7ec1d3AiEAiY6EYcfDXG9u3jjz09mKhDNbkmJFLKqGPTsT4FueIOs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":113596},"main":"dist/Typer.js","types":"dist/Typer.d.ts","gitHead":"f5dc45d8c61f0008a841487798562dd1b5496b1b","scripts":{"test":"jest","build":"rollup -c","build:docs":"rollup -c && npx typedoc","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"illavv","email":"michael.lavigna@hotmail.it"},"deprecated":"Version not supported. Upgrade to @latest","repository":{"url":"git+https://github.com/lavv425/Typer.git","type":"git"},"_npmVersion":"11.6.0","description":"A robust TypeScript class for type checking and validation","directories":{},"_nodeVersion":"24.9.0","dependencies":{"tslib":"^2.8.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","rollup":"^4.52.3","ts-jest":"^29.4.4","typedoc":"0.28.13","typescript":"^5.9.3","@types/jest":"^30.0.0","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^28.0.6","@rollup/plugin-typescript":"^12.1.4","@rollup/plugin-node-resolve":"^16.0.1"},"_npmOperationalInternal":{"tmp":"tmp/run_typer_3.0.3_1759401416462_0.8991688511458387","host":"s3://npm-registry-packages-npm-production"}},"3.0.4":{"name":"@illavv/run_typer","version":"3.0.4","keywords":["typer","type_validator","typescript","type-checking","validation","utility"],"author":{"name":"Michael Lavigna"},"license":"MIT","_id":"@illavv/run_typer@3.0.4","maintainers":[{"name":"illavv","email":"michael.lavigna@hotmail.it"}],"homepage":"https://github.com/lavv425/Typer","bugs":{"url":"https://github.com/lavv425/Typer/issues"},"dist":{"shasum":"57001a53b804c0a840c19bd432d97ccb2a317192","tarball":"https://registry.npmjs.org/@illavv/run_typer/-/run_typer-3.0.4.tgz","fileCount":17,"integrity":"sha512-ru2qBuuXZDaBp8FOtD6a2r5enGYpXQR/tX9EZ0NDql7PI70NLNXZK72ElMD/NlE0M8lCh24kHs13zIP9vUGCqg==","signatures":[{"sig":"MEUCIQDWeNS8g5oHf4Vpfrr3odo4gc3oKOjpq2H2YhBxrABeJwIgdxKj1XN+CxnltnOYH+vSUaeKZiwQ6Ou2K1/HQLCKM9Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":113913},"main":"dist/Typer.cjs.min.js","types":"dist/Typer.d.ts","module":"dist/Typer.esm.min.js","browser":"dist/Typer.min.js","exports":{".":{"types":"./dist/Typer.d.ts","import":"./dist/Typer.esm.min.js","browser":"./dist/Typer.min.js","require":"./dist/Typer.cjs.min.js"}},"gitHead":"758639e053f16706b3d0e04fb5716104436d0b71","scripts":{"test":"jest","build":"rollup -c","build:docs":"rollup -c && npx typedoc","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"illavv","email":"michael.lavigna@hotmail.it"},"repository":{"url":"git+https://github.com/lavv425/Typer.git","type":"git"},"_npmVersion":"11.6.0","description":"A robust TypeScript class for type checking and validation","directories":{},"_nodeVersion":"24.9.0","dependencies":{"tslib":"^2.8.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","rollup":"^4.52.3","ts-jest":"^29.4.4","typedoc":"0.28.13","typescript":"^5.9.3","@types/jest":"^30.0.0","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^28.0.6","@rollup/plugin-typescript":"^12.1.4","@rollup/plugin-node-resolve":"^16.0.1"},"_npmOperationalInternal":{"tmp":"tmp/run_typer_3.0.4_1759401872574_0.6397377435115541","host":"s3://npm-registry-packages-npm-production"}},"3.2.3":{"name":"@illavv/run_typer","version":"3.2.3","keywords":["typer","type_validator","typescript","type-checking","validation","utility"],"author":{"name":"Michael Lavigna"},"license":"MIT","_id":"@illavv/run_typer@3.2.3","maintainers":[{"name":"illavv","email":"michael.lavigna@hotmail.it"}],"homepage":"https://github.com/lavv425/Typer","bugs":{"url":"https://github.com/lavv425/Typer/issues"},"dist":{"shasum":"5c0dc527a28f9866c42ec6ca0cfa23e0710d837e","tarball":"https://registry.npmjs.org/@illavv/run_typer/-/run_typer-3.2.3.tgz","fileCount":17,"integrity":"sha512-1BabFDHP6gCxArkxnJ6Cpslhpfw4mujIP+i463LD8ObgPFf5fdrncxG8tMqNtEwe7UnNCZvofUGm1k9mj8RLsg==","signatures":[{"sig":"MEQCIDRRg9ftmfMuTbhUZJLV81zzSP+ezaiYczsJXcgOx5OjAiBi/HFVY+bSvFumSwTe0O8ZVBjM2yqilQDUWznrgW9U+A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":216226},"main":"dist/Typer.cjs.min.js","types":"dist/Typer.d.ts","module":"dist/Typer.esm.min.js","browser":"dist/Typer.min.js","exports":{".":{"types":"./dist/Typer.d.ts","import":"./dist/Typer.esm.min.js","browser":"./dist/Typer.min.js","require":"./dist/Typer.cjs.min.js"}},"gitHead":"92413eab1a2f3ca7289d3fe1852c1ed8c5827e0f","scripts":{"test":"jest","build":"rollup -c","build:docs":"rollup -c && npx typedoc","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"illavv","email":"michael.lavigna@hotmail.it"},"repository":{"url":"git+https://github.com/lavv425/Typer.git","type":"git"},"_npmVersion":"11.12.1","description":"A robust TypeScript class for type checking and validation","directories":{},"_nodeVersion":"22.18.0","dependencies":{"tslib":"^2.8.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.3.0","rollup":"^4.60.2","ts-jest":"^29.4.9","typedoc":"0.28.19","typescript":"^6.0.3","@types/jest":"^30.0.0","@rollup/plugin-terser":"^1.0.0","@rollup/plugin-commonjs":"^29.0.2","@rollup/plugin-typescript":"^12.3.0","@rollup/plugin-node-resolve":"^16.0.3"},"_npmOperationalInternal":{"tmp":"tmp/run_typer_3.2.3_1777330098415_0.9493167292837774","host":"s3://npm-registry-packages-npm-production"}},"4.0.0":{"name":"@illavv/run_typer","version":"4.0.0","keywords":["typer","type_validator","typescript","type-checking","validation","utility"],"author":{"name":"Michael Lavigna"},"license":"MIT","_id":"@illavv/run_typer@4.0.0","maintainers":[{"name":"illavv","email":"michael.lavigna@hotmail.it"}],"homepage":"https://github.com/lavv425/Typer","bugs":{"url":"https://github.com/lavv425/Typer/issues"},"dist":{"shasum":"1ae3001b5890ebf48c49aefb7053c0bd4e97287c","tarball":"https://registry.npmjs.org/@illavv/run_typer/-/run_typer-4.0.0.tgz","fileCount":25,"integrity":"sha512-iHfgPVh6sor+GsU3GtkqtbwxmDgruwOS+qhGErsTk9L2jHsioac8CdnhGgfS1Z3MvlHcAwh9n1U9smHGbi1sgA==","signatures":[{"sig":"MEUCIFVs9x6pfPVd7e2HGTQttlDJbFztSGOphxVUjehFzJKxAiEAhMnB2NVXejOf9w0GdS9Y6uFRFB+tRu4BOhv2Cm8uc0s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIDko9Omqbdt9f7GMLzjrrvmwNMzHvkdW1rMa/m4fMg6OAiEA6/msYPYbTiOoFfOhhC07VmESjNMnx8EbmhCtKJAHpp4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":293358},"main":"dist/Typer.cjs.min.js","types":"dist/Typer.d.ts","module":"dist/Typer.esm.mjs","browser":"dist/Typer.min.js","exports":{".":{"types":"./dist/Typer.d.ts","import":"./dist/Typer.esm.mjs","browser":"./dist/Typer.min.js","require":"./dist/Typer.cjs.min.js"}},"gitHead":"1bbbfae7ec8c63e4a773f77a61b0150db83832bb","scripts":{"test":"jest && npm run test:types","bench":"tsc -p tsconfig.bench.json && node .bench/benchmarks/bench.js","build":"rollup -c","build:docs":"rollup -c && npx typedoc","test:types":"tsc -p tsconfig.typetest.json","test:watch":"jest --watch","test:coverage":"jest --coverage","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"illavv","email":"michael.lavigna@hotmail.it"},"repository":{"url":"git+https://github.com/lavv425/Typer.git","type":"git"},"_npmVersion":"11.19.0","description":"A robust TypeScript class for type checking and validation","directories":{},"_nodeVersion":"26.8.1","dependencies":{"tslib":"^2.8.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.5.1","rollup":"^4.63.3","ts-jest":"^29.4.12","typedoc":"0.28.20","typescript":"^6.0.3","@types/jest":"^30.0.0","@rollup/plugin-terser":"^1.0.0","@rollup/plugin-commonjs":"^29.0.3","@rollup/plugin-typescript":"^12.3.0","@rollup/plugin-node-resolve":"^16.0.3"},"_npmOperationalInternal":{"tmp":"tmp/run_typer_4.0.0_1789752874551_0.4842881504772176","host":"s3://npm-registry-packages-npm-production"}},"4.1.0":{"name":"@illavv/run_typer","version":"4.1.0","keywords":["typer","type_validator","typescript","type-checking","validation","utility"],"author":{"name":"Michael Lavigna"},"license":"MIT","_id":"@illavv/run_typer@4.1.0","maintainers":[{"name":"illavv","email":"michael.lavigna@hotmail.it"}],"homepage":"https://github.com/lavv425/Typer","bugs":{"url":"https://github.com/lavv425/Typer/issues"},"dist":{"shasum":"999f069029b6f1da092deb3708b9f1cba7321aa0","tarball":"https://registry.npmjs.org/@illavv/run_typer/-/run_typer-4.1.0.tgz","fileCount":48,"integrity":"sha512-3d4mTe+Ws5X0nEEYXIaJJpg71fk8+TxvHVzbWza9zwC/+HcK2WiTdbRWpQEmfO9+Am/v21S6SjJUbxlhTF225g==","signatures":[{"sig":"MEQCIHLdqliV2wHqsf41X3KQlQjd1fSuCY/6Ksj98JELhi3AAiA9YbnVXIZFaPGPEnPu83W/TEbm+1dH93h0hbTlJ3wyDg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCpoCK/KSpGht1EDM9w3plLEgVuDPEuj4eaTUOv6YqEggIgEUMJ7mzbEUurmqzHfjr6SB0Q/Y7ltFdd/EFqlMVJQxc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":643982},"main":"dist/Typer.cjs.min.js","types":"dist/Typer.d.ts","module":"dist/Typer.esm.mjs","browser":"dist/Typer.min.js","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/Typer.d.ts","import":"./dist/Typer.esm.mjs","browser":"./dist/Typer.min.js","require":"./dist/Typer.cjs.min.js"}},"gitHead":"c8931e4532fa5e6f1cd2724d4d4efbe738232e49","scripts":{"docs":"npx typedoc","size":"node scripts/check-bundle-size.mjs","test":"jest && npm run test:types","bench":"tsc -p tsconfig.bench.json && node .bench/benchmarks/bench.js","build":"rollup -c","build:docs":"rollup -c && npx typedoc","test:types":"tsc -p tsconfig.typetest.json","test:watch":"jest --watch","test:coverage":"jest --coverage","prepublishOnly":"npm test && npm run build && npm run size"},"_npmUser":{"name":"illavv","email":"michael.lavigna@hotmail.it"},"repository":{"url":"git+https://github.com/lavv425/Typer.git","type":"git"},"_npmVersion":"12.0.2","description":"A robust TypeScript class for type checking and validation","directories":{},"sideEffects":false,"_nodeVersion":"26.8.1","allowScripts":{"fsevents@2.3.3":true,"unrs-resolver@1.12.2":true,"@parcel/watcher@2.6.0":true},"dependencies":{"tslib":"^2.8.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.5.1","rollup":"^4.63.3","ts-jest":"^29.4.12","typedoc":"0.28.20","typescript":"^6.0.3","@types/jest":"^30.0.0","@types/mocha":"^10.0.10","@rollup/plugin-terser":"^1.0.0","@rollup/plugin-commonjs":"^29.0.3","@rollup/plugin-typescript":"^12.3.0","@rollup/plugin-node-resolve":"^16.0.3"},"_npmOperationalInternal":{"tmp":"tmp/run_typer_4.1.0_1789998484125_0.9367162225351622","host":"s3://npm-registry-packages-npm-production"}},"4.1.1":{"_id":"@illavv/run_typer@4.1.1","bugs":{"url":"https://github.com/lavv425/Typer/issues"},"dist":{"shasum":"8926f12300da584fe016b24e690d63257f5196dc","tarball":"https://registry.npmjs.org/@illavv/run_typer/-/run_typer-4.1.1.tgz","fileCount":48,"integrity":"sha512-QMJd+kYVDFTmqfSAyge9aBqwV29WxbNrGlJyxNEJ1LTCYkW/lASHNXLOp6cq8xFMVmie99Dh2rCoUmjilrWm0g==","signatures":[{"sig":"MEUCIQDyKC0xEhEfdWFDUnBU2Tg2niF7DXxpp63By9QDDXklDwIgZyUsdQ+vAgpfBbF2tpAsn+fVAayrzh9fc8shEjcooi4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCFEl+txF4WbvMrz0AVjplQnlPNUC5HvFaajnw3sDX2YAIgK/ZSEjqVJ1yJvgvNVADniO00otxBNcMku5NCSNskLFI="}],"unpackedSize":644026},"main":"dist/Typer.cjs.min.js","name":"@illavv/run_typer","types":"dist/Typer.d.ts","author":{"name":"Michael Lavigna"},"module":"dist/Typer.esm.mjs","browser":"dist/Typer.min.js","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/Typer.d.ts","import":"./dist/Typer.esm.mjs","browser":"./dist/Typer.min.js","require":"./dist/Typer.cjs.min.js"},"./package.json":"./package.json"},"gitHead":"34e7b549f0d82891257643ba5440ab91d53ca127","license":"MIT","scripts":{"docs":"npx typedoc","size":"node scripts/check-bundle-size.mjs","test":"jest && npm run test:types","bench":"tsc -p tsconfig.bench.json && node .bench/benchmarks/bench.js","build":"rollup -c","build:docs":"rollup -c && npx typedoc","test:types":"tsc -p tsconfig.typetest.json","test:watch":"jest --watch","test:coverage":"jest --coverage","prepublishOnly":"npm test && npm run build && npm run size"},"version":"4.1.1","_npmUser":{"name":"illavv","email":"michael.lavigna@hotmail.it"},"homepage":"https://github.com/lavv425/Typer","keywords":["typer","type_validator","typescript","type-checking","validation","utility"],"repository":{"url":"git+https://github.com/lavv425/Typer.git","type":"git"},"_npmVersion":"12.0.2","description":"A robust TypeScript class for type checking and validation","directories":{},"maintainers":[{"name":"illavv","email":"michael.lavigna@hotmail.it"}],"sideEffects":false,"_nodeVersion":"26.8.1","allowScripts":{"fsevents@2.3.3":true,"unrs-resolver@1.12.2":true,"@parcel/watcher@2.6.0":true},"dependencies":{"tslib":"^2.8.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.5.1","rollup":"^4.63.3","ts-jest":"^29.4.12","typedoc":"0.28.20","typescript":"^6.0.3","@types/jest":"^30.0.0","@types/mocha":"^10.0.10","@rollup/plugin-terser":"^1.0.0","@rollup/plugin-commonjs":"^29.0.3","@rollup/plugin-typescript":"^12.3.0","@rollup/plugin-node-resolve":"^16.0.3"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/run_typer_4.1.1_1789999031043_0.9369119508279553"}}},"time":{"created":"2024-08-09T14:01:51.879Z","modified":"2026-09-21T13:57:11.319Z","1.3.0":"2024-08-09T13:57:16.920Z","0.0.2":"2024-08-09T13:58:42.639Z","0.0.3":"2024-08-09T14:01:52.117Z","1.0.0":"2025-02-02T15:13:38.946Z","2.4.1":"2025-02-02T15:40:43.903Z","2.4.2":"2025-02-10T11:53:09.226Z","2.4.3":"2025-02-10T12:00:03.554Z","2.4.4":"2025-02-10T12:03:53.573Z","2.4.5":"2025-02-11T18:57:11.618Z","2.4.6":"2025-02-11T19:03:08.724Z","3.0.0":"2025-10-02T09:29:11.049Z","3.0.1":"2025-10-02T09:42:21.033Z","3.0.2":"2025-10-02T10:00:53.978Z","3.0.3":"2025-10-02T10:36:56.682Z","3.0.4":"2025-10-02T10:44:32.776Z","3.2.3":"2026-04-27T22:48:18.570Z","4.0.0":"2026-09-18T17:34:34.636Z","4.1.0":"2026-09-21T13:48:04.216Z","4.1.1":"2026-09-21T13:57:11.142Z"},"bugs":{"url":"https://github.com/lavv425/Typer/issues"},"author":{"name":"Michael Lavigna"},"license":"MIT","homepage":"https://github.com/lavv425/Typer","keywords":["typer","type_validator","typescript","type-checking","validation","utility"],"repository":{"url":"git+https://github.com/lavv425/Typer.git","type":"git"},"description":"A robust TypeScript class for type checking and validation","maintainers":[{"name":"illavv","email":"michael.lavigna@hotmail.it"}],"readme":"# Typer - Advanced TypeScript Type Validation Library\n\n![Coverage Badge](https://img.shields.io/badge/coverage-97%25%20lines-brightgreen)\n![Build Status](https://img.shields.io/badge/build-passing-success)\n![TypeScript](https://img.shields.io/badge/TypeScript-6.0-blue)\n![License](https://img.shields.io/badge/license-MIT-green)\n![Version](https://img.shields.io/badge/version-4.1.1-blue)\n\nTyper is a comprehensive TypeScript validation library that provides robust type checking, schema validation, and runtime type safety. Built with modern TypeScript features including generics, type guards, and advanced type inference.\n\n## ✨ Key Features\n\n- **🔍 Comprehensive Type System**: Support for all JavaScript types including advanced types (BigInt, TypedArrays, etc.)\n- **🎯 Type-checked schemas**: `Infer<typeof schema>` derives the static type from the runtime schema, and a typo like `'nubmer'` is a **compile error**, not a runtime surprise *(4.0+)*\n- **🧩 Composable validators**: `literal`, `arrayOf`, `record`, `tuple`, `refine`, `transform`, `withDefault`, `lazy`, `objectOf` — all nest freely *(4.0+)*\n- **🔎 Structured errors**: every failure carries `code`, `path`, `expected` and `received`, so you branch on data instead of parsing strings *(4.0+)*\n- **🤝 [Standard Schema](https://standardschema.dev)**: `typer.standard(schema)` is accepted by tRPC, Hono, TanStack Form and Router, Nuxt and the rest — no adapter *(4.1+)*\n- **📋 Schema Validation**: Complex nested object structure validation with strict mode\n- **🔧 Extensible Architecture**: Register custom types with `extend()` and keep full type inference\n- **🪶 Small and instant**: under 10 KB gzip, and building a schema costs ~1.1 µs — the lowest setup cost of the three libraries measured. See [Performance](#-performance) for where it wins and where it does not\n- **📐 JSON Schema output**: `toJSONSchema()` for OpenAPI and Swagger tooling *(4.1+)*\n- **🛡️ Runtime Safety**: Catch type errors at runtime with detailed error messages\n- **📱 Phone Number Validation**: International phone number validation (ITU-T E.164 standard)\n- **📧 Advanced Validations**: Email, URL, UUID, IP, semver, slug, JWT, MAC and more\n\n## 📦 Installation\n\n```bash\nnpm install @illavv/run_typer\n```\n\n## � Quick Start\n\n```typescript\nimport { Typer } from '@illavv/run_typer';\n\nconst typer = new Typer();\n\n// 3.1+: pass a literal alias and the return type is inferred — no <generic> needed\nconst message = typer.isType('string', 'Hello World');  // message: string\nconst count = typer.isType('number', 42);                // count: number\n\n// Type guards narrow automatically from the literal alias\nif (typer.is(userInput, 'string')) {\n    // userInput is now typed as string\n    console.log(userInput.toUpperCase());\n}\n\n// Non-throwing variant\nconst result = typer.safeParse('number', userInput);\nif (result.success) {\n    // result.data: number\n}\n```\n\n### 🪄 Typed schema parsing — write the schema once, get the type for free *(3.2+)*\n\n```typescript\nimport { Typer, type Infer } from '@illavv/run_typer';\n\nconst typer = new Typer();\n\n// One literal drives both runtime validation and the static type\nconst user = typer.parse(\n    { id: 'number', name: 'string', email: 'string?' },\n    payload,\n);\n// user is typed: { id: number; name: string; email?: string | null }\n\n// Reusable schemas with derived types — no `as const` needed\nconst userSchema = typer.schema({\n    id: 'number',\n    name: 'string',\n    email: 'string?',\n    tags: ['string'],\n    address: { city: 'string', zip: 'string?' },\n});\ntype User = Infer<typeof userSchema>;\n\nconst u  = typer.parse(userSchema, payload);     // throws + typed as User\nconst r  = typer.safeParse(userSchema, payload); // { success, data: User } | { error }\n```\n\nMix-and-match validator functions inside a schema — any slot accepts a\n`Validator<T>`, whether from a built-in helper, a combinator, or your own:\n\n```typescript\nconst strict = typer.schema({\n    id:    typer.validators.isPositiveInteger,\n    name:  typer.validators.isNonEmptyString,\n    color: (v) => typer.isHexColor(v),\n    role:  typer.literal('admin', 'user', 'guest'),\n});\n```\n\n> **Use `typer.validators.isX`, not `typer.isX`, when passing a validator as a\n> value.** A bare method reference loses its `this` and fails even on valid\n> input. `typer.validators` holds the same validators, pre-bound; wrapping in an\n> arrow — `(v) => typer.isX(v)` — works just as well.\n\n> Note: a type string like `'admin|user|guest'` means \"one of these **type\n> aliases**\", not \"one of these values\". Use `typer.literal(...)` for specific\n> values.\n\n### 🛑 Typos are compile errors *(4.0+)*\n\nA misspelled alias used to infer `unknown` and blow up at runtime. Now it does\nnot compile:\n\n```typescript\ntyper.parse({ id: 'nubmer' }, payload);\n//                ~~~~~~~~\n// Type '\"nubmer\"' is not assignable to type\n// '`Typer: unknown type alias in \"nubmer\" — register it with extend() or fix the spelling`'\n```\n\nThis covers unions, optionals, array elements and nested schemas:\n\n```typescript\ntyper.schema({ a: 'number|strng' });   // ❌\ntyper.schema({ b: 'nubmer?' });        // ❌\ntyper.schema({ c: ['strng'] });        // ❌\ntyper.schema({ d: { e: 'strng' } });   // ❌\n```\n\nDynamically built schemas carry no literal information to check, so they are\nstill accepted:\n\n```typescript\nconst dynamic: Record<string, string> = buildSchema();\ntyper.checkStructure(dynamic, payload); // fine\n```\n\n### 🔎 Structured errors *(4.0+)*\n\nEvery failure carries machine-readable issues, so you branch on data rather\nthan parsing messages:\n\n```typescript\nconst result = typer.safeParse(\n    { id: 'number', address: { city: 'string' } },\n    { id: 'nope', address: { city: 1 } },\n);\n\nif (!result.success) {\n    result.issues;\n    // [\n    //   { code: 'invalid_type', path: 'id',           expected: 'number', received: 'string', message: '…' },\n    //   { code: 'invalid_type', path: 'address.city', expected: 'string', received: 'number', message: '…' },\n    // ]\n}\n```\n\nPaths use dotted and indexed notation (`address.city`, `tags[2]`). `code` is\none of:\n\n| Code | Meaning | Extra fields |\n|---|---|---|\n| `invalid_type` | present, but not one of the expected types | `expected`, `received` |\n| `missing_key` | a required key was absent | `expected` |\n| `unknown_type` | the schema named an alias that is not registered | `expected` |\n| `invalid_schema` | the schema itself is malformed | `expected`, `received` |\n| `unexpected_key` | strict mode: a key the schema does not declare | |\n| `too_small` | below a lower bound — too short, too few, too small *(4.1+)* | `minimum` |\n| `too_big` | above an upper bound — too long, too many, too large *(4.1+)* | `maximum` |\n| `invalid_format` | right type, wrong shape: not an email, not a UUID, not an integer *(4.1+)* | `expected` |\n| `dangerous_key` | an unsafe key could not be stripped *(4.1+)* | |\n| `custom` | a validator in the schema threw without reporting a reason | |\n\nConstraint validators carry their code all the way out, whether called directly\nor from inside a schema — which is what makes \"too short\" tellable from \"out of\nrange\" without reading the message:\n\n```typescript\nconst result = typer.safeParse({\n    name: (v) => typer.isLength({ min: 3, max: 50 }, v),\n    pin:  (v) => typer.isInRange(1000, 9999, v),\n}, { name: 'ab', pin: 42 });\n\nresult.issues;\n// [\n//   { code: 'too_small', path: 'name', minimum: 3,    message: '…' },\n//   { code: 'too_small', path: 'pin',  minimum: 1000, maximum: 9999, message: '…' },\n// ]\n```\n\n`parse` throws a `TyperError`, which extends `TypeError` — existing\n`instanceof TypeError` handling keeps working:\n\n```typescript\nimport { TyperError } from '@illavv/run_typer';\n\ntry {\n    typer.parse(userSchema, payload);\n} catch (e) {\n    if (e instanceof TyperError) {\n        e.issues;    // the structured list\n        e.flatten(); // { 'address.city': ['Expected \"address.city\" to be string, got number'] }\n    }\n}\n```\n\n> `result.error` is built on first access. Reading only `result.issues` skips\n> constructing an `Error` — whose stack capture costs more than the validation\n> itself.\n\n### 📐 JSON Schema output *(4.1+)*\n\n`toJSONSchema()` turns a schema into the document OpenAPI and Swagger tooling\nexpects:\n\n```typescript\ntyper.toJSONSchema({ id: 'number', email: typer.validators.isEmail, note: 'string?' });\n// {\n//   $schema: 'https://json-schema.org/draft/2020-12/schema',\n//   type: 'object',\n//   properties: {\n//     id:    { type: 'number' },\n//     email: { type: 'string', format: 'email' },\n//     note:  { type: ['string', 'null'] },\n//   },\n//   required: ['id', 'email'],\n// }\n```\n\nType strings, `?` markers, `|` unions, arrays and nested objects have exact\nequivalents. Validators do not — a validator is an opaque function — so Typer's\nown validators and combinators carry the fragment they correspond to:\n\n| Slot | Emitted |\n|---|---|\n| `typer.validators.isEmail` | `{ type: 'string', format: 'email' }` |\n| `typer.literal('a', 'b')` | `{ enum: ['a', 'b'] }` |\n| `typer.arrayOf(v, { min: 1 })` | `{ type: 'array', items: …, minItems: 1 }` |\n| `typer.tuple([a, b])` | `{ type: 'array', prefixItems: […], minItems: 2, maxItems: 2 }` |\n| `typer.record(v)` | `{ type: 'object', additionalProperties: … }` |\n| `typer.optional(v)` | the inner fragment, key dropped from `required` |\n| `typer.withDefault(v, 10)` | the inner fragment plus `default: 10` |\n| `typer.discriminatedUnion(k, …)` | `{ oneOf: […], discriminator: { propertyName: k } }` |\n\nA validator *you* wrote becomes `{}` — which accepts anything — as do the\naliases JSON cannot carry (`symbol`, `function`, `map`, `set`, `regexp`, the\nbuffer types) and anything registered with `extend`. Pass\n`{ unrepresentable: 'throw' }` in a build step to be told about those instead of\nshipping a schema that quietly accepts anything at those keys:\n\n```typescript\ntyper.toJSONSchema(schema, { unrepresentable: 'throw' });\n// TyperError: Cannot convert to JSON Schema: 1 slot(s) have no equivalent — session\n```\n\n`{ strict: true }` emits `additionalProperties: false`, and `{ $schema: false }`\nomits the dialect keyword for embedding in a larger document.\n\n### 🔁 Coercion *(4.1+)*\n\nQuery strings, form data and environment variables arrive as strings. Without\ncoercion, every handler rewrites the conversion by hand — which is where the\nmistakes are:\n\n```typescript\nconst query = typer.parse({\n    page:     typer.coerce.number,\n    archived: typer.coerce.boolean,\n    since:    typer.coerce.date,\n}, req.query);\n// { page: 2, archived: false, since: Date }\n```\n\nThe converted value replaces the original in place, so what comes out of\n`parse` holds numbers and dates rather than the strings that arrived.\n\nThese reject what they cannot convert instead of inventing a value, which is the\nwhole difference from the `Number()` / `Boolean()` they replace:\n\n| Input | `Number()` / `Boolean()` | `typer.coerce.*` |\n|---|---|---|\n| `''` | `0` | rejected |\n| `'   '` | `0` | rejected |\n| `null` | `0` | rejected |\n| `[]` | `0` | rejected |\n| `'abc'` | `NaN` | rejected |\n| `'false'` | `true` | `false` |\n| `'0'` | `true` | `false` |\n\n`coerce.boolean` reads `true`/`1`/`yes`/`on` and `false`/`0`/`no`/`off`, in any\ncase and with surrounding whitespace; anything else is rejected rather than\nguessed at.\n\n### 🧬 Deriving schemas from schemas *(4.1+)*\n\nReal applications derive shapes from each other constantly. Writing the second\ncopy by hand means the two diverge at the first change:\n\n```typescript\nconst userSchema = typer.schema({\n    id: 'number',\n    name: 'string',\n    email: 'string',\n    password: 'string',\n});\n\nconst publicUser = typer.pick(userSchema, ['id', 'name']);\nconst createUser = typer.omit(userSchema, ['id']);\nconst patchUser  = typer.partial(typer.omit(userSchema, ['id', 'password']));\nconst timestamped = typer.merge(userSchema, { createdAt: 'date' });\n\ntype PatchUser = Infer<typeof patchUser>;\n// → { name?: string | null; email?: string | null }\n```\n\nAll four return a plain new schema and leave the sources untouched, so the\nresult parses, infers and composes like any other. `merge` lets the second\nschema win on overlapping keys.\n\n> `partial` gives a type-string slot the `?` marker it already understands.\n> Slots with no marker of their own — a validator, an array, a nested schema —\n> are rebuilt as `optional(...)` validators instead, so a *made-optional* nested\n> slot reports its failures as one `custom` issue at the slot's path rather than\n> one per field. Pass the keys you need if that matters:\n> `typer.partial(schema, ['name', 'email'])`.\n\n### 🛡️ Validated means safe to merge *(4.1+)*\n\nTyper validates in place and returns the same reference it was given. That is\nwhat makes it fast, and it used to mean that keys the schema never declared —\nincluding `__proto__` and `constructor` from a `JSON.parse` payload — survived\na `success: true`:\n\n```typescript\nconst payload = JSON.parse('{\"id\":1,\"__proto__\":{\"admin\":true}}');\ntyper.parse({ id: 'number' }, payload);\n\nObject.keys(payload);        // ['id']  — was ['id', '__proto__'] before 4.1\n{ ...payload }.admin;        // undefined — the spread that used to matter\n```\n\n`__proto__`, `constructor` and `prototype` are now removed from every validated\nobject unless the schema declares them as fields of its own, in which case they\nare ordinary keys and are validated like any other. Nothing else about extra\nkeys changes: use `strict` mode if you want *all* undeclared keys rejected.\n\nIf the object is frozen and the key cannot be removed, validation fails with a\n`dangerous_key` issue rather than passing an object it could not make safe.\n\nThe check costs ~2.5 ns per object: a cheap probe that only falls through to the\nexact `hasOwnProperty` test when an object is not a plain, unpolluted one.\n\n### 🤝 Standard Schema *(4.1+)*\n\n[Standard Schema](https://standardschema.dev) is the common contract that lets a\nvalidation library be accepted by tRPC, Hono, TanStack Form and Router, Nuxt and\ndozens of others without a per-library adapter. `standard()` produces it from a\nschema, a validator, or a type alias:\n\n```typescript\nimport typer from '@illavv/run_typer';\n\nconst userSchema = typer.standard({ id: 'number', email: 'string' });\n\n// Any Standard Schema consumer accepts it as-is:\napp.post('/users', validator('json', userSchema), handler);       // Hono\npublicProcedure.input(userSchema).mutation(({ input }) => …);     // tRPC\n```\n\nThe result is still an ordinary `Validator`, so it keeps working everywhere a\nvalidator does — including nested inside another schema:\n\n```typescript\nuserSchema({ id: 1, email: 'a@b.co' });        // returns the value, throws on failure\ntyper.arrayOf(userSchema);                      // composes like any other validator\n```\n\n`objectOf()` carries the contract as well, so an existing `typer.objectOf(...)`\nis already a Standard Schema.\n\nIssue paths follow the spec's segment form, while keeping Typer's machine-readable\n`code`:\n\n```typescript\nuserSchema['~standard'].validate({ id: 'one', email: 'a@b.co' });\n// {\n//   issues: [{\n//     code: 'invalid_type',\n//     path: ['id'],                            // segments, not 'id'\n//     message: 'Expected \"id\" to be number, got string',\n//     expected: 'number',\n//     received: 'string',\n//   }]\n// }\n```\n\nValidation is synchronous: `validate` never returns a Promise.\n\n### 🧩 Combinators *(4.0+)*\n\nAll of these return a `Validator<T>`, so they compose with each other and slot\ninto any schema position:\n\n```typescript\nconst orderSchema = typer.schema({\n    id:       typer.validators.isUUID,\n    status:   typer.literal('pending', 'shipped', 'cancelled'),\n    qty:      typer.refine((v) => typer.asNumber(v), (n) => n > 0, 'qty must be > 0'),\n    coupon:   typer.withDefault((v) => typer.asString(v), ''),\n    sizes:    typer.arrayOf((v) => typer.asNumber(v), { min: 1, max: 10 }),\n    labels:   typer.record((v) => typer.asString(v)),          // Record<string, string>\n    position: typer.tuple([(v) => typer.asNumber(v), (v) => typer.asNumber(v)]), // [number, number]\n    placedAt: typer.instanceOf(Date),\n    slug:     typer.transform((v) => typer.asString(v), (s) => s.trim().toLowerCase()),\n    lines:    typer.arrayOf(typer.objectOf({ sku: 'string', qty: 'number' })),\n});\n```\n\n`discriminatedUnion` covers the payload shape most APIs actually use — a union\ntold apart by one key *(4.1+)*:\n\n```typescript\nconst event = typer.discriminatedUnion('type', {\n    created: { id: 'string', at: 'date' },\n    renamed: { id: 'string', name: 'string' },\n    deleted: { id: 'string' },\n});\n\ntype Event = ReturnType<typeof event>;\n// → { type: 'created'; id: string; at: Date }\n//  | { type: 'renamed'; id: string; name: string }\n//  | { type: 'deleted'; id: string }\n```\n\nUnlike `union`, which tries each variant in turn, this reads the discriminant\nonce and goes straight to the only variant that can match — in constant time,\nhowever many there are — and reports against that variant alone:\n\n```typescript\ntyper.safeParse(event, { type: 'renamed', id: 'x', name: 42 }).issues;\n// [{ code: 'invalid_type', path: 'name', expected: 'string', received: 'number' }]\n// not \"none of the 3 variants matched, here is why each one failed\"\n```\n\nVariants are keyed by discriminant value, so the mapping is exact by\nconstruction. Each member carries its own tag as a literal type, so it narrows\non `type` the way a hand-written union does.\n\n`lazy` makes recursive shapes expressible:\n\n```typescript\ntype Node = { name: string; children?: Node[] };\n\nconst node: Validator<Node> = typer.lazy(() => typer.objectOf({\n    name: 'string',\n    children: typer.optional(typer.arrayOf(node)),\n}) as Validator<Node>);\n```\n\n### 🔧 Custom types that the compiler knows about *(4.0+)*\n\n`extend()` is `registerType` that also records the alias in the instance's\ntype, so it works in compile-checked schemas and resolves in `Infer`:\n\n```typescript\nconst typer = new Typer()\n    .extend('positive', (v): number => {\n        if (typeof v !== 'number' || v <= 0) throw new TypeError('Must be positive');\n        return v;\n    })\n    .extend('slug', (v): string => new Typer().isSlug(v));\n\nconst schema = typer.schema({ qty: 'positive', handle: 'slug' });\ntype Product = Infer<typeof schema, { positive: number; slug: string }>;\n// → { qty: number; handle: string }\n```\n\nIt returns the same instance, just re-typed, so it chains. `registerType` is\nstill available when you do not need the alias in the type system.\n\n## 📖 Usage Examples\n\n### ✅ Basic Type Validation\n\n```typescript\nimport { Typer } from '@illavv/run_typer';\n\nconst typer = new Typer();\n\n// Type guards (return boolean)\nconsole.log(typer.is<string>(\"Hello\", \"string\")); // true\nconsole.log(typer.is<number>(123, \"number\")); // true\nconsole.log(typer.is<boolean>(true, \"boolean\")); // true\nconsole.log(typer.is<unknown[]>([], \"array\")); // true\nconsole.log(typer.is<object>({}, \"object\")); // true\n\n// Type validation (throws on error)\nconst str = typer.isType<string>('string', 'Hello'); // Returns 'Hello' typed as string\nconst num = typer.isType<number>('number', 42); // Returns 42 typed as number\n```\n\n### 🎯 Advanced Type Validation\n\n```typescript\nconst typer = new Typer();\n\n// Multiple type validation\nconst value = typer.isType<string | number>(['string', 'number'], 'Hello');\n\n// Specific validations\nconst email = typer.isEmail('user@example.com');\nconst phone = typer.isPhoneNumber('+1234567890');\nconst url = typer.isURL('https://example.com');\n\n// Array validations\nconst numbers = typer.isArrayOf<number>('number', [1, 2, 3]);\nconst nonEmpty = typer.isNonEmptyArray<string>(['a', 'b']);\n\n// Range and constraints\nconst age = typer.isInRange(18, 65, 25);\nconst positiveInt = typer.isPositiveInteger(42);\n```\n\n### 🔬 Advanced Types Support\n\n```typescript\nconst typer = new Typer();\n\n// Modern JavaScript types\nconst bigIntVal = typer.isType<bigint>('bigint', BigInt(123));\nconst buffer = typer.isType<ArrayBuffer>('arraybuffer', new ArrayBuffer(8));\nconst typedArray = typer.isType<Int32Array>('typedarray', new Int32Array(4));\nconst dataView = typer.isType<DataView>('dataview', new DataView(buffer));\n\n// Collections\nconst map = typer.isType<Map<string, number>>('map', new Map());\nconst set = typer.isType<Set<string>>('set', new Set());\n\n// Special validations\nconst jsonStr = typer.isType<string>('json', '{\"valid\": \"json\"}');\nconst validDate = typer.isType<Date>('date', new Date());\nconst regex = typer.isType<RegExp>('regexp', /pattern/);\n```\n\n### 🏗 Schema-Based Object Validation\n\n```typescript\nconst typer = new Typer();\n\nconst userSchema = {\n    name: \"string\",\n    age: \"number\",\n    email: \"string?\", // Optional field\n    address: {\n        street: \"string\",\n        city: \"string\",\n        zip: \"number|string\" // Union types\n    },\n    hobbies: [\"string\"], // Array of strings\n    isActive: \"boolean\"\n};\n\nconst userData = {\n    name: \"John Doe\",\n    age: 30,\n    address: {\n        street: \"123 Main St\",\n        city: \"New York\",\n        zip: 10001\n    },\n    hobbies: [\"reading\", \"coding\"],\n    isActive: true\n};\n\nconst result = typer.checkStructure(userSchema, userData);\nif (result.isValid) {\n    console.log(\"✅ Valid user data\");\n} else {\n    console.log(\"❌ Validation errors:\", result.errors);\n}\n\n// Strict mode (rejects extra properties)\nconst strictResult = typer.checkStructure(userSchema, userData, '', true);\n```\n\n### � Custom Type Registration\n\n```typescript\nconst typer = new Typer();\n\n// Register a custom validator\ntyper.registerType(\"positive\", (value) => {\n    if (typeof value !== \"number\" || value <= 0) {\n        throw new TypeError(\"Value must be a positive number\");\n    }\n    return value;\n});\n\n// Register email validator with override\ntyper.registerType(\"email\", (value) => {\n    const email = typer.isType<string>('string', value);\n    if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email)) {\n        throw new TypeError('Invalid email format');\n    }\n    return email;\n}, true); // Override existing if present\n\n// Use custom type\nconsole.log(typer.is(10, \"positive\")); // true\nconsole.log(typer.is(-5, \"positive\")); // false\n\n// List all types\nconsole.log(typer.listTypes());\n\n// Export/Import types\nconst typesJson = typer.exportTypes();\ntyper.importTypes(typesJson);\n\n// Remove custom type\ntyper.unregisterType(\"positive\");\n```\n\n### �️ Function Type Safety\n\n```typescript\nconst typer = new Typer();\n\n// Single parameter function\nconst safeMultiply = typer.expect(\n    (x: number) => x * 2, \n    {\n        paramTypes: ['number'],\n        returnType: ['number']\n    }\n);\n\nconsole.log(safeMultiply(4)); // 8\n// safeMultiply(\"hello\"); // Throws TypeError\n\n// Multiple parameters\nconst safeAdd = typer.expect(\n    (x: number, y: number) => x + y,\n    {\n        paramTypes: ['number', 'number'], \n        returnType: ['number']\n    }\n);\n\n// Async function support\nconst asyncFunc = typer.expect(\n    async (x: number): Promise<string> => x.toString(),\n    {\n        paramTypes: ['number'],\n        returnType: ['string']\n    }\n);\n\n// Multiple return types\nconst flexibleFunc = typer.expect(\n    (x: boolean) => x ? 42 : \"string\",\n    {\n        paramTypes: ['boolean'],\n        returnType: ['number', 'string']\n    }\n);\n```\n\n## � API Reference\n\n### Core Validation Methods\n\n#### `is<T>(value: unknown, types: string | string[]): value is T`\nType guard that returns boolean. Safe for TypeScript type narrowing.\n\n#### `isType<T>(types: string | string[], value: unknown): T`\nValidates type and returns the value cast to T. Throws TypeError on failure.\n\n#### `asString(value: unknown): string`\nValidates and returns a string. Alias for `isType<string>('string', value)`.\n\n#### `asNumber(value: unknown): number`\nValidates and returns a number.\n\n#### `asBoolean(value: unknown): boolean`\nValidates and returns a boolean.\n\n#### `asArray<T>(value: unknown): T[]`\nValidates and returns an array.\n\n#### `asObject<T>(value: unknown): T`\nValidates and returns an object.\n\n### Specialized Validation Methods\n\n#### `isEmail(value: unknown): string`\nValidates email format.\n\n#### `isURL(value: unknown): string`\nValidates URL format.\n\n#### `isPhoneNumber(value: unknown): string`\nValidates international phone numbers (7-15 digits, ITU-T E.164 standard).\n\n#### `isArrayOf<T>(elementType: string, value: unknown): T[]`\nValidates array with specific element type.\n\n#### `isNonEmptyString(value: unknown): string`\nValidates non-empty strings.\n\n#### `isNonEmptyArray<T>(value: unknown): T[]`\nValidates non-empty arrays.\n\n#### `isOneOf<T>(values: readonly T[], value: unknown): T`\nValidates value is one of specified options.\n\n#### `isInRange(min: number, max: number, value: unknown): number`\nValidates number within range.\n\n#### `isInteger(value: unknown): number`\nValidates integer values.\n\n#### `isPositiveNumber(value: unknown): number`\nValidates positive numbers.\n\n#### `isPositiveInteger(value: unknown): number`\nValidates positive integers.\n\n#### `isNegativeNumber(value: unknown): number`\nValidates negative numbers.\n\n#### `isNegativeInteger(value: unknown): number`\nValidates negative integers.\n\n#### `isFiniteNumber(value: unknown): number`\nStricter than `isType('number', x)`: rejects `NaN` and `Infinity`. *(3.1+)*\n\n#### `isSafeInteger(value: unknown): number`\nValidates integers within `Number.MIN/MAX_SAFE_INTEGER`. *(3.1+)*\n\n#### `isUUID(value: unknown): string`\nValidates UUID strings (RFC 4122, versions 1–5). *(3.1+)*\n\n#### `isIPv4(value: unknown): string` / `isIPv6(value: unknown): string`\nValidates IPv4 / IPv6 addresses. *(3.1+)*\n\n#### `isHexColor(value: unknown): string`\nValidates CSS hex colors (`#RGB`, `#RGBA`, `#RRGGBB`, `#RRGGBBAA`). *(3.1+)*\n\n#### `isISODate(value: unknown): Date`\nValidates an ISO 8601 string and returns the parsed `Date`. *(3.1+)*\n\n#### `isBase64(value: unknown, opts?: { urlSafe?: boolean, requirePadding?: boolean }): string`\nValidates Base64 strings. *(3.1+)*\n\n#### `isPlainObject<T>(value: unknown): T`\nValidates a plain object literal (rejects class instances, arrays, `Map`, `Set`). *(3.1+)*\n\n#### `isPromise<T>(value: unknown): Promise<T>`\nValidates a Promise / thenable. *(3.1+)*\n\n#### `isInstanceOf<T>(ctor: new (...args: never[]) => T, value: unknown): T`\nType-safe `instanceof` check. *(3.1+)*\n\n#### `matches(regex: RegExp, value: unknown): string`\nValidates a string matches the given regex. *(3.1+)*\n\n#### `isLength<T>(bounds: { min?: number; max?: number }, value: unknown): T`\nValidates the length of a string or array. *(3.1+)*\n\n#### `isEmpty(value: unknown): unknown` / `isNonEmpty<T>(value: unknown): T`\nPolymorphic emptiness check across string, array, `Map`, `Set`, object. *(3.1+)*\n\n#### `isIP(value: unknown): string`\nValidates an IP address of either version. *(4.0+)*\n\n#### `isSemver(value: unknown): string`\nValidates a Semantic Versioning 2.0.0 string, pre-release and build metadata included. *(4.0+)*\n\n#### `isSlug(value: unknown): string`\nValidates a URL-friendly slug (`hello-world`). *(4.0+)*\n\n#### `isPort(value: unknown): number`\nValidates a TCP/UDP port number (1–65535; `0` is rejected). *(4.0+)*\n\n#### `isJWT(value: unknown): string`\nValidates the *shape* of a JSON Web Token. Does **not** verify the signature — never use it as an authentication check. *(4.0+)*\n\n#### `isMACAddress(value: unknown): string`\nValidates a MAC address in colon- or hyphen-separated form. *(4.0+)*\n\n### Combinators *(3.1+)*\n\n#### `nullable<T>(validator: Validator<T>): Validator<T | null>`\nWraps a validator so `null` is also accepted.\n\n#### `optional<T>(validator: Validator<T>): Validator<T | undefined>`\nWraps a validator so `undefined` is also accepted.\n\n#### `union<T extends readonly unknown[]>(...validators): Validator<T[number]>`\nTries each validator in order; succeeds on the first match.\n\n#### `discriminatedUnion<Key, V>(key: Key, variants: V, options?: { strict?: boolean }): StandardValidator<…>` *(4.1+)*\nA union told apart by one key. Selects the variant in constant time on the discriminant value and reports against that variant alone. Variants are keyed by discriminant value; each member carries its tag as a literal type.\n\n#### `literal<T>(...values): Validator<T[number]>`\nAccepts only the listed literal values, narrowing to their union. *(4.0+)*\n\n#### `arrayOf<T>(element: Validator<T>, bounds?: { min?: number; max?: number }): Validator<T[]>`\nValidates every element, reporting all failures at once. *(4.0+)*\n\n#### `record<T>(value: Validator<T>): Validator<Record<string, T>>`\nValidates a dictionary object's values. Rejects arrays and `null`. *(4.0+)*\n\n#### `tuple<T>(validators: T): Validator<[...]>`\nValidates a fixed-length, heterogeneous array. *(4.0+)*\n\n#### `refine<T>(validator: Validator<T>, predicate: (v: T) => boolean, message: string): Validator<T>`\nAdds a constraint without changing the type. *(4.0+)*\n\n#### `transform<T, U>(validator: Validator<T>, transformer: (v: T) => U): Validator<U>`\nMaps a validated value. The transformer only ever sees valid input. *(4.0+)*\n\n#### `withDefault<T>(validator: Validator<T>, fallback: T | (() => T)): Validator<T>`\nSubstitutes a default for `undefined` (not for `null`). Pass a factory for object/array defaults so instances are not shared. *(4.0+)*\n\n#### `lazy<T>(factory: () => Validator<T>): Validator<T>`\nDefers construction, which is what makes recursive shapes expressible. Runs the factory once. *(4.0+)*\n\n#### `instanceOf<T>(ctor): Validator<T>`\nComposable form of `isInstanceOf`. *(4.0+)*\n\n#### `objectOf<S>(schema: S, options?: { strict?: boolean }): StandardValidator<Infer<S>>`\nTurns a schema into a validator, so object shapes nest inside the other combinators. The result also carries `~standard`. *(4.0+, Standard Schema in 4.1+)*\n\n#### `standard<S>(target: S, options?: { strict?: boolean }): StandardValidator<T>`\nWraps a schema, validator or type alias as a [Standard Schema](https://standardschema.dev), so it is accepted by tRPC, Hono, TanStack Form and Router, Nuxt and others with no adapter. The result stays a callable `Validator`. *(4.1+)*\n\n#### `validators`\nThe `is*` / `as*` validators, pre-bound to the instance, so they can be passed as values without losing `this`. Built on first access and cached. *(4.0+)*\n\n#### `coerce`\n`coerce.number`, `coerce.boolean`, `coerce.date` — validators that convert before validating, for query strings, form data and environment variables. They reject what they cannot convert (`''`, `null`, `[]`, `'abc'`) instead of producing `0`, and read `'false'` as `false`. *(4.1+)*\n\n### Non-throwing API *(3.1+)*\n\n#### `safeParse<K>(types, value): ParseResult<TypeMap[K]>`\nSame input as `parse`, returns a discriminated union instead of throwing:\n`{ success: true, data } | { success: false, issues, error }`.\n\n`issues` is a `ValidationIssue[]` — `{ code, path, message, expected?, received? }`.\n`error` is a `TyperError` (which extends `TypeError`) built lazily on first\naccess, so reading only `issues` avoids the cost of capturing a stack trace.\n*(`issues` added in 4.0)*\n\n### Schema Validation\n\n#### `parse<S>(schemaOrTypeOrValidator, value): T` *(3.2+)*\nUniversal entry point. Accepts a type alias, an array of aliases, a\n`Validator<T>` function, or a `Schema` object. Throws `TypeError` on\nfailure; on success returns the value typed via `Infer<S>` (for\nschemas) or `TypeMap[K]` (for type aliases).\n\n#### `safeParse<S>(schemaOrTypeOrValidator, value): ParseResult<T>` *(3.2+ for schema overload)*\nNon-throwing variant. Returns\n`{ success: true, data } | { success: false, error: TypeError }`.\n\n#### `toJSONSchema<S>(schema: S, options?: ToJSONSchemaOptions): JSONSchemaDocument` *(4.1+)*\nConverts a schema into a JSON Schema document (draft 2020-12 by default), for OpenAPI and Swagger tooling. Options: `$schema` (dialect, or `false` to omit), `id`, `title`, `description`, `strict` (emits `additionalProperties: false`), and `unrepresentable` (`'any'` by default, `'throw'` to fail on slots with no JSON Schema equivalent).\n\n#### `pick<S, K>(schema: S, keys: readonly K[]): PickSchema<S, K>` *(4.1+)*\nDerives a schema keeping only the listed keys. Returns a new schema; the source is untouched.\n\n#### `omit<S, K>(schema: S, keys: readonly K[]): OmitSchema<S, K>` *(4.1+)*\nDerives a schema without the listed keys — the complement of `pick`.\n\n#### `merge<A, B>(base: A, extension: B): MergeSchema<A, B>` *(4.1+)*\nCombines two schemas. Keys of `extension` win where the two overlap.\n\n#### `partial<S, K>(schema: S, keys?: readonly K[]): PartialSchema<S, K>` *(4.1+)*\nMakes every key optional, or only the listed ones. Type-string slots gain the `?` marker; validator, array and nested-schema slots are rebuilt as `optional(...)` validators and report failures as a single `custom` issue at the slot path.\n\n#### `schema<const S>(definition: S): S` *(3.2+)*\nIdentity helper that preserves literal types of a schema declared in a\nvariable. Use it to derive `Infer<typeof schema>` without `as const`.\n\n#### `Infer<S>` *(3.2+, type-only export)*\nDerives a TypeScript type from a runtime schema literal — handles\n`?`-suffix optionals, `|`-unions, array elements, nested objects, and\nembedded `Validator<T>` functions.\n\n#### `checkStructure(schema: Record<string, unknown>, obj: Record<string, unknown>, path?: string, strictMode?: boolean): StructureValidationReturn`\nValidates object structure against schema. Returns `{isValid: boolean, errors: string[]}`.\nLower-level than `parse` — kept for backward compatibility and for the\nstrict-mode entry point.\n\n### Type Management\n\n#### `registerType(name: string, validator: (value: unknown) => unknown, override?: boolean): void`\nRegisters custom type validator.\n\n#### `unregisterType(name: string): void`\nRemoves registered type.\n\n#### `listTypes(): string[]`\nReturns all registered type names.\n\n#### `exportTypes(): string`\nExports types as JSON string.\n\n#### `importTypes(json: string): void`\nImports types from JSON string.\n\n### Function Wrapping\n\n#### `expect(func: Function, types: TyperExpectTypes): Function`\nWraps function with type checking for parameters and return value.\n\n#### `validate(schema: Record<string, string | string[]>, obj: Record<string, unknown>): string[]`\nValidates object against simple schema, returns error array.\n\n#### `assert(value: unknown, expectedType: string | string[]): void`\nLogs warning if type assertion fails.\n\n### Supported Types\n\n**Primitives**: `string`, `number`, `boolean`, `bigint`, `symbol`, `undefined`, `null`\n\n**Objects**: `object`, `array`, `function`, `date`, `regexp`, `map`, `set`\n\n**Advanced**: `arraybuffer`, `dataview`, `typedarray`, `json`, `domelement`\n\n**Aliases**: Short forms like `s`/`str` for `string`, `n`/`num` for `number`, etc.\n\n## ⚡ Performance\n\n### Where Typer wins, and where it does not\n\nValidation libraries are usually sold on speed. Typer's honest position is\nnarrower and worth stating plainly, because a library that says where it loses\nis easier to trust on where it wins.\n\nFrom the 4.0.0 audit, against `zod` 4.6.5 and `@sinclair/typebox` 0.34.52 on\nNode 26 / darwin arm64, each library measured in its own equivalent-work lane:\n\n| Scenario | Typer | Zod | TypeBox JIT | |\n| --- | ---: | ---: | ---: | --- |\n| Schema setup | **1.13 µs** | 5.74 µs | 3.43 µs | 🥇 |\n| Bundle (gzip) | **7.0 KB** | 92 KB | 22.4 KB | 🥈 * |\n| Flat object, valid | 90 ns | 68 ns | 3.3 ns | 🥉 |\n| Nested object, 25 items | 1.74 µs | 807 ns | 191 ns | 🥉 |\n| Flat object, invalid | 404 ns | 354 ns | 1.05 µs | 🥈 |\n| Deep nested, invalid | 2.07 µs | 1.27 µs | 15.19 µs | 🥈 |\n\n<sub>* behind `zod/mini` at 4.8 KB. Those bundle figures are 4.0.0's; 4.1 added\nStandard Schema, schema composition, coercion, discriminated unions and JSON\nSchema output, and `npm run size` now reports **9.7 KB gzip** for the full ESM\nbundle. None of it can be tree-shaken away by a consumer who does not use it,\nbecause the API hangs off a class instance — which is what the 5.0\nmodularization is for.</sub>\n\n**On the hot path Typer is slower than Zod, and about nine times slower than a\ncompiled TypeBox.** That is not a problem in itself — 90 ns is far below the\npoint where validation is visible inside an HTTP handler — but it is not the\nreason to choose Typer either. The three real wins are **instant setup**, a\n**small bundle**, and **schemas that read like the shape they describe**.\n\n### Hoist your schemas\n\nCompiled checkers are cached by schema **object identity**. A schema literal\nwritten inside a handler is a new object on every call, so it is recompiled\nevery time — about an order of magnitude slower, and silent, because the code\nlooks perfectly ordinary:\n\n```typescript\nconst userSchema = typer.schema({ id: 'number' });          // compiled once\napp.post('/u', (req) => typer.parse(userSchema, req.body)); // 78 ns\n\napp.post('/u', (req) => typer.parse({ id: 'number' }, req.body)); // 873 ns\n```\n\nIt is a cost, not a leak: the cache is a `WeakMap`, so the throwaway schema is\ncollected normally.\n\n### How it is fast where it is\n\nSchemas are compiled to closures once and cached by schema identity; every\ntype name, optional marker and union alternative is resolved at compile time,\nso validating is a flat loop over predicates. Error paths are only built when\nsomething actually fails.\n\n`npm run bench` on Node 26, median of 7 batches (absolute numbers are\nmachine-dependent):\n\n| Operation | ops/sec |\n| --- | ---: |\n| `is(value, 'string')` | ~240M |\n| `isType('string', value)` | ~165M |\n| `isArrayOf('number', 50 items)` | ~45M |\n| `parse(flat schema)` — valid | ~24M |\n| `parse(nested schema)` — valid | ~8M |\n| `checkStructure(nested)` | ~7M |\n| `safeParse(nested)` — **invalid** | ~2M |\n\nThe last row is the one that changed most in 4.0 (17× faster): a failing\nvalidation no longer throws, catches and rebuilds its own error internally.\n\n> The `is`/`isType` rows measure a few-nanosecond operation and swing widely\n> with V8's inlining decisions — treat a change there as noise unless it\n> reproduces across runs. The schema rows are stable to within a few percent.\n\n## 🧪 Testing\n\nTyper has **97% line / 99.4% function / 96.9% statement / 91.9% branch coverage**\nwith 406 tests covering:\n\n- All type validators and edge cases\n- Schema validation scenarios\n- Custom type registration and built-in overrides\n- Structured error reporting\n- Combinators and composition\n- Function wrapping and validation\n- TypeScript generic integration\n\n```bash\nnpm test               # Jest suite + type-level suite\nnpm run test:watch     # Watch mode\nnpm run test:coverage  # Coverage report\nnpm run test:types     # Type-level assertions only\nnpm run bench          # Benchmarks\n```\n\nThe type-level suite (`tests/types/`) is checked by `tsc`, not Jest: it asserts\nthat `Infer` produces exactly the expected types, and that invalid schemas are\n*rejected*. It is part of `npm test`.\n\n> The uncovered lines are the `return p` statements of the built-in checkers.\n> Since the predicate fast-path landed, those checkers only ever run to throw —\n> see the `TODO(tech-debt)` note in `src/Typer.ts`.\n\n## 🏗️ Building\n\n```bash\nnpm run build          # Build all formats\nnpm run build:docs     # Build with documentation\n```\n\nOutputs:\n- `dist/Typer.min.js` - UMD format\n- `dist/Typer.esm.mjs` - ES modules\n- `dist/Typer.cjs.min.js` - CommonJS\n- `dist/Typer.d.ts` - TypeScript definitions\n\n## � License\n\nMIT License - see [LICENSE](LICENSE) file for details.\n\n## 🤝 Contributing\n\nContributions are welcome! Please:\n\n1. Fork the repository\n2. Create a feature branch\n3. Add tests for new functionality  \n4. Ensure all tests pass\n5. Submit a pull request\n\n## 👤 Author\n\n**Michael Lavigna**\n- GitHub: [@lavv425](https://github.com/lavv425)\n\n## � Links\n\n- [GitHub Repository](https://github.com/lavv425/Typer)\n- [NPM Package](https://www.npmjs.com/package/@illavv/run_typer)\n- [Documentation](https://lavv425.github.io/Typer/)\n\n---\n\n*Built with ❤️ and TypeScript*","readmeFilename":"README.md"}