{"_id":"@jondotsoy/flags","_rev":"22-38fd6012602d944e234de4fb2e07fbb3","name":"@jondotsoy/flags","dist-tags":{"latest":"3.2.1"},"versions":{"1.0.4":{"name":"@jondotsoy/flags","version":"1.0.4","keywords":[],"author":{"url":"https://jon.soy","name":"Jonathan Delgado","email":"hi@jon.soy"},"license":"MIT","_id":"@jondotsoy/flags@1.0.4","maintainers":[{"name":"jondotsoy","email":"hi@jon.soy"}],"dist":{"shasum":"4713a17fabb96f9e5e28da36b046b71545114738","tarball":"https://registry.npmjs.org/@jondotsoy/flags/-/flags-1.0.4.tgz","fileCount":10,"integrity":"sha512-bLCsJyVwexHm+8B57HqFpsYCf7zMSBQlTxEhLh6DgFca//NFLo47XxpfDaVXKq/xJN5dwCJUrfCnD5OSqJ7m5Q==","signatures":[{"sig":"MEQCICUw1yKG+nC0dh9wsW10ZgQh1gzfR5TmgaKtS8GPyK5FAiAX0RqfLCt1CHlvAJm93fXYDK8ZBsrhOzxN0G6Xy+3Agw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":24942},"main":"flags.js","types":"./flags.d.ts","gitHead":"83081cabaa2730866f4d7cb526530980e5d37070","scripts":{"test":"vitest","build":"tsc"},"_npmUser":{"name":"jondotsoy","email":"hi@jon.soy"},"_npmVersion":"9.8.0","description":"A Javascript arguments processor","directories":{},"_nodeVersion":"20.5.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^0.34.3","typescript":"^5.2.2","@types/node":"^20.5.6"},"_npmOperationalInternal":{"tmp":"tmp/flags_1.0.4_1693166981975_0.7091172149983191","host":"s3://npm-registry-packages"}},"1.0.5":{"name":"@jondotsoy/flags","version":"1.0.5","keywords":[],"author":{"url":"https://jon.soy","name":"Jonathan Delgado","email":"hi@jon.soy"},"license":"MIT","_id":"@jondotsoy/flags@1.0.5","maintainers":[{"name":"jondotsoy","email":"hi@jon.soy"}],"dist":{"shasum":"809b0c2d32ff049d56aedc3d38587ae0e6555560","tarball":"https://registry.npmjs.org/@jondotsoy/flags/-/flags-1.0.5.tgz","fileCount":7,"integrity":"sha512-Hs/uqsgeSF9FDoh8VFxiA/RI3SSyhDb2vJaRNEoL5TQI8tsEJ6sQejblr28FBegoRrGzF9wlH0MTzWNt9pHQjw==","signatures":[{"sig":"MEQCIHqjmwJMx4ewrHU6d7a+pVsfyOE3lX/E6SPYK3mfverYAiAIuGwMFJcf2sx/ZbC88++UIiMceWpMLPZPqB53s/wQDg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":7569},"main":"flags.js","types":"./flags.d.ts","gitHead":"89eebc675fdc05e78bacd25d54323cef6c0d185f","scripts":{"test":"vitest","build":"tsc"},"_npmUser":{"name":"jondotsoy","email":"hi@jon.soy"},"_npmVersion":"9.8.0","description":"A Javascript arguments processor","directories":{},"_nodeVersion":"20.5.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^0.34.3","typescript":"^5.2.2","@types/node":"^20.5.6"},"_npmOperationalInternal":{"tmp":"tmp/flags_1.0.5_1693167520248_0.28046186605306045","host":"s3://npm-registry-packages"}},"1.1.0":{"name":"@jondotsoy/flags","version":"1.1.0","keywords":[],"author":{"url":"https://jon.soy","name":"Jonathan Delgado","email":"hi@jon.soy"},"license":"MIT","_id":"@jondotsoy/flags@1.1.0","maintainers":[{"name":"jondotsoy","email":"hi@jon.soy"}],"dist":{"shasum":"ea4985170c8f0e569e7ecda59909354317a79838","tarball":"https://registry.npmjs.org/@jondotsoy/flags/-/flags-1.1.0.tgz","fileCount":7,"integrity":"sha512-gj0ErAjg+qfkJxd9gZmpNLKi8vHIpAsNzgQF6xhOdKGw9n7upTs8wZeDr4UFr/uWCMwdBKQY8JhYhBPOYA1qMg==","signatures":[{"sig":"MEUCIQCXLjdX+pQvuKCqsMmK0iq+/DIEUHDtKACyCtpCiAoDCAIgOAECYdlGPNQDhijCpxKXg+2MnEflY+E7I2vtn+uHCIw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":9373},"main":"flags.js","types":"./flags.d.ts","gitHead":"90e2cad85bfa298040290a74972cb040d5c8b64c","scripts":{"test":"vitest","build":"tsc","clean":"tsc --build --clean"},"_npmUser":{"name":"jondotsoy","email":"hi@jon.soy"},"_npmVersion":"9.8.0","description":"A Javascript arguments processor","directories":{},"_nodeVersion":"20.5.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^0.34.3","typescript":"^5.2.2","@types/node":"^20.5.6"},"_npmOperationalInternal":{"tmp":"tmp/flags_1.1.0_1693334973910_0.38459688679091286","host":"s3://npm-registry-packages"}},"1.1.1":{"name":"@jondotsoy/flags","version":"1.1.1","keywords":[],"author":{"url":"https://jon.soy","name":"Jonathan Delgado","email":"hi@jon.soy"},"license":"MIT","_id":"@jondotsoy/flags@1.1.1","maintainers":[{"name":"jondotsoy","email":"hi@jon.soy"}],"dist":{"shasum":"574f482853fa4e9c2cee38aba2ffeb4effa5bec5","tarball":"https://registry.npmjs.org/@jondotsoy/flags/-/flags-1.1.1.tgz","fileCount":7,"integrity":"sha512-f2/I+PnaJHww6OgMvLTFTdaNsocR4GU9Q3pmuQ7VwRSMMnBpMHLaZGGFdj14oXw44Tf3+Uq01rc2H4Ul1fM15g==","signatures":[{"sig":"MEUCIQCxxWiPC4WRiajZezfaBFNTrA1M3GvXj/xnQl3ywLdLPwIgLvvTAMnXDTCrCrnN5f6Pqsju+3vXko9WpW4roTmMBKw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":9608},"main":"flags.js","types":"./flags.d.ts","gitHead":"3f97a5127fe801cd304cd82e26ebd5ecc3efd746","scripts":{"test":"vitest","build":"tsc","clean":"tsc --build --clean"},"_npmUser":{"name":"jondotsoy","email":"hi@jon.soy"},"_npmVersion":"9.8.0","description":"A Javascript arguments processor","directories":{},"_nodeVersion":"20.5.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^0.34.3","typescript":"^5.2.2","@types/node":"^20.5.6"},"_npmOperationalInternal":{"tmp":"tmp/flags_1.1.1_1693508175529_0.8207559784075253","host":"s3://npm-registry-packages"}},"2.0.0":{"name":"@jondotsoy/flags","version":"2.0.0","keywords":[],"author":{"url":"https://jon.soy","name":"Jonathan Delgado","email":"hi@jon.soy"},"license":"MIT","_id":"@jondotsoy/flags@2.0.0","maintainers":[{"name":"jondotsoy","email":"hi@jon.soy"}],"dist":{"shasum":"7ffbdfb91181b774ac4fc2903b32d21f03de4e53","tarball":"https://registry.npmjs.org/@jondotsoy/flags/-/flags-2.0.0.tgz","fileCount":7,"integrity":"sha512-yiaDnTPqIBbs5sBdvJ6uAHrF3QvjCXlJdq0ycVBTpcJPLEx3tFsZBS+VgpZ2plAgilUkXxqN+HPvCN4A3IJjLA==","signatures":[{"sig":"MEYCIQDF8wfLp9U7zP6YD7vqtC3NCmqehg9nnnJCWds3H2vmaQIhAI4UnTVz7M7zp5GH4kuRKe+AEjunCzESBTqPK7xPfrUc","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":24573},"main":"flags.js","types":"./flags.d.ts","gitHead":"9f9ba17a8e79aeb65601d77ce35107bb0f0bb3cd","scripts":{"test":"vitest","build":"tsc","clean":"tsc --build --clean"},"_npmUser":{"name":"jondotsoy","email":"hi@jon.soy"},"_npmVersion":"9.8.0","description":"A Javascript arguments processor","directories":{},"_nodeVersion":"20.5.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^0.34.3","typescript":"^5.2.2","@types/node":"^20.5.6"},"_npmOperationalInternal":{"tmp":"tmp/flags_2.0.0_1693832883682_0.45567470356463513","host":"s3://npm-registry-packages"}},"2.0.1":{"name":"@jondotsoy/flags","version":"2.0.1","keywords":[],"author":{"url":"https://jon.soy","name":"Jonathan Delgado","email":"hi@jon.soy"},"license":"MIT","_id":"@jondotsoy/flags@2.0.1","maintainers":[{"name":"jondotsoy","email":"hi@jon.soy"}],"dist":{"shasum":"89742808be88cdfa1761059ba1bc51722756e567","tarball":"https://registry.npmjs.org/@jondotsoy/flags/-/flags-2.0.1.tgz","fileCount":7,"integrity":"sha512-stl0KmmiQUE9Yn4v5G1DAMy3GluE+R2+jeiRaibNI40OXoQ5q2Ivd+qg/aYFsETiHHfTXiVlWjgg9c0gOIiH+w==","signatures":[{"sig":"MEYCIQD3I/GW2rAG8Up98xZrUvAiXsIBXAh4MlzH7Bqqk8o+VwIhAPcpKTU+gqmbVag1sRSn54Fhl63Ia7SNc8XiivuadDIL","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26386},"main":"flags.js","types":"./flags.d.ts","gitHead":"b5434e0203b3f2a8aa13ea7fff26b270f8322c77","scripts":{"test":"vitest","build":"tsc","clean":"tsc --build --clean"},"_npmUser":{"name":"jondotsoy","email":"hi@jon.soy"},"_npmVersion":"9.8.0","description":"A Javascript arguments processor","directories":{},"_nodeVersion":"20.5.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^0.34.3","typescript":"^5.2.2","@types/node":"^20.5.6"},"_npmOperationalInternal":{"tmp":"tmp/flags_2.0.1_1693855348924_0.20424079047582477","host":"s3://npm-registry-packages"}},"2.0.2":{"name":"@jondotsoy/flags","version":"2.0.2","keywords":[],"author":{"url":"https://jon.soy","name":"Jonathan Delgado","email":"hi@jon.soy"},"license":"MIT","_id":"@jondotsoy/flags@2.0.2","maintainers":[{"name":"jondotsoy","email":"hi@jon.soy"}],"dist":{"shasum":"f3476158d0fff6c5411369f27cd0cbd7457f9831","tarball":"https://registry.npmjs.org/@jondotsoy/flags/-/flags-2.0.2.tgz","fileCount":7,"integrity":"sha512-Tmb02Einmt5N4acnleZcurmdFmYKmA0OcRh4+o2BOYEgNaOxHuh52M2E9i+8iTdgcC5P1ypOak32kQ6VCElWSQ==","signatures":[{"sig":"MEUCIGXyiTHFv4gexP+1BZNDhVxmbi7ae3XlBtxZSOlZlhTkAiEA9kYmyoF/s1xG0U4/zahh1E+stPPtuIJf1vQanj4Xtks=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26431},"main":"flags.js","types":"./flags.d.ts","gitHead":"6e9cc9bbd6bec527bbac89efafb9194ae5a553a7","scripts":{"test":"vitest","build":"tsc","clean":"tsc --build --clean"},"_npmUser":{"name":"jondotsoy","email":"hi@jon.soy"},"_npmVersion":"9.8.0","description":"A Javascript arguments processor","directories":{},"_nodeVersion":"20.5.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^0.34.3","typescript":"^5.2.2","@types/node":"^20.5.6"},"_npmOperationalInternal":{"tmp":"tmp/flags_2.0.2_1693856562622_0.5879695329567927","host":"s3://npm-registry-packages"}},"2.0.3":{"name":"@jondotsoy/flags","version":"2.0.3","keywords":[],"author":{"url":"https://jon.soy","name":"Jonathan Delgado","email":"hi@jon.soy"},"license":"MIT","_id":"@jondotsoy/flags@2.0.3","maintainers":[{"name":"jondotsoy","email":"hi@jon.soy"}],"dist":{"shasum":"2fb5d5356551675a912f0e36a9928f13a09c4617","tarball":"https://registry.npmjs.org/@jondotsoy/flags/-/flags-2.0.3.tgz","fileCount":8,"integrity":"sha512-PPyXS4NwUhhp7i59z+uxctC7AH1E53tdg8dMn96qr1uOrWbqZrmZQpCtVqqL4s5CYB2eeh1CevQAU+eZRyzXeg==","signatures":[{"sig":"MEYCIQCNEpXVYNSYupESka5M6XAtgEqUkMUvtNt8m57ZzqcfPAIhAIikAgv4SoObqfId+n80+4j6lLDzlVfB5VhLRfmA5Elp","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":49636},"main":"./lib/cjs/flags.js","types":"./lib/types/flags.d.ts","module":"./lib/esm/flags.js","gitHead":"6c223f14d8143eb2c35e9ea4a2341fb769799ccb","scripts":{"fmt":"prettier -w .","test":"bun test","build":"make","prepack":"make"},"_npmUser":{"name":"jondotsoy","email":"hi@jon.soy"},"_npmVersion":"10.2.3","description":"A Javascript arguments processor","directories":{},"_nodeVersion":"20.10.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"^3.3.1","@types/bun":"latest","typescript":"^5.2.2"},"_npmOperationalInternal":{"tmp":"tmp/flags_2.0.3_1717683483604_0.11369887444193827","host":"s3://npm-registry-packages"}},"2.1.0":{"name":"@jondotsoy/flags","version":"2.1.0","keywords":[],"author":{"url":"https://jon.soy","name":"Jonathan Delgado","email":"hi@jon.soy"},"license":"MIT","_id":"@jondotsoy/flags@2.1.0","maintainers":[{"name":"jondotsoy","email":"hi@jon.soy"}],"dist":{"shasum":"c3205fa472aac9816b9bb794ebce8ac5fb28b47e","tarball":"https://registry.npmjs.org/@jondotsoy/flags/-/flags-2.1.0.tgz","fileCount":8,"integrity":"sha512-YxBv3d/Dey/c/vJLwV8nZNz6w0vkmEUupxs30Xy/nbEWIZMnHIT4lGkFSFwzHqbWn+rlUj65FI1n59cQd8PekA==","signatures":[{"sig":"MEUCIAc2lFOOwh1AFIv43vl4WGlIF4Pb8wha0CK+sOQ3DSW+AiEAh1sQw2rb79e99XiCMFN9Kc0oUDhBeigeTDqkZf12v7Y=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":34316},"main":"./lib/cjs/flags.js","types":"./lib/types/flags.d.ts","module":"./lib/esm/flags.js","gitHead":"b406c50d442c1d4fd4d5ccbac158381540ff40b0","scripts":{"fmt":"prettier -w .","test":"bun test","build":"make","prepack":"make"},"_npmUser":{"name":"jondotsoy","email":"hi@jon.soy"},"_npmVersion":"10.2.3","description":"A Javascript arguments processor","directories":{},"_nodeVersion":"20.10.0","dependencies":{"@jondotsoy/style-text":"^0.9.1","@jondotsoy/console-draw":"^0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"^3.3.1","@types/bun":"latest","typescript":"^5.2.2"},"_npmOperationalInternal":{"tmp":"tmp/flags_2.1.0_1724640244725_0.3915124347874053","host":"s3://npm-registry-packages"}},"2.2.0":{"name":"@jondotsoy/flags","version":"2.2.0","keywords":[],"author":{"url":"https://jon.soy","name":"Jonathan Delgado","email":"hi@jon.soy"},"license":"MIT","_id":"@jondotsoy/flags@2.2.0","maintainers":[{"name":"jondotsoy","email":"hi@jon.soy"}],"dist":{"shasum":"7018d720e39519a1ef735d160b03a04a74955d12","tarball":"https://registry.npmjs.org/@jondotsoy/flags/-/flags-2.2.0.tgz","fileCount":8,"integrity":"sha512-ZzO3EFnVy8EdqPmPSEYTwf4tVIaz0KS+NdsHtXYQ6c6Fz3XLofn6Xrn3+ywZ2dek5BGY83fFN5Ca9j+XU0fh7Q==","signatures":[{"sig":"MEUCIQDSUa/w8hMr7zhr7R91nxEMdSynhNOJNYA7trWTrhAYxwIgfJWTJniz7mUJt6rdG8i1MDiPGcKI059yRHexYRhgBsc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":36121},"main":"./lib/cjs/flags.js","types":"./lib/types/flags.d.ts","module":"./lib/esm/flags.js","gitHead":"1e0851b07ab1feecb1810502ea10b4c931e5215a","scripts":{"fmt":"prettier -w .","test":"bun test","build":"make","prepack":"make"},"_npmUser":{"name":"jondotsoy","email":"hi@jon.soy"},"_npmVersion":"10.9.0","description":"A Javascript arguments processor","directories":{},"_nodeVersion":"22.10.0","dependencies":{"@jondotsoy/console-draw":"^0.1.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"^3.3.3","@types/bun":"latest","typescript":"^5.6.3"},"_npmOperationalInternal":{"tmp":"tmp/flags_2.2.0_1730068134473_0.397964214956104","host":"s3://npm-registry-packages"}},"2.3.0":{"name":"@jondotsoy/flags","version":"2.3.0","keywords":["arguments","args","cli","command","command-line-processor","command-line-parser"],"author":{"url":"https://jon.soy","name":"Jonathan Delgado","email":"hi@jon.soy"},"license":"MIT","_id":"@jondotsoy/flags@2.3.0","maintainers":[{"name":"jondotsoy","email":"hi@jon.soy"}],"dist":{"shasum":"a18745940ed8fdefe24a4cad57ea544e492ed12d","tarball":"https://registry.npmjs.org/@jondotsoy/flags/-/flags-2.3.0.tgz","fileCount":8,"integrity":"sha512-vUMe4NdXKv8RxMXrKCJLsHBt3XQ8/YV4Fyr1I43vSLe5v0M8sdY3wJl1qdTgwRBZES2zMLoenxOUSNGE9r/5NA==","signatures":[{"sig":"MEUCIBNVE6FWjaZClsFVooaaBu73GyMtWYUEu/tLtaKvUssBAiEA1VzaFj41/LyPsPES4OQXBHae0TqHmQ+hk3IO20grMfg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":39020},"main":"./lib/cjs/flags.js","types":"./lib/types/flags.d.ts","module":"./lib/esm/flags.js","gitHead":"649883dad5f40d8701ed6439a6e1710bcbbf8d78","scripts":{"fmt":"prettier -w .","test":"bun test","build":"make","prepack":"make"},"_npmUser":{"name":"jondotsoy","email":"hi@jon.soy"},"_npmVersion":"10.9.0","description":"A Javascript arguments processor","directories":{},"_nodeVersion":"22.12.0","dependencies":{"@jondotsoy/console-draw":"^0.1.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"^3.3.3","@types/bun":"latest","typescript":"^5.6.3"},"_npmOperationalInternal":{"tmp":"tmp/flags_2.3.0_1736109940697_0.30642669099918396","host":"s3://npm-registry-packages-npm-production"}},"2.4.0":{"name":"@jondotsoy/flags","version":"2.4.0","keywords":["arguments","args","cli","command","command-line-processor","command-line-parser"],"author":{"url":"https://jon.soy","name":"Jonathan Delgado","email":"hi@jon.soy"},"license":"MIT","_id":"@jondotsoy/flags@2.4.0","maintainers":[{"name":"jondotsoy","email":"hi@jon.soy"}],"dist":{"shasum":"5ef8daac85108e62a7051db776e3e6d85600f8cc","tarball":"https://registry.npmjs.org/@jondotsoy/flags/-/flags-2.4.0.tgz","fileCount":14,"integrity":"sha512-4VBTO5xQF1FbF5s4u8C3jmE1HmU9U7jivJOVKkw4xYl33hDPF4KDtgLWj8g+PTgPBzwUQE/0EWFJ0XB7+zb7SA==","signatures":[{"sig":"MEUCIDhP7F49UCO/033g/U77lNYBSepaXz52A6luC0B7lO0GAiEA3jSLjQo4P3EKKfEyhr/ZrI5enyxZ4D+bK/KOVpXfLaw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45582},"main":"./lib/cjs/flags.js","types":"./lib/types/flags.d.ts","module":"./lib/esm/flags.js","gitHead":"8ae2c57f9f2beca8b354ad26a6a535cd4670ad7f","scripts":{"fmt":"prettier -w .","test":"bun test","build":"make","prepack":"make"},"_npmUser":{"name":"jondotsoy","email":"hi@jon.soy"},"_npmVersion":"10.9.2","description":"A Javascript arguments processor","directories":{},"_nodeVersion":"22.15.0","dependencies":{"@jondotsoy/console-draw":"^0.1.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"^3.3.3","@types/bun":"latest","typescript":"^5.6.3"},"_npmOperationalInternal":{"tmp":"tmp/flags_2.4.0_1748278744174_0.1797488939811296","host":"s3://npm-registry-packages-npm-production"}},"2.5.0":{"name":"@jondotsoy/flags","version":"2.5.0","keywords":["arguments","args","cli","command","command-line-processor","command-line-parser"],"author":{"url":"https://jon.soy","name":"Jonathan Delgado","email":"hi@jon.soy"},"license":"MIT","_id":"@jondotsoy/flags@2.5.0","maintainers":[{"name":"jondotsoy","email":"hi@jon.soy"}],"dist":{"shasum":"6c0c33f1839b9cecb5826b5ac79750f4370b3551","tarball":"https://registry.npmjs.org/@jondotsoy/flags/-/flags-2.5.0.tgz","fileCount":14,"integrity":"sha512-w+IACgaVDFwXomdy41SDxHqX3ctA4TfvQZ46A+ItviA3lypGkDpIT63L9OQr7d7oYmc0EEYlnUlUIskhC4LK2w==","signatures":[{"sig":"MEUCIQCo6Zv8JIo16634E4+NckJx9CO9quNrOky8DPjYe1QTkwIgGgRCsgVkHJX0i5I/B0/N/3cz/1J06Q8R89Z3e2YeOTs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":55076},"main":"./lib/cjs/flags.js","types":"./lib/types/flags.d.ts","module":"./lib/esm/flags.js","gitHead":"11c96c162102010bfd742a461f573c97e2fce151","scripts":{"fmt":"prettier -w .","test":"bun test","build":"make","prepack":"make"},"_npmUser":{"name":"jondotsoy","email":"hi@jon.soy"},"_npmVersion":"10.9.2","description":"A Javascript arguments processor","directories":{},"_nodeVersion":"22.16.0","dependencies":{"@jondotsoy/console-draw":"^0.1.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"^3.3.3","@types/bun":"latest","typescript":"^5.6.3"},"_npmOperationalInternal":{"tmp":"tmp/flags_2.5.0_1749584688318_0.18298205353527153","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"@jondotsoy/flags","version":"3.0.0","keywords":["arguments","args","cli","command","command-line-processor","command-line-parser"],"author":{"url":"https://jon.soy","name":"Jonathan Delgado","email":"hi@jon.soy"},"license":"MIT","_id":"@jondotsoy/flags@3.0.0","maintainers":[{"name":"jondotsoy","email":"hi@jon.soy"}],"dist":{"shasum":"bef65a10f4c52d69453e2baa8ee37e1e97becf9f","tarball":"https://registry.npmjs.org/@jondotsoy/flags/-/flags-3.0.0.tgz","fileCount":11,"integrity":"sha512-ippFx4Xdu+et1BDp1p01UdYAg7I7DaIJfIexzBzZQFKYKEQ3XNiTOfLazBnf5CZ4ngy96zF7aFoVikXBimwl8Q==","signatures":[{"sig":"MEYCIQDZPO71qqlejz3cloG2U6qOg73GRZk4mOhtl2lONxTOyAIhAI54u9Y+4zmmojd/PG6CYuKchTicGcN9d4dnusZICdJN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":568125},"main":"./lib/cjs/flags.js","types":"./lib/types/flags.d.ts","module":"./lib/esm/flags.js","gitHead":"868da97c536d92686bbec0a3ca05985e23c3c8aa","scripts":{"fmt":"prettier -w .","test":"bun test","build":"make","prepack":"make"},"_npmUser":{"name":"jondotsoy","email":"hi@jon.soy"},"_npmVersion":"10.9.3","description":"A Javascript arguments processor","directories":{},"_nodeVersion":"22.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"3.6.2","@types/bun":"latest","typescript":"5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/flags_3.0.0_1761591565130_0.03796964270226644","host":"s3://npm-registry-packages-npm-production"}},"3.0.1":{"name":"@jondotsoy/flags","version":"3.0.1","keywords":["arguments","args","cli","command","command-line-processor","command-line-parser"],"author":{"url":"https://jon.soy","name":"Jonathan Delgado","email":"hi@jon.soy"},"license":"MIT","_id":"@jondotsoy/flags@3.0.1","maintainers":[{"name":"jondotsoy","email":"hi@jon.soy"}],"homepage":"https://github.com/JonDotsoy/flags#readme","bugs":{"url":"https://github.com/JonDotsoy/flags/issues"},"dist":{"shasum":"64a3d51d454c2299b88bf6a6fd4c35fed6d258f2","tarball":"https://registry.npmjs.org/@jondotsoy/flags/-/flags-3.0.1.tgz","fileCount":11,"integrity":"sha512-ackOr5/aygsfCuEtP4PFvoOEzIVDncd62Cn1xmJoT+/1NWFK+yLtm8s07MKHpmtVzG2OogpKtY23XT8JjJbL5w==","signatures":[{"sig":"MEUCIQDmvd3TeKTxH09WKcqiCRSURBlSLDaQCQK1eGsFfzj2SAIgAy2O06MtS5vuVLcVINvJQkEQP/TOACNHSSXRRqHmPWs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@jondotsoy%2fflags@3.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":568223},"main":"./lib/cjs/flags.js","types":"./lib/types/flags.d.ts","module":"./lib/esm/flags.js","gitHead":"b39e0a0d14142746d72d4506fc13399ee1152f16","scripts":{"fmt":"prettier -w .","test":"bun test","build":"make","prepack":"make"},"_npmUser":{"name":"jondotsoy","email":"hi@jon.soy"},"repository":{"url":"git+https://github.com/JonDotsoy/flags.git","type":"git"},"_npmVersion":"10.9.3","description":"A Javascript arguments processor","directories":{},"_nodeVersion":"22.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"3.6.2","@types/bun":"latest","typescript":"5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/flags_3.0.1_1761591842597_0.8591217067070329","host":"s3://npm-registry-packages-npm-production"}},"3.0.2":{"name":"@jondotsoy/flags","version":"3.0.2","keywords":["arguments","args","cli","command","command-line-processor","command-line-parser"],"author":{"url":"https://jon.soy","name":"Jonathan Delgado","email":"hi@jon.soy"},"license":"MIT","_id":"@jondotsoy/flags@3.0.2","maintainers":[{"name":"jondotsoy","email":"hi@jon.soy"}],"homepage":"https://github.com/JonDotsoy/flags#readme","bugs":{"url":"https://github.com/JonDotsoy/flags/issues"},"dist":{"shasum":"0799671d75ddfea420ba6852628688e9c964eadc","tarball":"https://registry.npmjs.org/@jondotsoy/flags/-/flags-3.0.2.tgz","fileCount":11,"integrity":"sha512-kGsJm3vdix/rjp/WV9PhbWa/EYHiR0yOu+TcVuq1W1z/5otCPHWIAuY7bBIckQ734peL1fT8uL6EDiZYSyIZCQ==","signatures":[{"sig":"MEYCIQCq885p95Z1xCDN914dlW0qZGF7l5cpyBAmO995RzvdkgIhAOC8/u5wm/4IgFu1n+l5Ra/ocKymP0Avyk6jEwRBuzzs","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@jondotsoy%2fflags@3.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":568231},"main":"./lib/cjs/flags.js","types":"./lib/types/flags.d.ts","module":"./lib/esm/flags.js","gitHead":"6609e2c1868663f9f78c38daeb7cdfe48a5ab543","scripts":{"fmt":"prettier -w .","test":"bun test","build":"make","prepack":"make"},"_npmUser":{"name":"jondotsoy","email":"hi@jon.soy"},"repository":{"url":"git+https://github.com/JonDotsoy/flags.git","type":"git"},"_npmVersion":"10.9.3","description":"A Javascript arguments processor","directories":{},"_nodeVersion":"22.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"3.6.2","@types/bun":"latest","typescript":"5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/flags_3.0.2_1761661577517_0.059641609603662715","host":"s3://npm-registry-packages-npm-production"}},"3.0.3":{"name":"@jondotsoy/flags","version":"3.0.3","keywords":["arguments","args","cli","command","command-line-processor","command-line-parser"],"author":{"url":"https://jon.soy","name":"Jonathan Delgado","email":"hi@jon.soy"},"license":"MIT","_id":"@jondotsoy/flags@3.0.3","maintainers":[{"name":"jondotsoy","email":"hi@jon.soy"}],"homepage":"https://github.com/JonDotsoy/flags#readme","bugs":{"url":"https://github.com/JonDotsoy/flags/issues"},"dist":{"shasum":"8e960044ba33cd60113254c4c5a09a7f90ce6516","tarball":"https://registry.npmjs.org/@jondotsoy/flags/-/flags-3.0.3.tgz","fileCount":11,"integrity":"sha512-0UP4iCOUYixYFmxgh3wK4U/htfDhALyb1fas5DPl403n1ntReeETtWyG3ZJXCy4xELpviTq0asQVzRlOrHFYnQ==","signatures":[{"sig":"MEYCIQDhjA7Ng2Lq4E9aQDYrg/Lerjoz+J4+ucrQAMP6PqIOewIhAMqS4dhWGPTrnTmWx04Gc6UHQQLWWAOdiAN927nPcR3U","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@jondotsoy%2fflags@3.0.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":569736},"main":"./lib/cjs/flags.js","types":"./lib/types/flags.d.ts","module":"./lib/esm/flags.js","gitHead":"47347faeb5887958f85ef2c80827321a27f0e9cb","scripts":{"fmt":"prettier -w .","test":"bun test","build":"make","prepack":"make"},"_npmUser":{"name":"jondotsoy","email":"hi@jon.soy"},"repository":{"url":"git+https://github.com/JonDotsoy/flags.git","type":"git"},"_npmVersion":"10.9.3","description":"A Javascript arguments processor","directories":{},"_nodeVersion":"22.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"3.6.2","@types/bun":"latest","typescript":"5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/flags_3.0.3_1761672899792_0.6229952442747091","host":"s3://npm-registry-packages-npm-production"}},"3.1.1":{"name":"@jondotsoy/flags","version":"3.1.1","keywords":["arguments","args","cli","command","command-line-processor","command-line-parser"],"author":{"url":"https://jon.soy","name":"Jonathan Delgado","email":"hi@jon.soy"},"license":"MIT","_id":"@jondotsoy/flags@3.1.1","maintainers":[{"name":"jondotsoy","email":"hi@jon.soy"}],"homepage":"https://github.com/JonDotsoy/flags#readme","bugs":{"url":"https://github.com/JonDotsoy/flags/issues"},"dist":{"shasum":"c580352bc83dc3a8077383eef0c5a5e8f84f3005","tarball":"https://registry.npmjs.org/@jondotsoy/flags/-/flags-3.1.1.tgz","fileCount":224,"integrity":"sha512-a69TCjFkbZjrmJLwMaIqFxVb42XH6kIfvDNuT6lnCPDktOh20iC2gsl5yxcVMA2z205+79roUWSA8ZsDgLHb2A==","signatures":[{"sig":"MEUCIQDAOvV5Uxlgc+34N17VJJighqWkbpCuAGfG2hnTbhC0BAIgErSlFXEti75Rr9lVkq7XkaWSuS83rop38P3U1OmLhaw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@jondotsoy%2fflags@3.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1388894},"main":"./lib/cjs/flags.js","types":"./lib/types/flags.d.ts","module":"./lib/esm/flags.js","gitHead":"8a8b77ba1311a3f9b7e3c519e7d1512eab2bd9b1","scripts":{"fmt":"prettier -w .","test":"bun test","build":"make","prepack":"make"},"_npmUser":{"name":"jondotsoy","email":"hi@jon.soy"},"repository":{"url":"git+https://github.com/JonDotsoy/flags.git","type":"git"},"_npmVersion":"10.9.4","description":"A Javascript arguments processor","directories":{},"_nodeVersion":"22.21.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"3.6.2","@types/bun":"latest","typescript":"5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/flags_3.1.1_1762303445776_0.4170026345904978","host":"s3://npm-registry-packages-npm-production"}},"3.1.2":{"name":"@jondotsoy/flags","version":"3.1.2","keywords":["arguments","args","cli","command","command-line-processor","command-line-parser"],"author":{"url":"https://jon.soy","name":"Jonathan Delgado","email":"hi@jon.soy"},"license":"MIT","_id":"@jondotsoy/flags@3.1.2","maintainers":[{"name":"jondotsoy","email":"hi@jon.soy"}],"homepage":"https://github.com/JonDotsoy/flags#readme","bugs":{"url":"https://github.com/JonDotsoy/flags/issues"},"dist":{"shasum":"ad5224b89badd48bb1f7495e05cbdd4e3fbe5456","tarball":"https://registry.npmjs.org/@jondotsoy/flags/-/flags-3.1.2.tgz","fileCount":176,"integrity":"sha512-iDNzKWDfakep52aqpTF/U7v06CFILm90BvVU8DoDOyUjFnOMQserZlY5X3hFrAUZFDNatg+A9ztjBzNEmV1eQw==","signatures":[{"sig":"MEUCIDT6OU5A3aoXh5uH3vJKkdEdKQ0XklzuLZbRkj9vFhd9AiEA48YfofvtlU3s8Kwx37/+YO/n3Y2fvzbxaSb02REYs8U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@jondotsoy%2fflags@3.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":316855},"main":"./lib/cjs/flags.js","types":"./lib/types/flags.d.ts","module":"./lib/esm/flags.js","gitHead":"c32e9bd454afdae5aee11e4bc8a1908e7d38b7d7","scripts":{"fmt":"prettier -w .","test":"bun test","build":"make","prepack":"make"},"_npmUser":{"name":"jondotsoy","email":"hi@jon.soy"},"repository":{"url":"git+https://github.com/JonDotsoy/flags.git","type":"git"},"_npmVersion":"10.9.4","description":"A Javascript arguments processor","directories":{},"_nodeVersion":"22.21.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"3.6.2","@types/bun":"latest","typescript":"5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/flags_3.1.2_1762306423246_0.32766036494134654","host":"s3://npm-registry-packages-npm-production"}},"3.1.3":{"name":"@jondotsoy/flags","version":"3.1.3","keywords":["arguments","args","cli","command","command-line-processor","command-line-parser"],"author":{"url":"https://jon.soy","name":"Jonathan Delgado","email":"hi@jon.soy"},"license":"MIT","_id":"@jondotsoy/flags@3.1.3","maintainers":[{"name":"jondotsoy","email":"hi@jon.soy"}],"homepage":"https://github.com/JonDotsoy/flags#readme","bugs":{"url":"https://github.com/JonDotsoy/flags/issues"},"dist":{"shasum":"7460f1d776fc2ec02ec1cc41b26eabc88bc27793","tarball":"https://registry.npmjs.org/@jondotsoy/flags/-/flags-3.1.3.tgz","fileCount":176,"integrity":"sha512-0tBi1Aj8horP2DWj3yWTQQPs+sdt+XzJ04aq7ZPWyY0F/Ofl3kYe18LFSQeRFf57tMmxjtOBPv3MTBRyVqryXQ==","signatures":[{"sig":"MEYCIQCBn6/V8QecjBCL5BYHlQi9QBMg8GunimOdbNJqp70iKQIhAO/u3F67YjjwZUa/s10ZUX9IEssBctGA0Ab654cDfA92","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@jondotsoy%2fflags@3.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":318256},"main":"./lib/cjs/flags.js","types":"./lib/types/flags.d.ts","module":"./lib/esm/flags.js","gitHead":"5827551bec310e35fe772a308661da2d18614838","scripts":{"fmt":"prettier -w .","test":"bun test","build":"make","prepack":"make"},"_npmUser":{"name":"jondotsoy","email":"hi@jon.soy"},"repository":{"url":"git+https://github.com/JonDotsoy/flags.git","type":"git"},"_npmVersion":"10.9.4","description":"A Javascript arguments processor","directories":{},"_nodeVersion":"22.21.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"3.6.2","@types/bun":"latest","typescript":"5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/flags_3.1.3_1762358208353_0.9887938004207009","host":"s3://npm-registry-packages-npm-production"}},"3.2.0":{"name":"@jondotsoy/flags","version":"3.2.0","keywords":["arguments","args","cli","command","command-line-processor","command-line-parser"],"author":{"url":"https://jon.soy","name":"Jonathan Delgado","email":"hi@jon.soy"},"license":"MIT","_id":"@jondotsoy/flags@3.2.0","maintainers":[{"name":"jondotsoy","email":"hi@jon.soy"}],"homepage":"https://github.com/JonDotsoy/flags#readme","bugs":{"url":"https://github.com/JonDotsoy/flags/issues"},"dist":{"shasum":"707dfc0455e09f7b673bedfe8f5c0228f5662a1c","tarball":"https://registry.npmjs.org/@jondotsoy/flags/-/flags-3.2.0.tgz","fileCount":176,"integrity":"sha512-mJivBhJovTbGiqSyQM9IkmYh2MpWZPQKZ+IeKYEfAMFQ5eVDL7L4tfqTk4q7WoP5eSYv5HHm8FcNXBVqkLx8yQ==","signatures":[{"sig":"MEYCIQC0UTmR4pfgtnbn0jDcGYJFPU/7bV1GWsNKYYBxp1C1LgIhAO1bwDU/MpEaSrEndB4gbQoL00VN4DH9jXkn4jqrbL7H","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@jondotsoy%2fflags@3.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":321721},"main":"./lib/cjs/flags.js","types":"./lib/types/flags.d.ts","module":"./lib/esm/flags.js","gitHead":"1b880eaf9f921218178a652841a64e443bc6c268","scripts":{"fmt":"prettier -w .","test":"bun test","build":"make","prepack":"make"},"_npmUser":{"name":"jondotsoy","email":"hi@jon.soy"},"repository":{"url":"git+https://github.com/JonDotsoy/flags.git","type":"git"},"_npmVersion":"10.9.4","description":"A Javascript arguments processor","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"3.6.2","@types/bun":"latest","typescript":"5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/flags_3.2.0_1772417280858_0.859881728732955","host":"s3://npm-registry-packages-npm-production"}},"3.2.1":{"name":"@jondotsoy/flags","version":"3.2.1","author":{"name":"Jonathan Delgado","email":"hi@jon.soy","url":"https://jon.soy"},"main":"./lib/cjs/flags.js","module":"./lib/esm/flags.js","devDependencies":{"@types/bun":"latest","prettier":"3.6.2","typescript":"5.9.3"},"description":"A Javascript arguments processor","keywords":["arguments","args","cli","command","command-line-processor","command-line-parser"],"license":"MIT","publishConfig":{"access":"public"},"scripts":{"prepack":"make","test":"bun test","build":"make","fmt":"prettier -w ."},"types":"./lib/types/flags.d.ts","repository":{"type":"git","url":"git+https://github.com/JonDotsoy/flags.git"},"_id":"@jondotsoy/flags@3.2.1","gitHead":"3ed53e808c7222d24e2e4cb340ba1477b1e134c8","bugs":{"url":"https://github.com/JonDotsoy/flags/issues"},"homepage":"https://github.com/JonDotsoy/flags#readme","_nodeVersion":"22.22.0","_npmVersion":"10.9.4","dist":{"integrity":"sha512-WQ2cEV3Z3vlIYUXAkBLfrUww3zQ+6GlbQjBSVV1p/z2Gpi2eoPiqvN83KB4o25gmUq8c4Nn3590zSULl/dEISA==","shasum":"840d7f740c9f1c52ea7fc17ce400393eae287086","tarball":"https://registry.npmjs.org/@jondotsoy/flags/-/flags-3.2.1.tgz","fileCount":176,"unpackedSize":321949,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@jondotsoy%2fflags@3.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFdhh+R0n9oZVumqRtYtq/WDv1tQkfubc7/VydFq3EOSAiAOH17pCfTn+TAUkt8eSevJpemSHDixRxPXfqYXTHv2Rg=="}]},"_npmUser":{"name":"jondotsoy","email":"hi@jon.soy"},"directories":{},"maintainers":[{"name":"jondotsoy","email":"hi@jon.soy"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/flags_3.2.1_1772418144262_0.07465509370467971"},"_hasShrinkwrap":false}},"time":{"created":"2023-08-27T20:09:41.871Z","modified":"2026-03-02T02:22:24.681Z","1.0.4":"2023-08-27T20:09:42.164Z","1.0.5":"2023-08-27T20:18:40.450Z","1.1.0":"2023-08-29T18:49:34.082Z","1.1.1":"2023-08-31T18:56:15.725Z","2.0.0":"2023-09-04T13:08:03.834Z","2.0.1":"2023-09-04T19:22:29.128Z","2.0.2":"2023-09-04T19:42:42.773Z","2.0.3":"2024-06-06T14:18:03.840Z","2.1.0":"2024-08-26T02:44:04.882Z","2.2.0":"2024-10-27T22:28:54.680Z","2.3.0":"2025-01-05T20:45:40.897Z","2.4.0":"2025-05-26T16:59:04.392Z","2.5.0":"2025-06-10T19:44:48.625Z","3.0.0":"2025-10-27T18:59:25.324Z","3.0.1":"2025-10-27T19:04:02.808Z","3.0.2":"2025-10-28T14:26:18.194Z","3.0.3":"2025-10-28T17:35:00.005Z","3.1.1":"2025-11-05T00:44:06.059Z","3.1.2":"2025-11-05T01:33:43.456Z","3.1.3":"2025-11-05T15:56:48.557Z","3.2.0":"2026-03-02T02:08:01.020Z","3.2.1":"2026-03-02T02:22:24.415Z"},"bugs":{"url":"https://github.com/JonDotsoy/flags/issues"},"author":{"name":"Jonathan Delgado","email":"hi@jon.soy","url":"https://jon.soy"},"license":"MIT","homepage":"https://github.com/JonDotsoy/flags#readme","keywords":["arguments","args","cli","command","command-line-processor","command-line-parser"],"repository":{"type":"git","url":"git+https://github.com/JonDotsoy/flags.git"},"description":"A Javascript arguments processor","maintainers":[{"name":"jondotsoy","email":"hi@jon.soy"}],"readme":"# <span style=\"color: gray\">></span> flags{args}\n\nA powerful and type-safe JavaScript/TypeScript command-line arguments parser with a fluent builder API.\n\n[Code Wiki](https://codewiki.google/github.com/JonDotsoy/flags)\n\n## Features\n\n- 🔥 **Type-safe**: Full TypeScript support with type inference\n- 🎯 **Fluent API**: Chainable builder pattern for intuitive flag definitions\n- 📋 **Multiple formats**: Support for `--flag=value`, `--flag value`, and `-f` syntax\n- 🔗 **Combined flags**: Automatic expansion of combined short flags like `-abc` → `-a -b -c`\n- 🔧 **Built-in types**: Boolean, string, strings array, number, and key-value handlers\n- 📚 **Commands**: Support for subcommands and rest arguments\n- 📍 **Positional arguments**: Ordered argument parsing\n- 🆘 **Help generation**: Automatic help message generation\n- ⚡ **Lightweight**: Zero dependencies, minimal overhead\n\n## Installation\n\n```bash\nnpm install @jondotsoy/flags\n# or\nyarn add @jondotsoy/flags\n# or\nbun add @jondotsoy/flags\n```\n\n## AI Assistant Skill\n\nA skill is available for AI coding assistants to better understand this library. Install it with:\n\n```bash\nnpx skills add jondotsoy/flags\n```\n\nSee [SKILL.md](./skills/flags-builder/SKILL.md) for details.\n\n## Quick Start\n\n```ts\nimport { flags, flag, command, argument } from \"@jondotsoy/flags\";\n\n// Define your schema with fluent builder API\nconst parser = flags({\n  verbose: flag(\"--verbose\", \"-v\").boolean().describe(\"Enable verbose output\"),\n  name: flag(\"--name\", \"-n\").string().describe(\"Set application name\"),\n  port: flag(\"--port\", \"-p\").number().default(3000).describe(\"Server port\"),\n  help: flag(\"--help\", \"-h\").boolean().describe(\"Show help message\"),\n  serve: command(\"serve\").restArgs().describe(\"Start the server\"),\n  input: argument().string().required().describe(\"Input file\"),\n})\n  .program(\"mycli\")\n  .describe(\"My awesome CLI tool\");\n\n// Parse command line arguments\nconst args = [\"input.txt\", \"--name=myapp\", \"-v\", \"--port\", \"8080\"];\n\ntry {\n  const options = parser.parse(args);\n\n  // Handle help flag\n  if (options.help) {\n    console.log(parser.helpMessage());\n    process.exit(0);\n  }\n\n  console.log(\"Parsed options:\", options);\n  // Output: { input: \"input.txt\", name: \"myapp\", verbose: true, port: 8080, help: false, serve: null }\n} catch (error) {\n  console.error(`Error: ${error.message}`);\n  console.log(parser.helpMessage());\n  process.exit(1);\n}\n```\n\n## Core Concepts\n\nThe library uses a fluent builder API with three main building blocks:\n\n- **Flags**: Named options like `--verbose` or `-v`\n- **Commands**: Subcommands like `build` or `serve`\n- **Arguments**: Positional arguments like file paths\n\n## API Reference\n\n### `flags(schema)`\n\nCreates a parser with the given schema. Returns a `FlagsParser` instance.\n\n```ts\nconst parser = flags({\n  verbose: flag(\"--verbose\", \"-v\").boolean(),\n  port: flag(\"--port\").number().default(3000),\n});\n```\n\n### Parser Methods\n\n#### `.program(name: string)`\n\nSets the program name for help messages.\n\n```ts\nparser.program(\"mycli\");\n```\n\n#### `.describe(description: string)`\n\nSets the program description for help messages.\n\n```ts\nparser.describe(\"A powerful CLI tool\");\n```\n\n#### `.combineShortFlags()`\n\nEnables automatic expansion of combined short boolean flags (e.g., `-abc` → `-a -b -c`).\n\n```ts\nconst parser = flags({\n  all: flag(\"-a\").boolean(),\n  long: flag(\"-l\").boolean(),\n  human: flag(\"-h\").boolean(),\n}).combineShortFlags();\n\nparser.parse([\"-alh\"]); // { all: true, long: true, human: true }\n```\n\n#### `.parse(args: string[])`\n\nParses the arguments and returns the result object.\n\n```ts\nconst options = parser.parse(process.argv.slice(2));\n```\n\n**Throws:**\n\n- `UnexpectedArgumentError` - When an unknown argument is encountered\n- `RequiredFlagMissingError` - When a required flag is missing\n- `RequiredArgumentMissingError` - When a required argument is missing\n\n#### `.safeParse(args: string[])`\n\nLike `.parse()`, but never throws. Returns a labeled tuple `[ok, error, output]`.\n\n```ts\nconst [ok, error, output] = parser.safeParse(process.argv.slice(2));\n\nif (ok) {\n  console.log(output); // typed result, same as .parse()\n} else {\n  console.error(error); // UnexpectedArgumentError, RequiredFlagMissingError, etc.\n  console.log(parser.helpMessage());\n  process.exit(1);\n}\n```\n\n| Element  | Type                       | Description                                    |\n| -------- | -------------------------- | ---------------------------------------------- |\n| `ok`     | `boolean`                  | `true` if parsing succeeded, `false` otherwise |\n| `error`  | `unknown \\| undefined`     | The thrown error when `ok` is `false`          |\n| `output` | `ParseResult \\| undefined` | The parsed result when `ok` is `true`          |\n\n#### `.helpMessage()`\n\nGenerates and returns a formatted help message.\n\n```ts\nconsole.log(parser.helpMessage());\n```\n\n## Builder Functions\n\n### `flag(...names: string[])`\n\nCreates a flag builder for named options. Supports multiple aliases.\n\n```ts\n// Single name\nflag(\"--port\"); // Matches --port only\n\n// Multiple names (aliases)\nflag(\"--verbose\", \"-v\"); // Matches --verbose or -v\nflag(\"-t\", \"--tty\"); // Matches -t or --tty\n\n// Multiple long and short names\nflag(\"--help\", \"-h\", \"-?\"); // Matches --help, -h, or -?\n```\n\n**Examples:**\n\n```ts\nconst parser = flags({\n  // Long form only\n  version: flag(\"--version\").boolean(),\n\n  // Short and long form\n  verbose: flag(\"-v\", \"--verbose\").boolean(),\n\n  // Multiple aliases\n  help: flag(\"-h\", \"--help\", \"-?\").boolean(),\n\n  // Docker-style: short first, then long\n  tty: flag(\"-t\", \"--tty\").boolean(),\n  interactive: flag(\"-i\", \"--interactive\").boolean(),\n});\n\n// All of these work:\nparser.parse([\"--verbose\"]); // { verbose: true, ... }\nparser.parse([\"-v\"]); // { verbose: true, ... }\nparser.parse([\"-ti\"]); // { tty: true, interactive: true, ... } (combined!)\nparser.parse([\"--tty\", \"--interactive\"]); // { tty: true, interactive: true, ... }\n```\n\n#### Flag Type Methods\n\n**`.boolean()`** - Boolean flag (presence = true)\n\n```ts\nflag(\"--verbose\").boolean();\n// --verbose → true\n\n// Single-letter boolean flags support combined syntax\nflag(\"-t\").boolean();\nflag(\"-i\").boolean();\n// -ti → { t: true, i: true } (automatically expanded)\n```\n\n**`.string()`** - String value flag\n\n```ts\nflag(\"--name\").string();\n// --name John → \"John\"\n// --name=John → \"John\"\n// --name=John=Doe → \"John=Doe\" (multiple = preserved)\n// --name =John → \"=John\" (leading = preserved)\n\n// Single dash also supported\nflag(\"-name\").string();\n// -name John → \"John\"\n// -name=John → \"John\"\n```\n\n**`.strings()`** - Array of strings (accumulates multiple values)\n\n```ts\nflag(\"--include\").strings();\n// --include src --include lib → [\"src\", \"lib\"]\n// -l blue -l red → [\"blue\", \"red\"]\n\n// Supports = syntax and flag-like values\nflag(\"-l\").strings();\n// -l=-l -l=red → [\"-l\", \"red\"]\n// -l -l -l red → [\"-l\", \"red\"] (flag-like values preserved)\n```\n\n**`.number()`** - Numeric value flag\n\n```ts\nflag(\"--port\").number();\n// --port 3000 → 3000\n```\n\n**`.keyValue()`** - Key-value pairs (accumulates into object)\n\n```ts\nflag(\"--config\").keyValue();\n// --config name=value → { name: \"value\" }\n// --config name value → { name: \"value\" }\n// --config name=value --config foo=bar → { name: \"value\", foo: \"bar\" }\n\n// Multiple syntaxes supported\nflag(\"--set\").keyValue();\n// --set foo taz → { foo: \"taz\" }\n// --set foo=taz → { foo: \"taz\" }\n// --set=foo=taz → { foo: \"taz\" }\n\n// Flag-like keys are preserved\n// --set --foo taz → { \"--foo\": \"taz\" }\n// --set=--foo=taz → { \"--foo\": \"taz\" }\n```\n\n#### Flag Modifiers\n\n**`.required()`** - Makes the flag required\n\n```ts\nflag(\"--output\").string().required();\n// Throws RequiredFlagMissingError if not provided\n```\n\n**`.default(value)`** - Sets a default value\n\n```ts\nflag(\"--port\").number().default(3000);\n// Returns 3000 if --port is not provided\n\n// Without default, optional flags return null when not provided\nflag(\"--name\").string();\n// Returns null if --name is not provided\n\nflag(\"--verbose\").boolean();\n// Returns false if --verbose is not provided (boolean default)\n```\n\n**`.describe(description)`** - Adds description for help\n\n```ts\nflag(\"--verbose\").boolean().describe(\"Enable verbose output\");\n```\n\n### `command(name: string)`\n\nCreates a command builder for subcommands.\n\n```ts\ncommand(\"build\"); // Matches exactly \"build\"\n```\n\n#### Command Type Methods\n\n**`.boolean()`** - Boolean command (presence = true)\n\n```ts\ncommand(\"build\").boolean();\n// build → true\n```\n\n**`.restArgs()`** - Captures all remaining arguments\n\n```ts\ncommand(\"serve\").restArgs();\n// serve --watch --port 3000 → [\"--watch\", \"--port\", \"3000\"]\n```\n\n#### Command Modifiers\n\n**`.describe(description)`** - Adds description for help\n\n```ts\ncommand(\"build\").boolean().describe(\"Build the project\");\n```\n\n### `argument()`\n\nCreates a positional argument builder. Arguments are matched in order.\n\n```ts\nargument(); // Matches the next positional argument\n```\n\n#### Argument Type Methods\n\n**`.string()`** - String argument (default)\n\n```ts\nargument().string();\n// Returns null if not provided\n```\n\n**`.strings()`** - Array of strings (captures all remaining positional arguments)\n\n```ts\nargument().strings();\n// foo tar biz → [\"foo\", \"tar\", \"biz\"]\n\n// Works with interspersed flags\nflags({\n  verbose: flag(\"-V\", \"--verbose\").boolean(),\n  names: argument().strings(),\n});\n// foo --verbose tar biz → { verbose: true, names: [\"foo\", \"tar\", \"biz\"] }\n```\n\n**Note:** When `argument().strings()` is defined first in the schema, it takes priority and captures all arguments, including flag-like values:\n\n```ts\nflags({\n  arg: argument().strings(),\n  labels: flag(\"-l\").strings(),\n});\n// -l=-l -l=red foo → { labels: [], arg: ['-l=-l', '-l=red', \"foo\"] }\n```\n\n#### Argument Modifiers\n\n**`.required()`** - Makes the argument required\n\n```ts\nargument().string().required();\n// Throws RequiredArgumentMissingError if not provided\n```\n\n**`.describe(description)`** - Adds description for help\n\n```ts\nargument().string().required().describe(\"Input file path\");\n```\n\n**`.delimiter(separator)`** - Parse flag with custom delimiter\n\n```ts\nflag(\"pr\").string().delimiter(\":\");\n// pr:foo → \"foo\"\n// pr:bar → \"bar\"\n// Returns null if not provided\n```\n\n**`.match(regex)`** - Match argument with regex and extract named groups\n\n```ts\nargument().match(/^(?<part1>\\w+):(?<part2>\\w+)$/);\n// tar:foo → { part1: \"tar\", part2: \"foo\" }\n// Returns null if pattern doesn't match\n```\n\n**`.refine(fn)`** - Custom refinement function for advanced parsing\n\n```ts\nargument().refine((arg, index, args, context) => {\n  if (!arg.startsWith(\"tar:\")) return null;\n  return {\n    index: index + 1,\n    args: [arg],\n    value: arg.split(\":\")[1],\n  };\n});\n// tar:foo → \"foo\"\n```\n\n**`.transform(fn)`** - Transform the parsed value\n\n```ts\nargument()\n  .string()\n  .transform((value) => value.toUpperCase());\n// tar → \"TAR\"\n```\n\n## Type Inference\n\nThe library provides full type inference based on your schema:\n\n```ts\nconst parser = flags({\n  verbose: flag(\"--verbose\").boolean(),\n  name: flag(\"--name\").string(),\n  port: flag(\"--port\").number().default(3000),\n  tags: flag(\"--tag\").strings(),\n  config: flag(\"--config\").keyValue(),\n  build: command(\"build\").boolean(),\n  serve: command(\"serve\").restArgs(),\n  input: argument().string().required(),\n});\n\nconst result = parser.parse(args);\n\n// TypeScript knows the types:\n// result.verbose: boolean\n// result.name: string | null\n// result.port: number (never null due to default)\n// result.tags: string[]\n// result.config: Record<string, string>\n// result.build: boolean\n// result.serve: string[] | null\n// result.input: string (never null due to required)\n```\n\n## Help Messages\n\nThe parser automatically generates help messages based on your schema:\n\n```ts\nconst parser = flags({\n  verbose: flag(\"--verbose\", \"-v\").boolean().describe(\"Enable verbose output\"),\n  port: flag(\"--port\", \"-p\").number().default(3000).describe(\"Server port\"),\n  ip: flag(\"--ip\").string().describe(\"IPv4 address (e.g., 172.30.100.104)\"),\n  build: command(\"build\").boolean().describe(\"Build the project\"),\n})\n  .program(\"mycli\")\n  .describe(\"My awesome CLI tool\");\n\nconsole.log(parser.helpMessage());\n```\n\nOutput:\n\n```\nUsage: mycli\n\nMy awesome CLI tool\n\nOptions:\n  -v, --verbose.           Enable verbose output\n  -p, --port <number>      Server port\n      --ip                 IPv4 address (e.g., 172.30.100.104)\n\nCommands:\n  build                    Build the project\n```\n\n## Error Handling\n\nThe library provides specific error types for better error handling:\n\n### `FlagsParseError`\n\nBase error class for all parsing errors.\n\n### `UnexpectedArgumentError`\n\nThrown when an unknown argument is encountered.\n\n```ts\nimport { flags, UnexpectedArgumentError } from \"@jondotsoy/flags\";\n\ntry {\n  const options = parser.parse(process.argv.slice(2));\n} catch (error) {\n  if (error instanceof UnexpectedArgumentError) {\n    console.error(`Error: ${error.message}`);\n    console.error(`Unexpected argument: ${error.argument}`);\n    console.log(parser.helpMessage());\n    process.exit(1);\n  }\n  throw error;\n}\n```\n\n### `RequiredFlagMissingError`\n\nThrown when a required flag is not provided.\n\n```ts\nimport { RequiredFlagMissingError } from \"@jondotsoy/flags\";\n\ntry {\n  const options = parser.parse(args);\n} catch (error) {\n  if (error instanceof RequiredFlagMissingError) {\n    console.error(`Required flag missing: ${error.flagName}`);\n    process.exit(1);\n  }\n}\n```\n\n### `RequiredArgumentMissingError`\n\nThrown when a required positional argument is not provided.\n\n```ts\nimport { RequiredArgumentMissingError } from \"@jondotsoy/flags\";\n\ntry {\n  const options = parser.parse(args);\n} catch (error) {\n  if (error instanceof RequiredArgumentMissingError) {\n    console.error(\"Required argument missing\");\n    process.exit(1);\n  }\n}\n```\n\n## Combined Short Flags\n\nSingle-letter boolean flags can be combined for convenience, similar to common Unix tools. You must call `.combineShortFlags()` on the parser to enable this feature:\n\n```ts\nimport { flags, flag } from \"@jondotsoy/flags\";\n\nconst parser = flags({\n  all: flag(\"-a\", \"--all\").boolean().describe(\"Show all files\"),\n  long: flag(\"-l\", \"--long\").boolean().describe(\"Use long listing format\"),\n  human: flag(\"-h\", \"--human-readable\")\n    .boolean()\n    .describe(\"Human readable sizes\"),\n}).combineShortFlags();\n\n// All of these are equivalent:\nparser.parse([\"-a\", \"-l\", \"-h\"]); // Separate flags\nparser.parse([\"-alh\"]); // Combined flags\nparser.parse([\"-lah\"]); // Order doesn't matter\nparser.parse([\"-al\", \"-h\"]); // Partially combined\n\n// Result: { all: true, long: true, human: true }\n```\n\n### Docker-style Example\n\n```ts\nconst dockerParser = flags({\n  tty: flag(\"-t\", \"--tty\").boolean().describe(\"Allocate a pseudo-TTY\"),\n  interactive: flag(\"-i\", \"--interactive\")\n    .boolean()\n    .describe(\"Keep STDIN open\"),\n  detach: flag(\"-d\", \"--detach\").boolean().describe(\"Run in background\"),\n}).combineShortFlags();\n\n// Docker-style combined flags\ndockerParser.parse([\"-ti\"]); // { tty: true, interactive: true, detach: false }\ndockerParser.parse([\"-tid\"]); // { tty: true, interactive: true, detach: true }\n```\n\n### Rules for Combined Flags\n\n1. **Must enable feature**: Call `.combineShortFlags()` on the parser\n2. **Only single-letter flags**: `-abc` works, but `-test` does not expand\n3. **Only boolean flags**: All flags in the combination must be boolean type\n4. **No equals syntax**: `-a=value` is not expanded (treated as single flag)\n5. **All must exist**: If any letter is not a defined flag, the combination is not expanded\n\n```ts\nconst parser = flags({\n  all: flag(\"-a\").boolean(),\n  brief: flag(\"-b\").boolean(),\n  count: flag(\"-c\").number(), // Not boolean!\n}).combineShortFlags();\n\nparser.parse([\"-ab\"]); // ✅ Works: { all: true, brief: true, count: null }\nparser.parse([\"-abc\"]); // ❌ Throws: -c requires a value, cannot be combined\nparser.parse([\"-abx\"]); // ❌ Throws: Unknown flag -x\n```\n\n## Complete Examples\n\n### Basic CLI Tool\n\n```ts\nimport { flags, flag, UnexpectedArgumentError } from \"@jondotsoy/flags\";\n\nconst parser = flags({\n  verbose: flag(\"--verbose\", \"-v\").boolean().describe(\"Enable verbose logging\"),\n  output: flag(\"--output\", \"-o\")\n    .string()\n    .default(\"dist\")\n    .describe(\"Output file path\"),\n  port: flag(\"--port\", \"-p\")\n    .number()\n    .default(3000)\n    .describe(\"Server port number\"),\n  help: flag(\"--help\", \"-h\").boolean().describe(\"Show help message\"),\n})\n  .program(\"mycli\")\n  .describe(\"A simple CLI tool\");\n\ntry {\n  const options = parser.parse(process.argv.slice(2));\n\n  if (options.help) {\n    console.log(parser.helpMessage());\n    process.exit(0);\n  }\n\n  console.log(\"Starting with options:\", options);\n} catch (error) {\n  if (error instanceof UnexpectedArgumentError) {\n    console.error(`Error: ${error.message}`);\n    console.log(parser.helpMessage());\n    process.exit(1);\n  }\n  throw error;\n}\n```\n\n### Multi-Command CLI (like npm/git)\n\n```ts\nimport { flags, flag, command } from \"@jondotsoy/flags\";\n\nconst parser = flags({\n  global: flag(\"--global\", \"-g\").boolean().describe(\"Global mode\"),\n  verbose: flag(\"--verbose\", \"-v\").boolean().describe(\"Verbose output\"),\n  build: command(\"build\").restArgs().describe(\"Build the project\"),\n  test: command(\"test\").restArgs().describe(\"Run tests\"),\n  serve: command(\"serve\").restArgs().describe(\"Start dev server\"),\n})\n  .program(\"mycli\")\n  .describe(\"Multi-command CLI tool\");\n\nconst options = parser.parse(process.argv.slice(2));\n\nif (options.build) {\n  console.log(\"Building with args:\", options.build);\n  // Build logic here\n} else if (options.test) {\n  console.log(\"Testing with args:\", options.test);\n  // Test logic here\n} else if (options.serve) {\n  console.log(\"Serving with args:\", options.serve);\n  // Serve logic here\n}\n\n// Usage examples:\n// mycli build --verbose\n// mycli test src/**/*.test.ts\n// mycli serve --port 8080\n```\n\n### File Processing Tool with Multiple Inputs\n\n```ts\nimport { flags, flag, argument } from \"@jondotsoy/flags\";\n\nconst parser = flags({\n  input: flag(\"--input\", \"-i\").strings().describe(\"Input files\"),\n  output: flag(\"--output\", \"-o\").string().describe(\"Output directory\"),\n  format: flag(\"--format\", \"-f\")\n    .string()\n    .describe(\"Output format (json, yaml, xml)\"),\n  exclude: flag(\"--exclude\").strings().describe(\"Exclude patterns\"),\n  recursive: flag(\"--recursive\", \"-r\")\n    .boolean()\n    .describe(\"Process recursively\"),\n  dryRun: flag(\"--dry-run\").boolean().describe(\"Dry run mode\"),\n  file: argument().string().describe(\"Input file (positional)\"),\n})\n  .program(\"fileprocessor\")\n  .describe(\"Process files with various options\");\n\nconst options = parser.parse(process.argv.slice(2));\n\n// Usage: fileprocessor input.txt --input src/ --exclude node_modules --format json --output dist/\n```\n\n### Configuration with Key-Value Pairs\n\n```ts\nimport { flags, flag } from \"@jondotsoy/flags\";\n\nconst parser = flags({\n  env: flag(\"--env\", \"-e\")\n    .string()\n    .default(\"development\")\n    .describe(\"Environment\"),\n  debug: flag(\"--debug\", \"-d\").boolean().describe(\"Enable debug mode\"),\n  config: flag(\"--config\", \"-c\")\n    .keyValue()\n    .describe(\"Configuration key-value pairs\"),\n  feature: flag(\"--feature\").strings().describe(\"Enable features\"),\n})\n  .program(\"myapp\")\n  .describe(\"Application with configuration\");\n\nconst options = parser.parse(process.argv.slice(2));\n\nconsole.log(\"Environment:\", options.env);\nconsole.log(\"Debug:\", options.debug);\nconsole.log(\"Config:\", options.config);\nconsole.log(\"Features:\", options.feature);\n\n// Usage: myapp --env production --config db=postgres --config port=5432 --feature auth --feature payments\n// Result: {\n//   env: \"production\",\n//   debug: false,\n//   config: { db: \"postgres\", port: \"5432\" },\n//   feature: [\"auth\", \"payments\"]\n// }\n```\n\n## Best Practices\n\n### 1. Use the Fluent API\n\nChain methods for clear and concise flag definitions:\n\n```ts\nflag(\"--port\", \"-p\")\n  .number()\n  .default(3000)\n  .describe(\"Port number for the server\");\n```\n\n### 2. Provide Defaults\n\nUse `.default()` for sensible default values:\n\n```ts\nconst parser = flags({\n  port: flag(\"--port\").number().default(3000),\n  output: flag(\"--output\").string().default(\"dist\"),\n  verbose: flag(\"--verbose\").boolean(), // defaults to false\n});\n```\n\n### 3. Add Descriptions\n\nUse `.describe()` for automatic help generation:\n\n```ts\nconst parser = flags({\n  verbose: flag(\"--verbose\", \"-v\").boolean().describe(\"Enable verbose output\"),\n})\n  .program(\"mycli\")\n  .describe(\"My CLI tool description\");\n```\n\n### 4. Handle Errors Gracefully\n\nUse `.safeParse()` to avoid try-catch boilerplate:\n\n```ts\nconst [ok, error, options] = parser.safeParse(args);\n\nif (!ok) {\n  console.error(`Error: ${(error as Error).message}`);\n  console.log(parser.helpMessage());\n  process.exit(1);\n}\n\n// Use options\n```\n\nOr use `.parse()` with a try-catch block:\n\n```ts\ntry {\n  const options = parser.parse(args);\n  // Use options\n} catch (error) {\n  if (error instanceof UnexpectedArgumentError) {\n    console.error(`Error: ${error.message}`);\n    console.log(parser.helpMessage());\n    process.exit(1);\n  }\n  throw error;\n}\n```\n\n### 5. Use Required for Mandatory Options\n\nMark required flags and arguments explicitly:\n\n```ts\nconst parser = flags({\n  output: flag(\"--output\").string().required(),\n  input: argument().string().required(),\n});\n```\n\n## Migration Guide\n\n### From other CLI libraries\n\n#### From `yargs`:\n\n```ts\n// Before (yargs)\nconst argv = yargs\n  .option(\"verbose\", { type: \"boolean\", alias: \"v\" })\n  .option(\"port\", { type: \"number\", default: 3000 }).argv;\n\n// After (@jondotsoy/flags)\nconst parser = flags({\n  verbose: flag(\"--verbose\", \"-v\").boolean(),\n  port: flag(\"--port\").number().default(3000),\n});\nconst options = parser.parse(process.argv.slice(2));\n```\n\n#### From `commander`:\n\n```ts\n// Before (commander)\nprogram\n  .option(\"-v, --verbose\", \"verbose output\")\n  .option(\"-p, --port <port>\", \"port number\", \"3000\")\n  .parse();\n\n// After (@jondotsoy/flags)\nconst parser = flags({\n  verbose: flag(\"--verbose\", \"-v\").boolean().describe(\"verbose output\"),\n  port: flag(\"--port\", \"-p\").number().default(3000).describe(\"port number\"),\n});\nconst options = parser.parse(process.argv.slice(2));\n```\n\n## FAQ\n\n**Q: How do I handle subcommands like `git commit` or `npm install`?**\n\nA: Use the `command()` builder with `.restArgs()`:\n\n```ts\nconst parser = flags({\n  commit: command(\"commit\").restArgs(),\n  install: command(\"install\").restArgs(),\n});\n```\n\n**Q: Can I have flags that don't require values?**\n\nA: Yes! Use `.boolean()` for boolean flags:\n\n```ts\nflag(\"--verbose\").boolean();\nflag(\"--debug\", \"-d\").boolean();\n```\n\n**Q: How do I validate flag values?**\n\nA: Parse the result and validate after:\n\n```ts\nconst options = parser.parse(args);\nif (options.port && (options.port < 1 || options.port > 65535)) {\n  throw new Error(\"Port must be between 1 and 65535\");\n}\n```\n\n**Q: Can I have the same flag appear multiple times?**\n\nA: Yes! Use `.strings()` for string arrays:\n\n```ts\nflag(\"--include\").strings();\n// --include src --include lib → [\"src\", \"lib\"]\n```\n\n**Q: Can I combine short flags like `-abc`?**\n\nA: Yes! Call `.combineShortFlags()` on the parser to enable automatic expansion of single-letter boolean flags:\n\n```ts\nconst parser = flags({\n  all: flag(\"-a\").boolean(),\n  brief: flag(\"-b\").boolean(),\n  color: flag(\"-c\").boolean(),\n}).combineShortFlags();\n\nparser.parse([\"-abc\"]); // { all: true, brief: true, color: true }\n```\n\nNote: This only works for single-letter boolean flags. Flags with values or multi-letter flags are not expanded.\n\n**Q: How do I handle key-value pairs?**\n\nA: Use `.keyValue()`:\n\n```ts\nflag(\"--config\").keyValue();\n// --config db=postgres --config port=5432 → { db: \"postgres\", port: \"5432\" }\n```\n\n## License\n\nMIT - see [LICENSE](./LICENSE) file for details.\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n","readmeFilename":"README.md"}