{"_id":"zod-opts","_rev":"9-3672e2fe1ba570027ee9775207e1faec","name":"zod-opts","dist-tags":{"latest":"1.0.0"},"versions":{"0.1.0":{"name":"zod-opts","version":"0.1.0","keywords":["argument","args","option","parser","cli","command"],"author":{"name":"ndruger"},"license":"MIT","_id":"zod-opts@0.1.0","maintainers":[{"name":"ndruger","email":"snowfullnight@gmail.com"}],"dist":{"shasum":"3a8897e6cf00812e148b54a16790765aeb769606","tarball":"https://registry.npmjs.org/zod-opts/-/zod-opts-0.1.0.tgz","fileCount":74,"integrity":"sha512-3LbADeVd+SxwvsOjOQands8iej6GQWbGRYUY3hyjlQCGcTLzghm4tG1vDtoLs2c66LUpiICNjBeKmtirFR8xaw==","signatures":[{"sig":"MEUCIFwKMWghf0UV4pWHZoRXz7+vbxbJIDQx5UU1Ek1NLuRAAiEAmbtKuq+IHSvg05CzCEopNU8SxfgMB33fscXuWchSMl0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":301382,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkFLyvACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpbiA//TEzec6IGfjAqGq4cf+c1NlYhAmm83QQRT2WNx8v0yEuEBCq+\r\nfC8NEm4MlgtT1ViNVVJK2uszbZSISLH0M/OFeanWQMrExK/jFsfsW3CsgGwz\r\nXbCFLUCE/T8ri6szj7chIHn7J2xwyH3MnmOsUGvQROutunvbYvUE1leZzkGH\r\noDTJ7s5ZvBQrHmoAl18sPJsn2gCcODDuMBuUCB9eHMrIFagcG0/krBzhYYf2\r\njftKtUao9cgHpyk7MnMyjbJ1brFmo52HDlELhaeMhkF5S9QZFjeabH/4Eknl\r\ngZ8ECiCgnML9It7GAtcXaO6fdnaU3Y1J6E0BUy59ymyXV6EqGtgWRyBT/H/F\r\nSZKQ1HjKxj1yPdp9WhC+bVqJT+ynL3MMhNcDBMppXp9zhtiQ+AGVF9PaHPZw\r\n/F3p+bmRnZ7AoG6//Vw8Bw6EzoqrxPk60nuITGPvQe2YFmsIEiOb/H4CHWOB\r\npRMM5lwohcB296pxwXbRE2NY8Pqk+V+H3L9oMfZF5ieBydfTEVvTJJRxXRd4\r\nvjDkFPKNMMUDW1/VrLsRPgDiBmh146YaZucUILDDCZKGrSsuqrtgX7SrkPIh\r\nPMTO2pdqSMIiHr2sFwKroswCHo2P9GXNQx2H3Mc7BhzKq824coB9PdbeBOuB\r\nof/sLPOlJqgMLycsFJGdDIehdhA3nfy1gGc=\r\n=mYiH\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16"},"gitHead":"7a5374e7817f9c60dd8f0c2001246602cdf6e439","scripts":{"fix":"eslint --fix src/**/*.ts test/**/*.ts","lint":"eslint src/**/*.ts test/**/*.ts","test":"jest --silent=false","build":"tsc --build tsconfig.build.json","watch":"tsc -w","format":"prettier --write 'rule/**/*.yml' 'src/**/*.ts' 'test/**/*.ts'","test_cov":"jest --silent=false --collect-coverage"},"_npmUser":{"name":"ndruger","email":"snowfullnight@gmail.com"},"prepublish":"npm run build","_npmVersion":"9.5.0","description":"node.js CLI option parser / validator using Zod","directories":{},"_nodeVersion":"18.12.1","dependencies":{"zod":"^3.20.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.3.1","eslint":"^8.0.1","ts-jest":"^29.0.5","prettier":"^2.8.3","typescript":"*","@types/jest":"^29.2.6","@types/node":"^18.11.18","expect-type":"^0.15.0","eslint-plugin-n":"^15.0.0","eslint-plugin-import":"^2.25.2","eslint-plugin-promise":"^6.0.0","eslint-config-prettier":"^8.6.0","@typescript-eslint/eslint-plugin":"^5.0.0","eslint-plugin-simple-import-sort":"^10.0.0","eslint-config-standard-with-typescript":"latest"},"_npmOperationalInternal":{"tmp":"tmp/zod-opts_0.1.0_1679080623565_0.594429489384735","host":"s3://npm-registry-packages"}},"0.1.1":{"name":"zod-opts","version":"0.1.1","keywords":["argument","args","option","parser","cli","command"],"author":{"name":"ndruger"},"license":"MIT","_id":"zod-opts@0.1.1","maintainers":[{"name":"ndruger","email":"snowfullnight@gmail.com"}],"dist":{"shasum":"f81d4de37c211ecd8c1de590df78a5ee1159117c","tarball":"https://registry.npmjs.org/zod-opts/-/zod-opts-0.1.1.tgz","fileCount":61,"integrity":"sha512-WUR11mAQH+TVSsj3Hd6vEtbIDdE+rx5pStQ9Pf5D47b88B8tAGF3jkFQK9MnB8Db85JwJXNz41teg9mmse3TaA==","signatures":[{"sig":"MEYCIQCJSxvWLdDnuQ8e8M3m1ehpCOWdJUH0k2wHKEW5nz7kCwIhAKomt+CPea2xepD5Vh1m6pjsaQfp5bGx1Uh/eQNzCyQa","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":250541,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkFL2DACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoBPxAAmfTTGKXb8QxpcA1IxvYdNquySdHNkvG/2JNmspOuNW+ydAik\r\nP9zERD5HOuj2TSfVpF96S3+lh4tAMy2HZak3mtiaovvtqDitvHxuDy1yH2pH\r\nolQm5eDaVaIFl9xTT4td59QCpdSo9bwSAwlu7owBwRhkH/YpqB7xfemnRs0A\r\n8/OQr8TKsd5YJRVd/k4OmdS21iNrxB8/XOBIwtxQ9JBOokO4DqP4LMp+9t/f\r\n6u0OmWR2d2qxTjBTE39wzLkZzLJ/NF86PtI4TX6MP8Z0D5DOX6gPye5uuffv\r\nyhnW796MtJpkSxVc93eqzyyRqoIYMCufhBdYm3twVufCPP7BJBwy2Sdk5RvM\r\n/7WOrSrf2TVaNBVHpjk34Ii03G5wIouVu0tzUryeldYDFPeWXW8ZDI53aZNl\r\n5NNiebLJwJ5o2D8UyDpGgjTG+633OoXvEcrpT9iqjmDlwBel1ilx2jVMzTGr\r\ninXXkaSY6sfNWNgNpjYKD+ZlrQzYsqU5UoeXqGLldenuomQbAMmxfg6aQX1e\r\ncQi0R0X2kXMr2f9AMsdZXjDftuHuy5V+alt/cEXuy3hSHHjOfTZYPnXN49qW\r\n0LkPaAMJDTkl7e1P9of2HjGRVUhRQ5M20ND/qdPa398w/2X+TyTYmeebTwB7\r\nwI2om4EgoL9bUV6QNAGI5UMhAKh/NodIngc=\r\n=AEIv\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16"},"gitHead":"a09062287a9f0aaa2d3669aa539df196cbfae120","scripts":{"fix":"eslint --fix src/**/*.ts test/**/*.ts","lint":"eslint src/**/*.ts test/**/*.ts","test":"jest --silent=false","build":"tsc --build tsconfig.build.json","watch":"tsc -w","format":"prettier --write 'rule/**/*.yml' 'src/**/*.ts' 'test/**/*.ts'","test_cov":"jest --silent=false --collect-coverage"},"_npmUser":{"name":"ndruger","email":"snowfullnight@gmail.com"},"prepublish":"npm run build","_npmVersion":"9.5.0","description":"node.js CLI option parser / validator using Zod","directories":{},"_nodeVersion":"18.12.1","dependencies":{"zod":"^3.20.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.3.1","eslint":"^8.0.1","ts-jest":"^29.0.5","prettier":"^2.8.3","typescript":"*","@types/jest":"^29.2.6","@types/node":"^18.11.18","expect-type":"^0.15.0","eslint-plugin-n":"^15.0.0","eslint-plugin-import":"^2.25.2","eslint-plugin-promise":"^6.0.0","eslint-config-prettier":"^8.6.0","@typescript-eslint/eslint-plugin":"^5.0.0","eslint-plugin-simple-import-sort":"^10.0.0","eslint-config-standard-with-typescript":"latest"},"_npmOperationalInternal":{"tmp":"tmp/zod-opts_0.1.1_1679080835574_0.26698640252675876","host":"s3://npm-registry-packages"}},"0.1.2":{"name":"zod-opts","version":"0.1.2","keywords":["argument","args","option","parser","cli","command"],"author":{"name":"ndruger"},"license":"MIT","_id":"zod-opts@0.1.2","maintainers":[{"name":"ndruger","email":"snowfullnight@gmail.com"}],"homepage":"https://github.com/ndruger/zod-opts#readme","bugs":{"url":"https://github.com/ndruger/zod-opts/issues"},"dist":{"shasum":"286ec42347191458d6a589b1ccc52c3569175536","tarball":"https://registry.npmjs.org/zod-opts/-/zod-opts-0.1.2.tgz","fileCount":62,"integrity":"sha512-0NfTzbraFB/63vK44CRfkxeYwBrVMTNfHsPq4Xt1c+1E2zaojgyVIUSKmzRizLaRUOedflyCXk5oQGEeP9iy8g==","signatures":[{"sig":"MEUCIQCea8CI8IM3iTafixENOq3R07wUV5FxvULgIFoNbQIrRwIgeOP8gWXTXonwtBz1qQkXYXxuWU6/Ix2T55b0PDEAn0I=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":258622,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkFd5VACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqadw//QoP4s0sFuy7Dp32wBNIpFIz5H4D9iZYGHTz3S6usxlcOVAK8\r\nIQPqEiK6O3SxDm9EASBkOtsblUS1X15UeHsdIPooT8BlAQumPvqBr/aPyAuz\r\nGg9MPQBQ1U921u5DC+6WvRzJg1hN9yd2XRmijJKzvyjzxk4RcZ07lw0Ezy2f\r\nhm561Lm22CD8hokQeIMvUDDNIIntbZXRKFvQapnC3WK2zUN+Ymn4O9RvfqoS\r\n87En5oPLh8wD8r4k5IzVG/fz55l4oMSk26oZP7vqA0KGHqDkWjZdY7Gt4b0P\r\nFrMm+HS2o0wBktCHPQ3vf620tcH6M8mTydjmVVPGnfjPdOBtysM4sYhnhQ8b\r\newFj68cUgy9PwA4V4GhUPS45odo5wE5HSkYiHrYlqmjpPy2EEMs9jiM7Zqho\r\neQgQpxbCjDtEq/6GWkio6Izv0gyHO6l+TR6zfJ1j8BIdV6Isz0z4NShP0N1g\r\ncGsXKCbEM6XgnNZTjdILcl4O6dBADvIAL73XCmNg2c2IMisOxheOO6lXQ/c9\r\nxoO0PS+3eoDjwujkYAJ9zTGRi7Jslp4jLyTyH04blurzzJ1V0VpWrypZDchX\r\niQ/lr93RIYYltaXwaX1c2Ht8OX1QWyls1BJ7t+UmS6nxE27O6O62tqqlB/GH\r\njS6aQWGUN7phw16+r7Oa0/2bGbPVKLQbzlY=\r\n=MvLg\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16"},"gitHead":"c365588567c57960f9c6972f0248d12adb6f728e","scripts":{"fix":"eslint --fix src/**/*.ts test/**/*.ts","lint":"eslint src/**/*.ts test/**/*.ts","test":"jest --silent=false","build":"tsc --build tsconfig.build.json","watch":"tsc -w","format":"prettier --write 'rule/**/*.yml' 'src/**/*.ts' 'test/**/*.ts'","prepare":"npm run build","test_cov":"jest --silent=false --collect-coverage","prepublishOnly":"npm run test && npm run lint"},"_npmUser":{"name":"ndruger","email":"snowfullnight@gmail.com"},"repository":{"url":"git+https://github.com/ndruger/zod-opts.git","type":"git"},"_npmVersion":"9.5.0","description":"node.js CLI option parser / validator using Zod","directories":{},"_nodeVersion":"18.12.1","dependencies":{"zod":"^3.20.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.3.1","eslint":"^8.0.1","ts-jest":"^29.0.5","prettier":"^2.8.3","typescript":"*","@types/jest":"^29.2.6","@types/node":"^18.11.18","expect-type":"^0.15.0","eslint-plugin-n":"^15.0.0","eslint-plugin-import":"^2.25.2","eslint-plugin-promise":"^6.0.0","eslint-config-prettier":"^8.6.0","@typescript-eslint/eslint-plugin":"^5.0.0","eslint-plugin-simple-import-sort":"^10.0.0","eslint-config-standard-with-typescript":"latest"},"_npmOperationalInternal":{"tmp":"tmp/zod-opts_0.1.2_1679154772812_0.365727387075363","host":"s3://npm-registry-packages"}},"0.1.3":{"name":"zod-opts","version":"0.1.3","keywords":["argument","args","option","parser","cli","command"],"author":{"name":"ndruger"},"license":"MIT","_id":"zod-opts@0.1.3","maintainers":[{"name":"ndruger","email":"snowfullnight@gmail.com"}],"homepage":"https://github.com/ndruger/zod-opts#readme","bugs":{"url":"https://github.com/ndruger/zod-opts/issues"},"dist":{"shasum":"643e818b18f1b68cadde48aab310e0f42842174b","tarball":"https://registry.npmjs.org/zod-opts/-/zod-opts-0.1.3.tgz","fileCount":29,"integrity":"sha512-htSgT5JH+sDt94AhpV1a9n6luSbVYPspeihKjDr+2tGjh/mjbIXvBZWovOlk3TtbEZaMA9uv/yxxCjB1vnjEfw==","signatures":[{"sig":"MEYCIQCTupCTYqlH+dZ7FGHGFlHqWpa5P0iMr32SWNO99GTdWAIhANGW4VCAkOI5sNWGsFRcQxdNGQR3wxqnmb0an8PTgTcR","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":91196,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkFjSJACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpZ0Q//aZDjmKZyp/Hwo5BorCF3JLiSQg84kpEZPDYh7uVXU7VPur7k\r\nBRQ4Nn7eQe0h0nUPvYDkf4bGDw2d8C6sC1EnucJ2+4NQ7Zz1Pk2o5YtnUW9G\r\nVvOWG9tezJT+STvHZGZ8GLE4Xchd9CGBXEAUn41jWuKZ8/r1OxCwLhKURhRt\r\niIoR+9VxhvXDDtCEhUXs7p11IYzaAFl5papflcKT0pQTD8E53nMLYr1zwl5F\r\nkvI2db4IfT5Wk593i81B+xo8XQ49He13eygvpeCZtoeiN7BuNOSqob+MLdxr\r\nt0esNk8IE7e0mzj1C9jP/tyeSK+RHUH5OHFgUb+U/mtYV6dG3qudywrTvWnD\r\ng15K99U8MexyQLBcbJb9JOV7w9Rm/q/W1EokyTSnUyj78P6kMCd1gydh3Lno\r\nPxYR6ra+PAaqH97eb3kPMhX9XY5xij6mT+s4jiXzJxZPAd6BySlW7zmoeXfx\r\njVMTdr1opDhvU6XuZ7MQ4GJToQeDlH1VXTHqbohgatPoA1y7uG9NruEZDe4M\r\nDb3l8QQ64ItCRieah1MbfDwAmQvN2wmxgdXgnODxsiB6Xbfc+p/ZbLjypYpD\r\nY0poN42pookqj8uGfsq0SXDT2izzdCdyCIT4LNCVEEZJpvvGS9iqiG2j2V1V\r\n/klQ8OwMyvIEF5F19cwK6jTWELqiLdrxz3I=\r\n=7Ye0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16"},"gitHead":"06450a258cec13ad5e93b90c14fd2090009cbfed","scripts":{"fix":"eslint --fix src/**/*.ts test/**/*.ts","lint":"eslint src/**/*.ts test/**/*.ts","test":"jest --silent=false","build":"tsc --build tsconfig.build.json","watch":"tsc -w","format":"prettier --write 'rule/**/*.yml' 'src/**/*.ts' 'test/**/*.ts'","prepare":"npm run build","test_cov":"jest --silent=false --collect-coverage","prepublishOnly":"npm run test && npm run lint"},"_npmUser":{"name":"ndruger","email":"snowfullnight@gmail.com"},"repository":{"url":"git+https://github.com/ndruger/zod-opts.git","type":"git"},"_npmVersion":"8.19.3","description":"node.js CLI option parser / validator using Zod","directories":{},"_nodeVersion":"16.19.1","dependencies":{"zod":"^3.20.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.3.1","eslint":"^8.0.1","ts-jest":"^29.0.5","prettier":"^2.8.3","typescript":"*","@types/jest":"^29.2.6","@types/node":"^18.11.18","expect-type":"^0.15.0","eslint-plugin-n":"^15.0.0","eslint-plugin-import":"^2.25.2","eslint-plugin-promise":"^6.0.0","eslint-config-prettier":"^8.6.0","@typescript-eslint/eslint-plugin":"^5.0.0","eslint-plugin-simple-import-sort":"^10.0.0","eslint-config-standard-with-typescript":"latest"},"_npmOperationalInternal":{"tmp":"tmp/zod-opts_0.1.3_1679176841071_0.08869670607415903","host":"s3://npm-registry-packages"}},"0.1.5":{"name":"zod-opts","version":"0.1.5","keywords":["argument","args","option","parser","cli","command"],"author":{"name":"ndruger"},"license":"MIT","_id":"zod-opts@0.1.5","maintainers":[{"name":"ndruger","email":"snowfullnight@gmail.com"}],"homepage":"https://github.com/ndruger/zod-opts#readme","bugs":{"url":"https://github.com/ndruger/zod-opts/issues"},"dist":{"shasum":"5e4742eaf7f5b0ffca8f5f0a150c8e7b59a6c010","tarball":"https://registry.npmjs.org/zod-opts/-/zod-opts-0.1.5.tgz","fileCount":29,"integrity":"sha512-mtdh4xh+e4zNsp5v8R6kU73WoaurFZPoF/4+SC+yAAiWgqg1cvLhM4cr+u561nbt0GZRsv3lGP2hF2YMPK0BgQ==","signatures":[{"sig":"MEUCIQDxHO4h5KzXoB8+P8E4coa7uAwu+KhLS6BBRF/5eGxDWQIgKg/VbnTMZngqlacu0gWMSM8VU6c06Qpj2P9lJI7+tZE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":94326,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkH6JGACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqNew/9E9hYgJ7VH8/gyPYAv5tlHl0TpUo+NxdNm4QYeRjzWmufrbyP\r\nY1Y7gWsWYdXdeqMrf2TtkVvG30PH7D8o0Q06JsFHvqLkUMvRM/YuOHxMbdQP\r\nLvRoJHqGZCZDRS6eYpYSFSx4xK5GIgOGHhHhx9SrhRna+W84xOqMByhLQ9cR\r\nVpXlA7chE2pvrUE9a6id0Orpsz70Q5WxvwQG0OmWxtq4fnbPuSQmz8vqXTQM\r\nUaYoBbMucZwIejyiHGmNvmwviPgSXcTXzyBrc6cFV+XyibNsFgHodnY8Brmq\r\n1a22UmqA7AyzhRmUfTwWFZ+C7nNVSSFSd2XF38iz4Dxcj4WfT3GDYQODHOOB\r\n0HKtjwAjos0433AAfW+lBbQx45Df2HwcKdCg769Sn+NNB3qtlaIIiqhwC3p3\r\nGzlavVz1bdr04bsFYAsKWiay/et6OiFF7Au/3HcFP57jqh6eZrHHIx0SkqoJ\r\nt045KeG6ID3D2DMIg4mC6cs5TOPXfTtrKhQ2okRpdUexzIstjaffe/0x9a48\r\nPs52cdvxkqGGdCgKS1LUxCHozbTGDPAyqxvxhAVSBoThGRYpBFB+UHPXGRZp\r\nJxoLq9SVcF+/T7Cc/WMpm0yfyeH0hW0z17UxEw53rMkM0t1v1EoSGKWbaoYI\r\nV07VHiSh5TqGq/R1gBI81rkcQW8AD2rmGdg=\r\n=pUgj\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16"},"gitHead":"bc26948ab584b7d0fa1d479254cadff7d7250519","scripts":{"fix":"eslint --fix src/**/*.ts test/**/*.ts","lint":"eslint src/**/*.ts test/**/*.ts","test":"jest --silent=false","build":"tsc --build tsconfig.build.json","watch":"tsc -w","format":"prettier --write 'rule/**/*.yml' 'src/**/*.ts' 'test/**/*.ts'","prepare":"husky install","test_cov":"jest --silent=false --collect-coverage","prepublishOnly":"npm run test && npm run lint"},"_npmUser":{"name":"ndruger","email":"snowfullnight@gmail.com"},"repository":{"url":"git+https://github.com/ndruger/zod-opts.git","type":"git"},"_npmVersion":"8.19.3","description":"node.js CLI option parser / validator using Zod","directories":{},"_nodeVersion":"16.19.1","dependencies":{"zod":"^3.20.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.3.1","husky":"^8.0.3","eslint":"^8.0.1","ts-jest":"^29.0.5","prettier":"^2.8.3","typescript":"*","@types/jest":"^29.2.6","@types/node":"^18.11.18","expect-type":"^0.15.0","eslint-plugin-n":"^15.0.0","eslint-plugin-import":"^2.25.2","eslint-plugin-promise":"^6.0.0","eslint-config-prettier":"^8.6.0","@typescript-eslint/eslint-plugin":"^5.0.0","eslint-plugin-simple-import-sort":"^10.0.0","eslint-config-standard-with-typescript":"latest"},"_npmOperationalInternal":{"tmp":"tmp/zod-opts_0.1.5_1679794757820_0.17713834542494067","host":"s3://npm-registry-packages"}},"0.1.6":{"name":"zod-opts","version":"0.1.6","keywords":["argument","args","option","parser","cli","command"],"author":{"name":"ndruger"},"license":"MIT","_id":"zod-opts@0.1.6","maintainers":[{"name":"ndruger","email":"snowfullnight@gmail.com"}],"homepage":"https://github.com/ndruger/zod-opts#readme","bugs":{"url":"https://github.com/ndruger/zod-opts/issues"},"dist":{"shasum":"43e622ace74b04df7e9f00fbf588fd09b9104d75","tarball":"https://registry.npmjs.org/zod-opts/-/zod-opts-0.1.6.tgz","fileCount":29,"integrity":"sha512-uY9eKPxj6LQoR7XoF/AfI36rU4mNJVc39Avfcmu3HgCr4FIkKSJHmsaZbYErOO0kPFeubiWISNWDm/hiBrTPRw==","signatures":[{"sig":"MEUCICb5j6wdxxDb+JsC1tP35DpeWXLbL/sKUMikMgDO/bmBAiEA57PcQxdqBvg/5ucZY2Sxvc+lXVp6kA7wl+InJlnFxHM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":97958,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkJeLeACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrYkQ/+K9Q87oyGfbgLJid8ULZPTxZGqVLyV9ofwVeatmJ93Pg1r65g\r\nxWMlvUxkk3bQlchuLStipSF38Hi0BJG76WpzdiFjMQejl2eBpzTyOLyOLabK\r\nZrqhXK4xAh3Dj0GobwmmxDhfBUm71+BtGxp9rO+qyQ5uKJ1yXnZ6Y881tN05\r\n0Xkl93qmB+9dFhKirVn9ic+y6ssmHDxflszrc34YfxwLR9f0EFQn6H7rwCVi\r\ntevMfvW626MG5yck9YgSWf2HjkrCgh3wsGBMIf4Rj1HE5ArfIxDaLnRpB9NK\r\nVuHsXdEMbugRyAlPKDWnr45KbfsIVV6SnCtfl4hRMLP+F41wHsr51o2B0/AR\r\nWjEZbjbmge6soJXE3ST7lL3FSU2z5smlZNymnURQI7hjIkSKi6BNy5w43qUV\r\nvPpUi8bV/ZI5mWsL0s56GJcK1itnBsnhvj3Yeq09zE0eJFlLnPvpN+k4zVO/\r\nbVPH7rlalDIOahTsth9nnP9Jrqy6uL+nLrpgd7JgQS3d64pP9IyvaoSlx9+B\r\nFC4aE9sn0GsRtKPKBD9r4TXOOtism+ILQOxL9rz104oKwdbM6zS10/uf9rf6\r\nvGQIAlRyxoqyswScuPZ4tkCik/oRhQ2emgU0FCME+4n7VqAniwZxfVMil8EP\r\nR91/QkP8/n93TI8kW15wz80pEYsr3DlPJIU=\r\n=sMrO\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16"},"gitHead":"06130d58ce1f054419fea9e189e05ec5c20479e0","scripts":{"fix":"eslint --fix src/**/*.ts test/**/*.ts","lint":"eslint src/**/*.ts test/**/*.ts","test":"jest --silent=false","build":"tsc --build tsconfig.build.json","watch":"tsc -w","format":"prettier --write 'rule/**/*.yml' 'src/**/*.ts' 'test/**/*.ts'","prepare":"husky install","test_cov":"jest --silent=false --collect-coverage","prepublishOnly":"npm run test && npm run lint"},"_npmUser":{"name":"ndruger","email":"snowfullnight@gmail.com"},"repository":{"url":"git+https://github.com/ndruger/zod-opts.git","type":"git"},"_npmVersion":"8.19.3","description":"node.js CLI option parser / validator using Zod","directories":{},"_nodeVersion":"16.19.1","dependencies":{"zod":"^3.20.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.3.1","husky":"^8.0.3","eslint":"^8.0.1","ts-jest":"^29.0.5","prettier":"^2.8.3","typescript":"*","@types/jest":"^29.2.6","@types/node":"^18.11.18","expect-type":"^0.15.0","eslint-plugin-n":"^15.0.0","eslint-plugin-import":"^2.25.2","eslint-plugin-promise":"^6.0.0","eslint-config-prettier":"^8.6.0","@typescript-eslint/eslint-plugin":"^5.0.0","eslint-plugin-simple-import-sort":"^10.0.0","eslint-config-standard-with-typescript":"latest"},"_npmOperationalInternal":{"tmp":"tmp/zod-opts_0.1.6_1680204510626_0.9138304588484834","host":"s3://npm-registry-packages"}},"0.1.7":{"name":"zod-opts","version":"0.1.7","keywords":["argument","args","option","parser","cli","command"],"author":{"name":"ndruger"},"license":"MIT","_id":"zod-opts@0.1.7","maintainers":[{"name":"ndruger","email":"snowfullnight@gmail.com"}],"homepage":"https://github.com/ndruger/zod-opts#readme","bugs":{"url":"https://github.com/ndruger/zod-opts/issues"},"dist":{"shasum":"6a361c8075df8f077ab74cd4b0b4f1d1f5948abc","tarball":"https://registry.npmjs.org/zod-opts/-/zod-opts-0.1.7.tgz","fileCount":129,"integrity":"sha512-sMY6SRPUqLEG/jJ+A0czza55/vRuIl9Y3n7BadcEoQv0rWl/zZJQaYHQioQbjFv2T+nM+cYrWOg41X2PLPYYOg==","signatures":[{"sig":"MEUCIQDwSkcDANgmpfRjJq3MB93IvH6vhdNN3i3M9mFJRhd5dQIgGzGTogcXLI1aVGHHevdccju6Rz6HBy4l6Nkg4BXKuK0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":517153},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16"},"gitHead":"7221ea724926b16666f315e73a84215374ffcc5f","scripts":{"fix":"eslint --fix src/**/*.ts test/**/*.ts","lint":"eslint src/**/*.ts test/**/*.ts","test":"jest --silent=false","build":"tsc --build tsconfig.build.json","watch":"tsc -w","format":"prettier --write 'rule/**/*.yml' 'src/**/*.ts' 'test/**/*.ts'","prepare":"husky install","test_cov":"jest --silent=false --collect-coverage","prepublishOnly":"npm run test && npm run lint"},"_npmUser":{"name":"ndruger","email":"snowfullnight@gmail.com"},"repository":{"url":"git+https://github.com/ndruger/zod-opts.git","type":"git"},"_npmVersion":"9.5.0","description":"node.js CLI option parser / validator using Zod","directories":{},"_nodeVersion":"18.12.1","dependencies":{"zod":"^3.20.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.3.1","husky":"^8.0.3","eslint":"^8.0.1","ts-jest":"^29.0.5","prettier":"^2.8.3","typescript":"*","@types/jest":"^29.2.6","@types/node":"^18.11.18","expect-type":"^0.15.0","eslint-plugin-n":"^15.0.0","eslint-plugin-import":"^2.25.2","eslint-plugin-promise":"^6.0.0","eslint-config-prettier":"^8.6.0","@typescript-eslint/eslint-plugin":"^5.0.0","eslint-plugin-simple-import-sort":"^10.0.0","eslint-config-standard-with-typescript":"latest"},"_npmOperationalInternal":{"tmp":"tmp/zod-opts_0.1.7_1705677105371_0.6349373547919517","host":"s3://npm-registry-packages"}},"0.1.8":{"name":"zod-opts","version":"0.1.8","keywords":["argument","args","option","parser","cli","command"],"author":{"name":"ndruger"},"license":"MIT","_id":"zod-opts@0.1.8","maintainers":[{"name":"ndruger","email":"snowfullnight@gmail.com"}],"homepage":"https://github.com/ndruger/zod-opts#readme","bugs":{"url":"https://github.com/ndruger/zod-opts/issues"},"dist":{"shasum":"31499dd873b4d7f9b6b38e2702610db3e6524326","tarball":"https://registry.npmjs.org/zod-opts/-/zod-opts-0.1.8.tgz","fileCount":129,"integrity":"sha512-YZhdEcIL3D2W9fXCCf/UBgrBS90c8w25RTteh5GihGIZzadYr/qIFxyM2L98zHUkZ2S8MMxwn3ny8fzPNnvPlg==","signatures":[{"sig":"MEUCIQCx+jLBhGmb/foo9Lumy7d83oSvH9OO52KBx1IdiFdlXgIgZzgkof7lJEldJyRkvVViv8zV2GRZ8VPfhn4V9xkYup0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":517622},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16"},"gitHead":"2d6f4897dc4ae4375678aa9ce827284e1506fb4b","scripts":{"fix":"eslint --fix src/**/*.ts test/**/*.ts","lint":"eslint src/**/*.ts test/**/*.ts","test":"jest --silent=false","build":"tsc --build tsconfig.build.json","watch":"tsc -w","format":"prettier --write 'rule/**/*.yml' 'src/**/*.ts' 'test/**/*.ts'","prepare":"husky install","test_cov":"jest --silent=false --collect-coverage","prepublishOnly":"npm run test && npm run lint"},"_npmUser":{"name":"ndruger","email":"snowfullnight@gmail.com"},"repository":{"url":"git+https://github.com/ndruger/zod-opts.git","type":"git"},"_npmVersion":"9.5.0","description":"node.js CLI option parser / validator using Zod","directories":{},"_nodeVersion":"18.12.1","dependencies":{"zod":"^3.20.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.3.1","husky":"^8.0.3","eslint":"^8.0.1","ts-jest":"^29.0.5","prettier":"^2.8.3","typescript":"*","@types/jest":"^29.2.6","@types/node":"^18.11.18","expect-type":"^0.15.0","eslint-plugin-n":"^15.0.0","eslint-plugin-import":"^2.25.2","eslint-plugin-promise":"^6.0.0","eslint-config-prettier":"^8.6.0","@typescript-eslint/eslint-plugin":"^5.0.0","eslint-plugin-simple-import-sort":"^10.0.0","eslint-config-standard-with-typescript":"latest"},"_npmOperationalInternal":{"tmp":"tmp/zod-opts_0.1.8_1705677612652_0.6364628864202742","host":"s3://npm-registry-packages"}},"1.0.0":{"name":"zod-opts","version":"1.0.0","description":"node.js CLI option parser / validator using Zod","main":"dist/index.js","types":"dist/index.d.ts","keywords":["argument","args","option","parser","cli","command"],"author":{"name":"ndruger"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/ndruger/zod-opts.git"},"devDependencies":{"@types/jest":"^29.5.14","@types/node":"^18.19.130","@typescript-eslint/eslint-plugin":"^8.51.0","@typescript-eslint/parser":"^8.51.0","eslint":"^9.39.2","eslint-config-prettier":"^10.1.8","eslint-plugin-import":"^2.32.0","eslint-plugin-n":"^17.23.1","eslint-plugin-promise":"^7.2.1","eslint-plugin-simple-import-sort":"^12.1.1","expect-type":"^1.3.0","husky":"^9.1.7","jest":"^29.7.0","prettier":"^2.8.8","ts-jest":"^29.0.5","typescript":"^5.4.2","zod":"^3.25.76"},"peerDependencies":{"zod":"^3.25.0 || ^4.0.0"},"scripts":{"build":"tsc --build tsconfig.build.json","watch":"tsc -w","test":"jest --silent=false","test:zod3":"node ./scripts/run-with-zod-version.mjs ^3.25.0 -- npm run test","test:zod4":"node ./scripts/run-with-zod-version.mjs ^4.3.4 -- npm run test","test_cov:zod3":"node ./scripts/run-with-zod-version.mjs ^3.25.0 -- jest --silent=false --collect-coverage","test_cov:zod4":"node ./scripts/run-with-zod-version.mjs ^4.3.4 -- jest --silent=false --collect-coverage","typecheck:zod3":"node ./scripts/run-with-zod-version.mjs ^3.25.0 -- npx tsc --noEmit","typecheck:zod4":"node ./scripts/run-with-zod-version.mjs ^4.3.4 -- npx tsc --noEmit","format":"prettier --write 'rule/**/*.yml' 'src/**/*.ts' 'test/**/*.ts'","lint":"eslint src/**/*.ts test/**/*.ts","verify:all":"npm run test:zod3 && npm run test:zod4 && npm run typecheck:zod3 && npm run typecheck:zod4 && npm run lint","fix":"eslint --fix src/**/*.ts test/**/*.ts","prepare":"husky","prepublishOnly":"npm run test && npm run lint"},"engines":{"node":">=18"},"_id":"zod-opts@1.0.0","gitHead":"6c799cda88f608eec8c205f0c1db2109ba3da37c","bugs":{"url":"https://github.com/ndruger/zod-opts/issues"},"homepage":"https://github.com/ndruger/zod-opts#readme","_nodeVersion":"18.20.8","_npmVersion":"10.8.2","dist":{"integrity":"sha512-WjUNy2m94AP3GZqPW/gteLw0URDX+6dc92GK+FA0AOt8oAh8zp2NxmEH9XZEG4L2gR0bmQobdr7oJ2xlzZqsDg==","shasum":"8ac97c8c38f920c6b031dc49f2eb100b2e730945","tarball":"https://registry.npmjs.org/zod-opts/-/zod-opts-1.0.0.tgz","fileCount":32,"unpackedSize":113549,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/zod-opts@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIAuCpjIblwFZMWzSTgoNFcMJscom4FNn6xHCOUq9ws/2AiEA2xVCMFIV1GelkRrCOKri8jJ2oezVNXXNTYKKZ4BkCrc="}]},"_npmUser":{"name":"ndruger","email":"snowfullnight@gmail.com"},"directories":{},"maintainers":[{"name":"ndruger","email":"snowfullnight@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/zod-opts_1.0.0_1767503558853_0.8099874963669766"},"_hasShrinkwrap":false}},"time":{"created":"2023-03-17T19:17:03.565Z","modified":"2026-01-04T05:12:39.380Z","0.1.0":"2023-03-17T19:17:03.773Z","0.1.1":"2023-03-17T19:20:35.760Z","0.1.2":"2023-03-18T15:52:52.976Z","0.1.3":"2023-03-18T22:00:41.256Z","0.1.5":"2023-03-26T01:39:18.017Z","0.1.6":"2023-03-30T19:28:30.879Z","0.1.7":"2024-01-19T15:11:45.549Z","0.1.8":"2024-01-19T15:20:12.847Z","1.0.0":"2026-01-04T05:12:39.036Z"},"bugs":{"url":"https://github.com/ndruger/zod-opts/issues"},"author":{"name":"ndruger"},"license":"MIT","homepage":"https://github.com/ndruger/zod-opts#readme","keywords":["argument","args","option","parser","cli","command"],"repository":{"type":"git","url":"git+https://github.com/ndruger/zod-opts.git"},"description":"node.js CLI option parser / validator using Zod","maintainers":[{"name":"ndruger","email":"snowfullnight@gmail.com"}],"readme":"# ZodOpts\n\n[![NPM Version](http://img.shields.io/npm/v/zod-opts.svg?style=flat)](https://www.npmjs.org/package/zod-opts)\n[![MIT License](http://img.shields.io/badge/license-MIT-blue.svg?style=flat)](LICENSE)\n[![CI](https://github.com/ndruger/zod-opts/actions/workflows/ci.yml/badge.svg)](https://github.com/ndruger/zod-opts/actions/workflows/ci.yml)\n[![codecov](https://codecov.io/gh/ndruger/zod-opts/branch/master/graph/badge.svg?token=TX7GCMBT8U)](https://codecov.io/gh/ndruger/zod-opts)\n[![Minified size](https://img.shields.io/bundlephobia/min/zod-opts)](https://bundlephobia.com/package/zod-opts)\n\nA library that simplifies the process of parsing and validating command-line arguments using the [Zod](https://github.com/colinhacks/zod) validation library\n\n<!-- TOC -->\n\n- [ZodOpts](#zodopts)\n  - [Installation](#installation)\n  - [Zod Compatibility](#zod-compatibility)\n  - [Quick Start](#quick-start)\n  - [Options](#options)\n    - [Various option types](#various-option-types)\n      - [boolean types](#boolean-types)\n        - [negatable boolean](#negatable-boolean)\n      - [enum types](#enum-types)\n      - [array types](#array-types)\n        - [array option](#array-option)\n        - [array positional arguments](#array-positional-arguments)\n    - [Custom validation](#custom-validation)\n    - [Variadic arguments](#variadic-arguments)\n  - [Commands](#commands)\n  - [Help](#help)\n  - [Version](#version)\n  - [Advanced Usage](#advanced-usage)\n    - [Reuse Zod object type](#reuse-zod-object-type)\n  - [Future work ideas](#future-work-ideas)\n\n<!-- /TOC -->\n\n## Installation\n\n```bash\nnpm install zod-opts # npm\n\nyarn add zod-opts # yarn\n```\n\n## Zod Compatibility\n\nzod-opts supports both Zod v3 (3.25.0+) and Zod v4.\n\n### Behavioral Differences\n\nThere is a behavioral difference between Zod v3 and v4 when using `.default().optional()`:\n\n```ts\nconst schema = z.string().default(\"foo\").optional();\n\n// Zod v3: schema.parse(undefined) → undefined\n// Zod v4: schema.parse(undefined) → \"foo\"\n```\n\n| Pattern                                | Zod v3      | Zod v4      |\n| -------------------------------------- | ----------- | ----------- |\n| `z.string().optional()`                | `undefined` | `undefined` |\n| `z.string().default(\"foo\")`            | `\"foo\"`     | `\"foo\"`     |\n| `z.string().optional().default(\"foo\")` | `\"foo\"`     | `\"foo\"`     |\n| `z.string().default(\"foo\").optional()` | `undefined` | `\"foo\"`     |\n\nIn Zod v4, `.default()` always applies regardless of `.optional()`. If you're migrating from v3 to v4, review any usage of `.default().optional()` as the behavior has changed.\n\n**Recommendation**: Use `.default(\"foo\")` alone if you want a default value. The `.optional()` suffix is redundant in Zod v4.\n\n### Changes introduced for Zod v4 support\n\n- Zod schema inspection now uses the compatibility layer to recognize v4-specific shapes (e.g., enums defined via `entries`, arrays with `element`), so more v4 schemas are accepted without code changes.\n- Optional/default handling is stricter: defaults wrapped in `optional`/`effects`/`pipe`/`nullable`/`readonly` are resolved before building option metadata, matching Zod v4 behavior.\n- Unknown commands/options/positionals now surface clear `ParseError` messages early; validation no longer silently assumes definitions exist. This improves feedback for mis-typed flags when running under either Zod v3 or v4.\n\n## Quick Start\n\nFile: [simple.ts](./example/simple.ts)\n\n```ts\nimport { z } from \"zod\";\nimport { parser } from \"zod-opts\";\n\nconst parsed = parser()\n  .options({\n    option1: {\n      type: z.boolean().default(false),\n      alias: \"a\",\n    },\n    option2: {\n      type: z.string(),\n    },\n  })\n  .parse(); // same with .parse(process.argv.slice(2))\n\n// parsed is inferred as { option1: boolean, option2: string }\nconsole.log(parsed);\n```\n\n```bash\n# Valid options\n$ node simple.js --option1 --option2=str  # or `node simple.js -a --option2 str`\n{ option1: true, option2: 'str' }\n\n# Help\n$ node simple.js --help\nUsage: simple.js [options]\n\nOptions:\n  -h, --help              Show help\n  -a, --option1           (default: false)\n      --option2 <string>                    [required]\n\n# Invalid options show help and make exit(1)\n$ node simple.js\nRequired option is missing: option2\n\nUsage: simple.js [options]\n\nOptions:\n  -h, --help              Show help\n  -a, --option1           (default: false)\n      --option2 <string>                    [required]\n```\n\nFile: [complex.ts](./example/complex.ts)\n\n```ts\nimport { z } from \"zod\";\n// import { parser } from \"zod-opts\";\nimport { parser } from \"../src/index\";\n\nconst parsed = parser()\n  .name(\"scriptA\") // script name on Usage\n  .version(\"1.0.0\") // version on Usage\n  .options({\n    option1: {\n      // if default() is specified, it will be optional option.\n      type: z.string().describe(\"description of option\").default(\"default\"),\n      argumentName: \"NameA\", // used in Usage.\n    },\n    option2: {\n      type: z\n        .string()\n        .regex(/[a-z]+/) // you can use zod's various methods.\n        .optional(), // if optional() is specified, it will be optional option.\n    },\n    option3: {\n      type: z.number().min(5), // accepts only number and greater than 5.\n    },\n    option4: {\n      type: z.enum([\"a\", \"b\", \"c\"]).default(\"b\"), // accepts only \"a\", \"b\", \"c\" and default is \"b\".\n    },\n  })\n  .args([\n    {\n      // And required arguments.\n      name: \"arg1\",\n      type: z.string(),\n    },\n  ])\n  .parse();\n\n// parsed is inferred as below.\n// const parsed: {\n//   option1: string;\n//   option2?: string | undefined;\n//   option3: number;\n//   option4: \"a\" | \"b\" | \"c\";\n//   arg1: string;\n// }\nconsole.log(parsed);\n```\n\n```bash\n# Valid options\n$  node complex.js --option3=10 arg_str\n{\n  option1: 'default',\n  option2: undefined,\n  option3: 10,\n  option4: 'b',\n  arg1: 'arg_str'\n}\n\n# Help\n$  node complex.js --help\nUsage: scriptA [options] <arg1>\n\nArguments:\n  arg1    [required]\n\nOptions:\n  -h, --help              Show help\n  -V, --version           Show version\n      --option1 <NameA>   description of option (default: \"default\")\n      --option2 <string>\n      --option3 <number>                                              [required]\n      --option4 <string>  (choices: \"a\", \"b\", \"c\") (default: \"b\")\n\n# Version\n$  node complex.js --version\n1.0.0\n```\n\n## Options\n\n### Various option types\n\n#### boolean types\n\n- .options() supports boolean type\n- .args() DOES NOT support boolean type\n\nFile: [boolean.ts](./example/boolean.ts)\n\n```ts\nconst parsed = parser()\n  .options({\n    option1: {\n      type: z.boolean(), // required option. type is boolean\n    },\n    option2: {\n      type: z.boolean().default(false), // optional option. type is boolean\n    },\n    option3: {\n      type: z.boolean().optional(), // optional option. type is boolean|undefined\n    },\n    option4: {\n      type: z.boolean().default(false).optional(), // optional option. type is boolean|undefined\n    },\n  })\n  .parse();\n\n// parsed is inferred as below:\n// const parsed: {\n//     option1: boolean;\n//     option2: boolean;\n//     option3?: boolean;\n//     option4?: boolean;\n// }\n```\n\n##### negatable boolean\n\nYou can use '--no-' prefix to set false(ex. `--no-option1`).\n\n```ts\nconst parsed = parser()\n  .options({\n    option1: {\n      type: z.boolean().default(true),\n    },\n  })\n  .parse();\nconsole.log(parsed);\n```\n\n```bash\n$ node script.js --no-option1\n{ option1: false }\n```\n\n#### enum types\n\n- .options() supports enum type\n- .args() supports enum type\n\nFile: [enum.ts](./example/enum.ts)\n\n```ts\nconst parsed = parser()\n  .options({\n    option1: {\n      type: z.enum([\"a\", \"b\"]), // required option. type is \"a\"|\"b\"\n    },\n    option2: {\n      type: z.enum([\"a\", \"b\"]).default(\"b\"), // optional option. type is \"a\"|\"b\"\n    },\n    option3: {\n      type: z.enum([\"a\", \"b\"]).optional(), // optional option. type is \"a\"|\"b\"|undefined\n    },\n    option4: {\n      type: z.enum([\"a\", \"b\"]).default(\"b\").optional(), // optional option. type is \"a\"|\"b\"|undefined\n    },\n  })\n  .args([\n    {\n      name: \"position1\",\n      type: z.enum([\"a\", \"b\"]), // required arg. type is \"a\"|\"b\"\n    },\n  ])\n  .parse();\n\n// parsed is inferred as below:\n// const parsed: {\n//   option1: \"a\" | \"b\";\n//   option2: \"a\" | \"b\";\n//   option3?: \"a\" | \"b\";\n//   option4?: \"a\" | \"b\";\n//   position1: \"a\" | \"b\";\n// };\nconsole.log(parsed);\n```\n\n#### array types\n\n- .options() supports array type\n- .args() supports array type\n\n##### array option\n\nCAUTION: `program --opt opt_arg1 opt_arg2 pos_arg` will be treated as `opt=['opt_arg1' 'opt_arg2' 'pos_arg']`.\nIn this case, the user should use `program --opt opt_arg1 opt_arg2 -- pos_arg`.\n\nFile: [array_option.ts](./example/array_option.ts)\n\n```ts\nconst parsed = parser()\n  .options({\n    opt: {\n      type: z.array(z.string()), // required option. type is string[]\n      //   type: z.array(z.string()).default([]), // optional arg. type is string[] and default is []\n    },\n  })\n  .parse();\n\n// parsed is inferred as below:\n// const parsed: {\n//   opt: string[];\n// };\nconsole.log(parsed);\n```\n\n```bash\n# Valid options\n$ node array_option.js --opt str1 str2\n{ opt: [ 'str1', 'str2' ] }\n\n# Invalid options (empty array is not permitted. use `.default([])` instead).\n$ node array_option.js --opt\nOption 'opt' needs value: opt\n\nUsage: array_option.js [options]\n\nOptions:\n  -h, --help              Show help\n      --opt <string ...>             [required]\n```\n\n##### array positional arguments\n\nFile: [array_argument.ts](./example/array_argument.ts)\n\n```ts\nconst parsed = parser()\n  .args([\n    {\n      name: \"pos\",\n      type: z.array(z.string()), // required arg. type is string[]\n      //   type: z.array(z.string()).default([]), // optional arg. type is string[] and default is []\n    },\n  ])\n  .parse();\n\n// parsed is inferred as below:\n// const parsed: {\n//   pos: string[];\n// };\nconsole.log(parsed);\n```\n\n```bash\n# Valid options\n$ node array_argument.js str1 str2\n{ pos: [ 'str1', 'str2' ] }\n\n# Invalid options (empty array is not permitted. use `.default([])` instead).\n$ node array_argument.js\nRequired argument is missing: pos\n\nUsage: array_argument.js [options] <pos ...>\n\nArguments:\n  pos    [required]\n\nOptions:\n  -h, --help  Show help\n```\n\n### Custom validation\n\nYou can use Zod's `.refine()` method to validate each option(e.g. `z.string().refine((v) => v === \"foo\" || v === \"bar\", {message: \"option1 must be foo or bar\"}`).\n\nIf you want to check combinations of options, you can use `.validation()` method. `.validation()` registers the custom validation function. And the function is called after default validation.\n\nFile: [custom_validation.ts](./example/custom_validation.ts)\n\n```ts\nconst parsed = parser()\n  .options({\n    option1: {\n      type: z.number(),\n    },\n    option2: {\n      type: z.number(),\n    },\n  })\n  .validation((parsed) => {\n    if (parsed.option1 === parsed.option2) {\n      throw Error(\"option1 and option2 must be different\"); // or return \"option1 and option2 must be different\"\n    }\n    return true;\n  })\n  .parse();\n\nconsole.log(parsed);\n```\n\n```bash\n# Valid options\n$ node custom_validation.js --option1=10 --option2=11\n{ option1: 10, option2: 11 }\n\n# Invalid options\n$ node custom_validation.js --option1=10 --option2=10\noption1 and option2 must be different\n\nUsage: custom_validation.js [options]\n\nOptions:\n  -h, --help              Show help\n      --option1 <number>             [required]\n      --option2 <number>             [required]\n```\n\n### Variadic arguments\n\nPlease refer [array types](#array-types).\n\n## Commands\n\nFile [command.ts](./example/command.ts)\n\n```ts\nimport { z } from \"zod\";\nimport { parser } from \"zod-opts\";\n\nconst command1 = command(\"command1\")\n  .options({\n    option1: {\n      type: z.boolean().default(false),\n    },\n  })\n  .action((parsed) => {\n    // parsed is inferred as { option1: boolean }\n    console.log(\"command2\", parsed);\n  });\n\nconst command2 = command(\"command2\")\n  .options({\n    option1: {\n      type: z.string(),\n    },\n  })\n  .action((parsed) => {\n    // parsed is inferred as { option1: string }\n    console.log(\"command2\", parsed);\n  });\n\nparser().subcommand(command1).subcommand(command2).parse();\n```\n\n```bash\n# Valid options\n$ node command.js command1 --option1\ncommand1 { option1: true }\n\n# Invalid options\n$  node command.js command2 a\nToo many positional arguments\n\nUsage: command.js command2 [options]\n\nOptions:\n  -h, --help              Show help\n      --option1 <string>             [required]\n\n# Global help\n$ node command.js --help\nUsage: command.js [options] <command>\n\nCommands:\n  command1\n  command2\n\nOptions:\n  -h, --help  Show help\n\n# Command help\n$ node command.js command1 --help\nUsage: command.js command1 [options]\n\nOptions:\n  -h, --help     Show help\n      --option1  (default: false)\n```\n\n## Help\n\nYou can `.showHelp()` to show help message. And `.getHelp()` returns the help message.\n\n## Version\n\nIf the parser has called with `.version()` method, The user can show the version with `--version` or `-V` option.\n\n```bash\n$ node complex.js --version\n1.0.0\n```\n\n## Advanced Usage\n\n### Reuse Zod object type\n\nIf you want to reuse Zod object type, you can define the type and use it in `.options()` and `.args()`.\n\nFile: [map_zod_object.ts](./example/map_zod_object.ts)\n\n```ts\nimport { z } from \"zod\";\nimport { parser } from \"zod-opts\";\n\nconst OptionsSchema = z.object({\n  opt1: z.string(),\n  opt2: z.number().optional(),\n  pos1: z.enum([\"a\", \"b\"]),\n});\n\ntype Options = z.infer<typeof OptionsSchema>;\n\nfunction parseOptions(): Options {\n  return parser()\n    .name(\"scriptA\")\n    .version(\"1.0.0\")\n    .description(\"desc\")\n    .options({\n      opt1: { type: OptionsSchema.shape.opt1 },\n      opt2: { type: OptionsSchema.shape.opt2 },\n    })\n    .args([\n      {\n        name: \"pos1\",\n        type: OptionsSchema.shape.pos1,\n      },\n    ])\n    .parse();\n}\n\nconst options = parseOptions();\nconsole.log(options);\n```\n\n## Future work ideas\n\n- [ ] Support nested commands.\n- [ ] Support `z.array()` type in `options()`.\n- [ ] Support custom callback to handle errors, help and exit().\n- [ ] `asyncParse()`\n","readmeFilename":"README.md"}