{"_id":"@molt/command","_rev":"3816856","name":"@molt/command","description":"Type-safe CLI command definition and execution.","dist-tags":{"latest":"0.9.0"},"maintainers":[{"name":"jasonkuhrt","email":"jasonkuhrt@me.com"}],"time":{"modified":"2025-06-05T11:31:33.000Z","created":"2022-09-15T01:13:01.173Z","0.9.0":"2023-09-16T16:58:24.726Z","0.7.0":"2023-03-07T17:19:22.174Z","0.6.1":"2023-01-22T23:17:23.761Z","0.6.0":"2022-12-28T02:36:41.413Z","0.5.0":"2022-12-07T00:53:59.472Z","0.4.0":"2022-11-05T00:17:50.554Z","0.3.0":"2022-10-21T03:06:36.427Z","0.2.2":"2022-10-20T02:51:23.173Z","0.2.1":"2022-10-20T02:46:08.710Z","0.2.0":"2022-10-16T03:40:14.470Z","0.1.0":"2022-10-01T01:25:39.977Z","0.0.7":"2022-09-16T02:24:33.107Z","0.0.6":"2022-09-15T02:20:01.024Z","0.0.5":"2022-09-15T01:13:01.173Z"},"users":{},"author":{"name":"Jason Kuhrt"},"versions":{"0.9.0":{"name":"@molt/command","version":"0.9.0","description":"Type-safe CLI command definition and execution.","type":"module","types":"./build/esm/index.d.ts","exports":{".":{"require":{"types":"./build/cjs/index.d.cts","default":"./build/cjs/index.js"},"import":{"types":"./build/esm/index.d.ts","default":"./build/esm/index.js"}},"./types":{"import":{"types":"./build/esm/entrypoints/types.d.ts"}}},"keywords":[],"author":{"name":"Jason Kuhrt"},"license":"MIT","dependencies":{"alge":"0.8.1","chalk":"^5.3.0","lodash.camelcase":"^4.3.0","lodash.snakecase":"^4.1.1","readline-sync":"^1.4.10","string-length":"^6.0.0","strip-ansi":"^7.1.0","ts-toolbelt":"^9.6.0","type-fest":"^4.3.1","zod":"^3.22.2","@molt/types":"0.2.0"},"devDependencies":{"@types/lodash.camelcase":"4.3.7","@types/lodash.snakecase":"^4.1.7","@types/readline-sync":"^1.4.4","conditional-type-checks":"1.0.6","execa":"8.0.1","fast-glob":"3.3.1","fs-jetpack":"5.1.0","tsd":"0.29.0","vitest":"0.34.4","vitest-mock-process":"^1.0.4"},"scripts":{"vitest":"vitest","check:types":"tsc --noEmit","test":"vitest","clean":"tsc --build --clean","build":"pnpm clean && pnpm build:cjs && pnpm build:esm","build:cjs":"tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > build/cjs/package.json","build:esm":"tsc --project tsconfig.esm.json","build:toc":"markdown-toc README.md -i --maxdepth 4 && prettier --write README.md","examples:intro":"tsx examples/intro.ts","examples:kitchen-sink":"tsx examples/kitchen-sink.ts","examples:publish":"tsx examples/publish.ts"},"_id":"@molt/command@0.9.0","_integrity":"sha512-1JI8dAlpqlZoXyKWVQggX7geFNPxBpocHIXQCsnxDjKy+3WX4SGyZVJXuLlqRRrX7FmQCuuMAfx642ovXmPA9g==","_resolved":"/private/var/folders/kj/42l7g3mx7nn5yvygg5w9t7hh0000gn/T/8784d196f89e1d17987ad55efb76f32e/molt-command-0.9.0.tgz","_from":"file:molt-command-0.9.0.tgz","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"shasum":"3c77efe435beb6062da8ba96097f8f82e9bee51c","size":171595,"noattachment":false,"key":"/@molt/command/-/@molt/command-0.9.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/@molt/command/download/@molt/command-0.9.0.tgz"},"_npmUser":{"name":"jasonkuhrt","email":"jasonkuhrt@me.com"},"directories":{},"maintainers":[{"name":"jasonkuhrt","email":"jasonkuhrt@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command_0.9.0_1694883504474_0.4326920747469529"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2023-09-16T16:58:24.726Z","publish_time":1694883504726,"_source_registry_name":"default","_cnpm_publish_time":1694883504726},"0.7.0":{"name":"@molt/command","version":"0.7.0","description":"Type-safe CLI command definition and execution.","type":"module","types":"./build/esm/index.d.ts","exports":{".":{"require":{"types":"./build/cjs/index.d.cts","default":"./build/cjs/index.js"},"import":{"types":"./build/esm/index.d.ts","default":"./build/esm/index.js"}}},"keywords":[],"author":{"name":"Jason Kuhrt"},"license":"MIT","dependencies":{"alge":"0.8.1","chalk":"^5.2.0","lodash.camelcase":"^4.3.0","lodash.snakecase":"^4.1.1","string-length":"^5.0.1","strip-ansi":"^7.0.1","ts-toolbelt":"^9.6.0","zod":"^3.20.6","@molt/types":"0.2.0"},"devDependencies":{"@types/lodash.camelcase":"4.3.7","@types/lodash.snakecase":"^4.1.7","conditional-type-checks":"1.0.6","execa":"7.0.0","fast-glob":"3.2.12","fs-jetpack":"5.1.0","tsd":"0.25.0","vitest":"0.29.2","vitest-mock-process":"^1.0.4"},"scripts":{"vitest":"vitest","types:check":"tsc --noEmit","test":"vitest","clean":"tsc --build --clean","build":"pnpm clean && pnpm build:cjs && pnpm build:esm","build:cjs":"tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > build/cjs/package.json","build:esm":"tsc --project tsconfig.esm.json","build:toc":"markdown-toc README.md -i --maxdepth 4 && prettier --write README.md","examples:intro":"ts-node examples/intro.ts","examples:kitchen-sink":"ts-node examples/kitchen-sink.ts","examples:publish":"ts-node examples/publish.ts"},"_id":"@molt/command@0.7.0","_integrity":"sha512-wx9brJZzqAdFvaseE3jt/4VCb6cct7xSdI0zMmdMP9pL43KvMuPDmW2wuQidw4ijtjskGD/ISz8kcsMeP74zPw==","_resolved":"/private/var/folders/kj/42l7g3mx7nn5yvygg5w9t7hh0000gn/T/0ab364a8a3742f106c3dcc98dec1a840/molt-command-0.7.0.tgz","_from":"file:molt-command-0.7.0.tgz","_nodeVersion":"16.19.0","_npmVersion":"8.19.3","dist":{"shasum":"149be360a850a1a3338415b182ea828807f40649","size":128511,"noattachment":false,"key":"/@molt/command/-/@molt/command-0.7.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/@molt/command/download/@molt/command-0.7.0.tgz"},"_npmUser":{"name":"jasonkuhrt","email":"jasonkuhrt@me.com"},"directories":{},"maintainers":[{"name":"jasonkuhrt","email":"jasonkuhrt@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command_0.7.0_1678209561933_0.001528500499242913"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2023-03-07T17:19:22.174Z","publish_time":1678209562174,"_cnpm_publish_time":1678209562174},"0.6.1":{"name":"@molt/command","version":"0.6.1","description":"Type-safe CLI command definition and execution.","type":"module","types":"./build/esm/index.d.ts","exports":{".":{"require":{"types":"./build/cjs/index.d.cts","default":"./build/cjs/index.js"},"import":{"types":"./build/esm/index.d.ts","default":"./build/esm/index.js"}}},"keywords":[],"author":{"name":"Jason Kuhrt"},"license":"MIT","dependencies":{"alge":"0.7.0-next.1","chalk":"4","lodash.camelcase":"^4.3.0","lodash.snakecase":"^4.1.1","string-length":"4","strip-ansi":"6","ts-toolbelt":"^9.6.0","zod":"^3.20.2","@molt/types":"0.2.0"},"devDependencies":{"@types/lodash.camelcase":"4.3.7","@types/lodash.snakecase":"^4.1.7","conditional-type-checks":"1.0.6","execa":"6.1.0","fast-glob":"3.2.12","fs-jetpack":"5.1.0","tsd":"0.25.0","vitest":"0.25.8","vitest-mock-process":"^1.0.4"},"scripts":{"vitest":"vitest","types:check":"tsc --noEmit","test":"vitest","clean":"tsc --build --clean","build":"pnpm clean && pnpm build:cjs && pnpm build:esm","build:cjs":"ts-node scripts/build-cjs.ts","build:esm":"pnpm tsc --project tsconfig.esm.json","build:toc":"markdown-toc README.md -i --maxdepth 4 && prettier --write README.md","examples:intro":"ts-node examples/intro.ts","examples:kitchen-sink":"ts-node examples/kitchen-sink.ts","examples:publish":"ts-node examples/publish.ts"},"_id":"@molt/command@0.6.1","_integrity":"sha512-wnDTqQ1yLjVw4d/T36aLdgSHCz5/72OBMa1WnGBwmOUybpFk11OANDuXrvVUMjZ8eB0Q9GWQz6Ps1966wxxdBw==","_resolved":"/private/var/folders/kj/42l7g3mx7nn5yvygg5w9t7hh0000gn/T/4b41eae4c08206b6873612877f086e8a/molt-command-0.6.1.tgz","_from":"file:molt-command-0.6.1.tgz","_nodeVersion":"16.19.0","_npmVersion":"8.19.3","dist":{"shasum":"c972b819cb01749a73d2cd061f08143207e988b1","size":116488,"noattachment":false,"key":"/@molt/command/-/@molt/command-0.6.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/@molt/command/download/@molt/command-0.6.1.tgz"},"_npmUser":{"name":"jasonkuhrt","email":"jasonkuhrt@me.com"},"directories":{},"maintainers":[{"name":"jasonkuhrt","email":"jasonkuhrt@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command_0.6.1_1674429443571_0.020081114012084234"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2023-01-22T23:17:23.761Z","publish_time":1674429443761,"_cnpm_publish_time":1674429443761},"0.6.0":{"name":"@molt/command","version":"0.6.0","description":"Type-safe CLI command definition and execution.","type":"module","types":"./build/esm/index.d.ts","exports":{".":{"require":{"types":"./build/cjs/index.d.cts","default":"./build/cjs/index.js"},"import":{"types":"./build/esm/index.d.ts","default":"./build/esm/index.js"}}},"keywords":[],"author":{"name":"Jason Kuhrt"},"license":"MIT","dependencies":{"alge":"0.7.0-next.1","chalk":"4","lodash.camelcase":"^4.3.0","lodash.snakecase":"^4.1.1","string-length":"4","strip-ansi":"6","ts-toolbelt":"^9.6.0","zod":"^3.20.2","@molt/types":"0.2.0"},"devDependencies":{"@types/lodash.camelcase":"4.3.7","@types/lodash.snakecase":"^4.1.7","conditional-type-checks":"1.0.6","execa":"6.1.0","fast-glob":"3.2.12","fs-jetpack":"5.1.0","tsd":"0.25.0","vitest":"0.25.8","vitest-mock-process":"^1.0.4"},"scripts":{"vitest":"vitest","types:check":"tsc --noEmit","test":"vitest","clean":"tsc --build --clean","build":"pnpm clean && pnpm build:cjs && pnpm build:esm","build:cjs":"ts-node scripts/build-cjs.ts","build:esm":"pnpm tsc --project tsconfig.esm.json","build:toc":"markdown-toc README.md -i --maxdepth 4 && prettier --write README.md","examples:intro":"ts-node examples/intro.ts","examples:kitchen-sink":"ts-node examples/kitchen-sink.ts","examples:publish":"ts-node examples/publish.ts"},"_id":"@molt/command@0.6.0","_integrity":"sha512-c0Zq1zBDgiMWZNr08reKQGo8MjpeMmbChR0bH7vmTka4u8Lxba4w6Vll6KOhK6uY/QyHr2k5q+j8WJtU3WnHww==","_resolved":"/private/var/folders/kj/42l7g3mx7nn5yvygg5w9t7hh0000gn/T/4386dff12ce1688cc7a4fdcf3d4b5a9c/molt-command-0.6.0.tgz","_from":"file:molt-command-0.6.0.tgz","_nodeVersion":"16.19.0","_npmVersion":"8.19.3","dist":{"shasum":"bd21352329f7ee57e509e63d1e088940e4066ac3","size":113117,"noattachment":false,"key":"/@molt/command/-/@molt/command-0.6.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/@molt/command/download/@molt/command-0.6.0.tgz"},"_npmUser":{"name":"jasonkuhrt","email":"jasonkuhrt@me.com"},"directories":{},"maintainers":[{"name":"jasonkuhrt","email":"jasonkuhrt@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command_0.6.0_1672195001217_0.7536967272021105"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-12-28T02:38:21.720Z","publish_time":1672195001413,"_cnpm_publish_time":1672195001413},"0.5.0":{"name":"@molt/command","version":"0.5.0","description":"Type-safe CLI command definition and execution.","type":"module","types":"./build/esm/index.d.ts","exports":{".":{"require":{"types":"./build/cjs/index.d.cts","default":"./build/cjs/index.js"},"import":{"types":"./build/esm/index.d.ts","default":"./build/esm/index.js"}}},"keywords":[],"author":{"name":"Jason Kuhrt"},"license":"MIT","dependencies":{"alge":"0.7.0-next.1","chalk":"4","lodash.camelcase":"^4.3.0","lodash.snakecase":"^4.1.1","string-length":"4","strip-ansi":"6","ts-toolbelt":"^9.6.0","zod":"^3.19.1","@molt/types":"0.2.0"},"devDependencies":{"@types/lodash.camelcase":"4.3.7","@types/lodash.snakecase":"^4.1.7","conditional-type-checks":"1.0.6","execa":"6.1.0","fast-glob":"3.2.12","tsd":"0.25.0","fs-jetpack":"5.1.0","vitest":"0.25.3","vitest-mock-process":"^1.0.4"},"scripts":{"vitest":"vitest","types:check":"tsc --noEmit","test":"vitest","clean":"tsc --build --clean","build":"pnpm clean && pnpm build:cjs && pnpm build:esm","build:cjs":"ts-node scripts/build-cjs.ts","build:esm":"pnpm tsc --project tsconfig.esm.json","build:toc":"markdown-toc README.md -i --maxdepth 4 && prettier --write README.md","examples:intro":"ts-node examples/intro.ts","examples:kitchen-sink":"ts-node examples/kitchen-sink.ts","examples:publish":"ts-node examples/publish.ts"},"_id":"@molt/command@0.5.0","_integrity":"sha512-9BTwVmg023vVHHrwOgl+xWlckB59TJXrd8tHtBhhxSEJA7pyzt5fL7gLo0kuUYRb+qCcRI3zfhA3K3poPP1+dQ==","_resolved":"/private/var/folders/kj/42l7g3mx7nn5yvygg5w9t7hh0000gn/T/ba99837b2dcf04c37206d32f25f02fb7/molt-command-0.5.0.tgz","_from":"file:molt-command-0.5.0.tgz","_nodeVersion":"16.17.0","_npmVersion":"8.15.0","dist":{"shasum":"72a32857888039a560085e1dd5a0f7f87823a363","size":108106,"noattachment":false,"key":"/@molt/command/-/@molt/command-0.5.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/@molt/command/download/@molt/command-0.5.0.tgz"},"_npmUser":{"name":"jasonkuhrt","email":"jasonkuhrt@me.com"},"directories":{},"maintainers":[{"name":"jasonkuhrt","email":"jasonkuhrt@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command_0.5.0_1670374439232_0.4283896712811379"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-12-07T00:54:25.829Z","publish_time":1670374439472,"_cnpm_publish_time":1670374439472},"0.4.0":{"name":"@molt/command","version":"0.4.0","description":"Type-safe CLI command definition and execution.","type":"module","types":"./build/esm/index.d.ts","exports":{".":{"require":{"types":"./build/cjs/index.d.cts","default":"./build/cjs/index.js"},"import":{"types":"./build/esm/index.d.ts","default":"./build/esm/index.js"}}},"keywords":[],"author":{"name":"Jason Kuhrt"},"license":"MIT","dependencies":{"@molt/types":"0.2.0","alge":"0.7.0-next.1","chalk":"4","lodash.camelcase":"^4.3.0","lodash.snakecase":"^4.1.1","string-length":"4","strip-ansi":"6","ts-toolbelt":"^9.6.0","zod":"^3.19.1"},"devDependencies":{"@types/lodash.camelcase":"4.3.7","@types/lodash.snakecase":"^4.1.7","conditional-type-checks":"1.0.6","execa":"6.1.0","fast-glob":"3.2.12","tsd":"0.24.1","fs-jetpack":"5.1.0","vitest":"^0.24.3","vitest-mock-process":"^1.0.4"},"scripts":{"vitest":"vitest","types:check":"tsc --noEmit","test":"vitest","clean":"tsc --build --clean","build":"pnpm clean && pnpm build:cjs && pnpm build:esm","build:cjs":"ts-node scripts/build-cjs.ts","build:esm":"pnpm tsc --project tsconfig.esm.json","build:toc":"markdown-toc README.md -i --maxdepth 4 && prettier --write README.md","examples:intro":"ts-node examples/intro.ts","examples:kitchen-sink":"ts-node examples/kitchen-sink.ts","examples:publish":"ts-node examples/publish.ts"},"_id":"@molt/command@0.4.0","_integrity":"sha512-tKVyN56/bLRHLDN0bSEyEl432iXW551r4l1q6LEDZ6gSM78njrq5ewj/k+yM+ORC66o/1d2l9gAXBMARmAuwCA==","_resolved":"/private/var/folders/kj/42l7g3mx7nn5yvygg5w9t7hh0000gn/T/59b88c299de224462740436f7bf97c27/molt-command-0.4.0.tgz","_from":"file:molt-command-0.4.0.tgz","_nodeVersion":"16.17.0","_npmVersion":"8.15.0","dist":{"shasum":"236f925a9e034f5fc2ddbaf4992ac1740ca8022c","size":105639,"noattachment":false,"key":"/@molt/command/-/@molt/command-0.4.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/@molt/command/download/@molt/command-0.4.0.tgz"},"_npmUser":{"name":"jasonkuhrt","email":"jasonkuhrt@me.com"},"directories":{},"maintainers":[{"name":"jasonkuhrt","email":"jasonkuhrt@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command_0.4.0_1667607470296_0.09250678615753882"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-11-05T00:18:10.225Z","publish_time":1667607470554,"_cnpm_publish_time":1667607470554},"0.3.0":{"name":"@molt/command","version":"0.3.0","description":"Type-safe CLI command definition and execution.","type":"module","types":"./build/esm/index.d.ts","exports":{".":{"require":{"types":"./build/cjs/index.d.cts","default":"./build/cjs/index.js"},"import":{"types":"./build/esm/index.d.ts","default":"./build/esm/index.js"}}},"keywords":[],"author":{"name":"Jason Kuhrt"},"license":"MIT","dependencies":{"@molt/types":"0.1.6","alge":"0.7.0-next.1","chalk":"4","lodash.camelcase":"^4.3.0","lodash.snakecase":"^4.1.1","string-length":"4","strip-ansi":"6","ts-toolbelt":"^9.6.0","zod":"^3.19.1"},"devDependencies":{"@types/lodash.camelcase":"4.3.7","@types/lodash.snakecase":"^4.1.7","conditional-type-checks":"1.0.6","execa":"6.1.0","fast-glob":"3.2.12","fs-jetpack":"5.0.0","vitest":"^0.24.3","vitest-mock-process":"^1.0.4"},"scripts":{"types:check":"tsc --noEmit","test":"vitest","clean":"tsc --build --clean","build":"pnpm clean && pnpm build:cjs && pnpm build:esm","build:cjs":"ts-node scripts/build-cjs.ts","build:esm":"pnpm tsc --project tsconfig.esm.json","build:toc":"markdown-toc README.md -i --maxdepth 4 && prettier --write README.md","examples:intro":"ts-node examples/intro.ts","examples:kitchen-sink":"ts-node examples/kitchen-sink.ts","examples:publish":"ts-node examples/publish.ts"},"_id":"@molt/command@0.3.0","_integrity":"sha512-zmfkX6Qlp6gFyWq98O+4MMZwNI7YRcFh0AcGgD3BYC+Nu9Qv8HqsfVvtMxnsza0JdT4hN/opm/QlV61rXgnDjA==","_resolved":"/private/var/folders/kj/42l7g3mx7nn5yvygg5w9t7hh0000gn/T/a4b4ca64b41029b9dab47000d1cf797b/molt-command-0.3.0.tgz","_from":"file:molt-command-0.3.0.tgz","_nodeVersion":"16.17.0","_npmVersion":"8.15.0","dist":{"shasum":"de99038ed556aa5640131650730c9bc1cc75d4f4","size":53334,"noattachment":false,"key":"/@molt/command/-/@molt/command-0.3.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/@molt/command/download/@molt/command-0.3.0.tgz"},"_npmUser":{"name":"jasonkuhrt","email":"jasonkuhrt@me.com"},"directories":{},"maintainers":[{"name":"jasonkuhrt","email":"jasonkuhrt@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command_0.3.0_1666321596225_0.26775112349077035"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-10-21T03:14:12.717Z","publish_time":1666321596427,"_cnpm_publish_time":1666321596427},"0.2.2":{"name":"@molt/command","version":"0.2.2","description":"Type-safe CLI command definition and execution.","type":"module","types":"./build/esm/index.d.ts","exports":{".":{"require":{"types":"./build/cjs/index.d.cts","default":"./build/cjs/index.js"},"import":{"types":"./build/esm/index.d.ts","default":"./build/esm/index.js"}}},"keywords":[],"author":{"name":"Jason Kuhrt"},"license":"MIT","dependencies":{"@molt/types":"0.1.6","alge":"0.7.0-next.1","chalk":"4","lodash.camelcase":"^4.3.0","lodash.snakecase":"^4.1.1","string-length":"4","strip-ansi":"6","ts-toolbelt":"^9.6.0","zod":"^3.19.1"},"devDependencies":{"@types/lodash.camelcase":"4.3.7","@types/lodash.snakecase":"^4.1.7","conditional-type-checks":"1.0.6","execa":"6.1.0","fast-glob":"3.2.12","fs-jetpack":"5.0.0","vitest-mock-process":"^1.0.4"},"scripts":{"types:check":"tsc --noEmit","test":"vitest","clean":"tsc --build --clean","build":"pnpm clean && pnpm build:cjs && pnpm build:esm","build:cjs":"ts-node scripts/build-cjs.ts","build:esm":"pnpm tsc --project tsconfig.esm.json","build:toc":"markdown-toc README.md -i --maxdepth 4 && prettier --write README.md","examples:intro":"ts-node examples/intro.ts","examples:kitchen-sink":"ts-node examples/kitchen-sink.ts","examples:publish":"ts-node examples/publish.ts"},"_id":"@molt/command@0.2.2","_integrity":"sha512-RkENmzFmIUUYWzKIsychpxyALYtOdNvJVKS/sy6D/7+20jD8uYRP7Jmsec1aC0HA1pg3Cohb07iVS0m7aUwUxQ==","_resolved":"/private/var/folders/kj/42l7g3mx7nn5yvygg5w9t7hh0000gn/T/0fbde5e31705c87fc663e02171cde58a/molt-command-0.2.2.tgz","_from":"file:molt-command-0.2.2.tgz","_nodeVersion":"16.17.0","_npmVersion":"8.15.0","dist":{"shasum":"d3c4ce904ca30b52ec1558db92d07927988c1004","size":48586,"noattachment":false,"key":"/@molt/command/-/@molt/command-0.2.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/@molt/command/download/@molt/command-0.2.2.tgz"},"_npmUser":{"name":"jasonkuhrt","email":"jasonkuhrt@me.com"},"directories":{},"maintainers":[{"name":"jasonkuhrt","email":"jasonkuhrt@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command_0.2.2_1666234282997_0.3457496403429534"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-10-20T02:51:43.968Z","publish_time":1666234283173,"_cnpm_publish_time":1666234283173},"0.2.1":{"name":"@molt/command","version":"0.2.1","description":"Type-safe CLI command definition and execution.","type":"module","types":"./build/esm/index.d.ts","exports":{".":{"require":{"types":"./build/cjs/index.d.cts","default":"./build/cjs/index.js"},"import":{"types":"./build/esm/index.d.ts","default":"./build/esm/index.js"}}},"keywords":[],"author":{"name":"Jason Kuhrt"},"license":"MIT","dependencies":{"@molt/types":"0.1.6","alge":"0.7.0-next.1","chalk":"^5.1.2","lodash.camelcase":"^4.3.0","lodash.snakecase":"^4.1.1","string-length":"4","strip-ansi":"6","ts-toolbelt":"^9.6.0","zod":"^3.19.1"},"devDependencies":{"@types/lodash.camelcase":"4.3.7","@types/lodash.snakecase":"^4.1.7","conditional-type-checks":"1.0.6","execa":"6.1.0","fast-glob":"3.2.12","fs-jetpack":"5.0.0","vitest-mock-process":"^1.0.4"},"scripts":{"types:check":"tsc --noEmit","test":"vitest","clean":"tsc --build --clean","build":"pnpm clean && pnpm build:cjs && pnpm build:esm","build:cjs":"ts-node scripts/build-cjs.ts","build:esm":"pnpm tsc --project tsconfig.esm.json","build:toc":"markdown-toc README.md -i --maxdepth 4 && prettier --write README.md","examples:intro":"ts-node examples/intro.ts","examples:kitchen-sink":"ts-node examples/kitchen-sink.ts","examples:publish":"ts-node examples/publish.ts"},"_id":"@molt/command@0.2.1","_integrity":"sha512-oM4tVXDkQ2064iqdPWNKXRY/VKcPEv+0U6/PItAQrYlRomjidBV4i/bCfJ78+/zIr6OlGwwWyEnPOtbTIm4drg==","_resolved":"/private/var/folders/kj/42l7g3mx7nn5yvygg5w9t7hh0000gn/T/e2380b0e2f686fb6bd419a864226b7f9/molt-command-0.2.1.tgz","_from":"file:molt-command-0.2.1.tgz","_nodeVersion":"16.17.0","_npmVersion":"8.15.0","dist":{"shasum":"b3b0a9906c2d02acf0e9ad86831a81db051fab86","size":48590,"noattachment":false,"key":"/@molt/command/-/@molt/command-0.2.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/@molt/command/download/@molt/command-0.2.1.tgz"},"_npmUser":{"name":"jasonkuhrt","email":"jasonkuhrt@me.com"},"directories":{},"maintainers":[{"name":"jasonkuhrt","email":"jasonkuhrt@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command_0.2.1_1666233968501_0.4321745486367581"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-10-20T02:46:17.143Z","publish_time":1666233968710,"_cnpm_publish_time":1666233968710},"0.2.0":{"name":"@molt/command","version":"0.2.0","description":"Type-safe CLI command definition and execution.","type":"module","types":"./build/esm/index.d.ts","exports":{".":{"require":{"types":"./build/cjs/index.d.cts","default":"./build/cjs/index.js"},"import":{"types":"./build/esm/index.d.ts","default":"./build/esm/index.js"}}},"keywords":[],"author":{"name":"Jason Kuhrt"},"license":"MIT","dependencies":{"@molt/types":"0.1.6","alge":"0.7.0-next.1","chalk":"^5.1.2","lodash.camelcase":"^4.3.0","lodash.snakecase":"^4.1.1","strip-ansi":"^7.0.1","ts-toolbelt":"^9.6.0","zod":"^3.19.1"},"devDependencies":{"@types/lodash.camelcase":"4.3.7","@types/lodash.snakecase":"^4.1.7","conditional-type-checks":"1.0.6","execa":"6.1.0","fast-glob":"3.2.12","fs-jetpack":"5.0.0","vitest-mock-process":"^1.0.4"},"scripts":{"types:check":"tsc --noEmit","test":"vitest","clean":"tsc --build --clean","build":"pnpm clean && pnpm build:cjs && pnpm build:esm","build:cjs":"ts-node scripts/build-cjs.ts","build:esm":"pnpm tsc --project tsconfig.esm.json","build:toc":"markdown-toc README.md -i --maxdepth 4 && prettier --write README.md","examples:intro":"ts-node examples/intro.ts","examples:kitchen-sink":"ts-node examples/kitchen-sink.ts","examples:publish":"ts-node examples/publish.ts"},"_id":"@molt/command@0.2.0","_integrity":"sha512-Ct3UPTKFdft8zjt8oNlAVXrZp0b46oUvTjc4yJA16oTgPAZQBcO8dhKWmmmhqY8GFoucNEJE3YISWoMlT6LMmA==","_resolved":"/private/var/folders/kj/42l7g3mx7nn5yvygg5w9t7hh0000gn/T/d9ec66d31bdea83e978f7ea3168c76ca/molt-command-0.2.0.tgz","_from":"file:molt-command-0.2.0.tgz","_nodeVersion":"16.17.0","_npmVersion":"8.15.0","dist":{"shasum":"28560a4edd0edb1038e593fa12861280d11a058f","size":48410,"noattachment":false,"key":"/@molt/command/-/@molt/command-0.2.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/@molt/command/download/@molt/command-0.2.0.tgz"},"_npmUser":{"name":"jasonkuhrt","email":"jasonkuhrt@me.com"},"directories":{},"maintainers":[{"name":"jasonkuhrt","email":"jasonkuhrt@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command_0.2.0_1665891614289_0.10037689224328106"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-10-16T03:40:17.103Z","publish_time":1665891614470,"_cnpm_publish_time":1665891614470},"0.1.0":{"name":"@molt/command","version":"0.1.0","description":"Type-safe CLI command definition and execution.","type":"module","types":"./build/esm/index.d.ts","exports":{".":{"require":{"types":"./build/cjs/index.d.cts","default":"./build/cjs/index.cjs"},"import":{"types":"./build/esm/index.d.ts","default":"./build/esm/index.js"}}},"keywords":[],"author":{"name":"Jason Kuhrt"},"license":"MIT","dependencies":{"@molt/types":"0.1.6","alge":"0.7.0-next.1","lodash.camelcase":"^4.3.0","lodash.snakecase":"^4.1.1","ts-toolbelt":"^9.6.0","zod":"^3.19.1"},"devDependencies":{"@types/lodash.camelcase":"4.3.7","@types/lodash.snakecase":"^4.1.7","conditional-type-checks":"1.0.6","execa":"6.1.0","fast-glob":"3.2.12","fs-jetpack":"5.0.0"},"scripts":{"types:check":"tsc --noEmit","test":"vitest","clean":"tsc --build --clean","build":"pnpm clean && pnpm build:cjs && pnpm build:esm","build:cjs":"ts-node scripts/build-cjs.ts","build:esm":"pnpm tsc --project tsconfig.esm.json","build:toc":"markdown-toc README.md -i --maxdepth 4 && prettier --write README.md"},"_id":"@molt/command@0.1.0","_integrity":"sha512-5fWllHtXC2P5KZpbaioCStKJs0bsqJbLwGCM+h/aL68HFe5SSFQqs/vmGhpH4qgEE/K1KHxQXI8ekASLtEC35Q==","_resolved":"/private/var/folders/kj/42l7g3mx7nn5yvygg5w9t7hh0000gn/T/d872dfa34cdba40869d7847fb41121a1/molt-command-0.1.0.tgz","_from":"file:molt-command-0.1.0.tgz","_nodeVersion":"16.17.0","_npmVersion":"8.15.0","dist":{"shasum":"0db8348c0dcf99f09e92fdc311c82b3b377b5085","size":29977,"noattachment":false,"key":"/@molt/command/-/@molt/command-0.1.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/@molt/command/download/@molt/command-0.1.0.tgz"},"_npmUser":{"name":"jasonkuhrt","email":"jasonkuhrt@me.com"},"directories":{},"maintainers":[{"name":"jasonkuhrt","email":"jasonkuhrt@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command_0.1.0_1664587539807_0.3809516587733921"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-10-01T01:25:45.921Z","publish_time":1664587539977,"_cnpm_publish_time":1664587539977},"0.0.7":{"name":"@molt/command","version":"0.0.7","description":"Simple type-safe CLI command parsing.","type":"module","types":"./build/esm/index.d.ts","exports":{".":{"require":{"types":"./build/cjs/index.d.cts","default":"./build/cjs/index.cjs"},"import":{"types":"./build/esm/index.d.ts","default":"./build/esm/index.js"}}},"keywords":[],"author":{"name":"Jason Kuhrt"},"license":"MIT","dependencies":{"@molt/types":"0.1.6","lodash.camelcase":"^4.3.0","ts-toolbelt":"^9.6.0","zod":"^3.19.1"},"devDependencies":{"@types/lodash.camelcase":"4.3.7","conditional-type-checks":"1.0.6","execa":"6.1.0","fast-glob":"3.2.12","fs-jetpack":"5.0.0"},"scripts":{"types:check":"tsc --noEmit","test":"vitest","clean":"tsc --build --clean","build":"pnpm clean && pnpm build:cjs && pnpm build:esm","build:cjs":"ts-node scripts/build-cjs.ts","build:esm":"pnpm tsc --project tsconfig.esm.json"},"_id":"@molt/command@0.0.7","_integrity":"sha512-MAMl55QDtoxINKrhX1CIyguRBac/LNagrZIJiUlZhhocQSf+BEsCky2rIGUpG11zXdIa9OIekBdJhr56MOYEWA==","_resolved":"/private/var/folders/kj/42l7g3mx7nn5yvygg5w9t7hh0000gn/T/0db122b00479e81ae3bce4ab96f7b250/molt-command-0.0.7.tgz","_from":"file:molt-command-0.0.7.tgz","_nodeVersion":"16.17.0","_npmVersion":"8.15.0","dist":{"shasum":"a72b7fb49904df5b181dee072d4b7854fb6ff185","size":10648,"noattachment":false,"key":"/@molt/command/-/@molt/command-0.0.7.tgz","tarball":"http://registry.cnpm.dingdandao.com/@molt/command/download/@molt/command-0.0.7.tgz"},"_npmUser":{"name":"jasonkuhrt","email":"jasonkuhrt@me.com"},"directories":{},"maintainers":[{"name":"jasonkuhrt","email":"jasonkuhrt@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command_0.0.7_1663295072863_0.5020043922057973"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-09-16T02:25:01.783Z","publish_time":1663295073107,"_cnpm_publish_time":1663295073107},"0.0.6":{"name":"@molt/command","version":"0.0.6","description":"Simple type-safe CLI command parsing.","type":"module","types":"./build/esm/index.d.ts","exports":{".":{"require":{"types":"./build/cjs/index.d.cts","default":"./build/cjs/index.cjs"},"import":{"types":"./build/esm/index.d.ts","default":"./build/esm/index.js"}}},"keywords":[],"author":{"name":"Jason Kuhrt"},"license":"MIT","dependencies":{"@molt/types":"0.1.5","lodash.camelcase":"^4.3.0","ts-toolbelt":"^9.6.0","zod":"^3.19.1"},"devDependencies":{"@types/lodash.camelcase":"^4.3.7","conditional-type-checks":"1.0.6","execa":"6.1.0","fast-glob":"3.2.12","fs-jetpack":"4.3.1"},"scripts":{"types:check":"tsc --noEmit","test":"vitest","clean":"tsc --build --clean","build":"pnpm clean && pnpm build:cjs && pnpm build:esm","build:cjs":"ts-node scripts/build-cjs.ts","build:esm":"pnpm tsc --project tsconfig.esm.json"},"_id":"@molt/command@0.0.6","_integrity":"sha512-rINqoYhCG5FDnDbkqRbpN6pGkmFURijRwkgz6OAs15A9wwn4422QBhm1RrThI/VoQ6EM3C4XiC1nufaQSQ+UXQ==","_resolved":"/private/var/folders/kj/42l7g3mx7nn5yvygg5w9t7hh0000gn/T/382f68710b9268c6cce92a4e9d749cd5/molt-command-0.0.6.tgz","_from":"file:molt-command-0.0.6.tgz","_nodeVersion":"16.17.0","_npmVersion":"8.15.0","dist":{"shasum":"c3d429a3a8d9d602972d4002771a26a9657f2bd0","size":10318,"noattachment":false,"key":"/@molt/command/-/@molt/command-0.0.6.tgz","tarball":"http://registry.cnpm.dingdandao.com/@molt/command/download/@molt/command-0.0.6.tgz"},"_npmUser":{"name":"jasonkuhrt","email":"jasonkuhrt@me.com"},"directories":{},"maintainers":[{"name":"jasonkuhrt","email":"jasonkuhrt@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command_0.0.6_1663208400745_0.09096897519705993"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-09-15T02:20:28.170Z","publish_time":1663208401024,"_cnpm_publish_time":1663208401024},"0.0.5":{"name":"@molt/command","version":"0.0.5","description":"Simple type-safe CLI command parsing.","type":"module","types":"./build/esm/index.d.ts","exports":{".":{"require":{"types":"./build/cjs/index.d.cts","default":"./build/cjs/index.cjs"},"import":{"types":"./build/esm/index.d.ts","default":"./build/esm/index.js"}}},"keywords":[],"author":{"name":"Jason Kuhrt"},"license":"MIT","dependencies":{"@molt/types":"0.1.4","ts-toolbelt":"^9.6.0","zod":"^3.19.1"},"devDependencies":{"conditional-type-checks":"1.0.6","execa":"6.1.0","fast-glob":"3.2.12","fs-jetpack":"4.3.1"},"scripts":{"types:check":"tsc --noEmit","test":"vitest","clean":"tsc --build --clean","build":"pnpm clean && pnpm build:cjs && pnpm build:esm","build:cjs":"ts-node scripts/build-cjs.ts","build:esm":"pnpm tsc --project tsconfig.esm.json"},"_id":"@molt/command@0.0.5","_integrity":"sha512-kxwtMcrn799bZDDxRiRNySWXKmz4HXcxlsL+Ek3eQQFoRDUoTC+S+QHEsItrklVhi6vjqfmWMG3SxuCiwa5wuA==","_resolved":"/private/var/folders/kj/42l7g3mx7nn5yvygg5w9t7hh0000gn/T/596ea05ced22ed822b04a2711a0bdae0/molt-command-0.0.5.tgz","_from":"file:molt-command-0.0.5.tgz","_nodeVersion":"16.17.0","_npmVersion":"8.15.0","dist":{"shasum":"be20bbb364090e9e7e0dc9b7fb707cad4d0d42c5","size":9710,"noattachment":false,"key":"/@molt/command/-/@molt/command-0.0.5.tgz","tarball":"http://registry.cnpm.dingdandao.com/@molt/command/download/@molt/command-0.0.5.tgz"},"_npmUser":{"name":"jasonkuhrt","email":"jasonkuhrt@me.com"},"directories":{},"maintainers":[{"name":"jasonkuhrt","email":"jasonkuhrt@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command_0.0.5_1663204381002_0.23090074571475872"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-09-15T01:14:24.621Z","publish_time":1663204381173,"_cnpm_publish_time":1663204381173}},"readme":"# @molt/Command\n\n???? Type-safe CLI command definition and execution.\n\n<!-- toc -->\n\n- [Installation](#installation)\n- [Example](#example)\n- [Features](#features)\n  - [⛑ Type safe](#%E2%9B%91-type-safe)\n  - [???? Expressive parameter specification](#%F0%9F%91%98-expressive-parameter-specification)\n  - [???? Autogenerated help](#%F0%9F%93%96-autogenerated-help)\n- [Video Introduction](#video-introduction)\n- [Docs](#docs)\n  - [Parameter Naming](#parameter-naming)\n    - [Property Name Syntax](#property-name-syntax)\n    - [Flag Syntax](#flag-syntax)\n    - [Short, Long, & Aliasing](#short-long--aliasing)\n    - [Kebab / Camel Case](#kebab--camel-case)\n    - [Type Safety](#type-safety)\n  - [Parameter Types](#parameter-types)\n    - [Zod Support](#zod-support)\n    - [Boolean](#boolean)\n    - [String](#string)\n    - [Number](#number)\n    - [Enum](#enum)\n    - [Native Enum](#native-enum)\n    - [Union](#union)\n  - [Parameter Prompts](#parameter-prompts)\n    - [Overview](#overview)\n    - [Conditional](#conditional)\n    - [Examples](#examples)\n  - [Line Arguments](#line-arguments)\n    - [Parameter Argument Separator](#parameter-argument-separator)\n    - [Stacked Short Flags](#stacked-short-flags)\n    - [Case](#case)\n  - [Environment Arguments](#environment-arguments)\n    - [Default Name Pattern](#default-name-pattern)\n    - [Toggling](#toggling)\n    - [Selective Toggling](#selective-toggling)\n    - [Custom Prefix](#custom-prefix)\n    - [Selective Custom Prefix](#selective-custom-prefix)\n    - [Prefix Disabling](#prefix-disabling)\n    - [Selective Prefix Disabling](#selective-prefix-disabling)\n    - [Case Insensitive](#case-insensitive)\n    - [Validation](#validation)\n  - [Mutually Exclusive Parameters](#mutually-exclusive-parameters)\n    - [Type Safety](#type-safety-1)\n    - [Optional](#optional)\n    - [Default](#default)\n    - [Autogenerated Documentation](#autogenerated-documentation)\n  - [Description](#description)\n  - [Settings](#settings)\n- [Recipes](#recipes)\n  - [Optional Argument With Default Behavior](#optional-argument-with-default-behavior)\n- [Architecture](#architecture)\n\n<!-- tocstop -->\n\n## Installation\n\n```\nnpm add @molt/command zod\n```\n\n## Example\n\n```ts\nimport { Command } from '../src/index.js'\nimport { z } from 'zod'\n\nconst args = Command.create()\n  .parameter(`filePath`, z.string().describe(`Path to the file to convert.`))\n  .parameter(`to`, z.enum([`json`, `yaml`, `toml`]).describe(`Format to convert to.`))\n  .parameter(\n    `from`,\n    z\n      .enum([`json`, `yaml`, `toml`])\n      .optional()\n      .describe(`Format to convert from. By default inferred from the file extension.`),\n  )\n  .parameter(\n    `verbose v`,\n    z.boolean().default(false).describe(`Log detailed progress as conversion executes.`),\n  )\n  .parameter(\n    `move m`,\n    z.boolean().default(false).describe(`Delete the original file after it has been converted.`),\n  )\n  .parse()\n```\n\n```\n$ mybin --file ./music.yaml --to json\n```\n\nAutogenerated help:\n\n```\n$ mybin --help\n```\n\n![doc](../../../assets/example-doc-intro.png)\n\n## Features\n\n#### ⛑ Type safe\n\n#### ???? Expressive parameter specification\n\n- Automatic casting and validation based on specified Zod types.\n- Normalization between camel and kebab case and optional dash prefix:\n\n  ```ts\n  const args = Command.create()\n    .parameter('--do-it-a', z.boolean())\n    .parameter('--doItB', z.boolean())\n    .parameter('doItC', z.boolean())\n    .parse()\n\n  args1.doItA\n  args2.doItB\n  args3.doItC\n  ```\n\n- Specify one or multiple (aka. aliases) short and long flags:\n\n  ```ts\n  Command.create().parameter('-f --force --forcefully', z.boolean()).parse()\n  ```\n\n- Use Zod `.default(...)` method for setting default values.\n\n  ```ts\n  const args = Command.create().parameter('--path', z.string().default('./a/b/c')).parse()\n  args.path === './a/b/c/' //   $ mybin\n  args.path === '/over/ride' // $ mybin --path /over/ride\n  ```\n\n- Define [mutually exclusive parameters](#mutually-exclusive-parameters) declaratively.\n\n- Use Zod `.describe(...)` to add parameter descriptions in autogenerated docs.\n\n- ????‍♀️ Expressive argument passing\n\n  - Pass via environment variables (customizable)\n\n    ```ts\n    const args = Command.create().parameter('--path', z.string()).parse()\n    args.path === './a/b/c/' // $ CLI_PARAM_PATH='./a/b/c' mybin\n    ```\n\n  - Kebab or camel case flags\n    ```\n    $ mybin --do-it\n    $ mybin --doIt\n    ```\n  - Parameter stacking e.g. `mybin -abc` instead of `mybin -a -b -c`\n  - Separator of `=` or space, e.g. `mybin -a=foo -b=bar` or `mybin -a foo -b bar`\n\n#### ???? Autogenerated help\n\n![doc](../../../assets/example-doc-mx-params.png)\n![doc](../../../assets/example-doc-kitchen-sink.png)\n\n## Video Introduction\n\nA [video introduction](https://www.youtube.com/watch?v=UtXM4FKCUDo) if you like that format:\n\n[![abc](../../../assets/video-intro-cover.png)](https://www.youtube.com/watch?v=UtXM4FKCUDo)\n\n## Docs\n\n### Parameter Naming\n\n#### Property Name Syntax\n\nYou can define parameters as a zod object schema using regular property names. These are flags for your CLI but arguments can also be passed by environment variables so in a way this is a neutral form that doesn't privilege either argument passing mechanism.\n\n```ts\nconst args = Command.create()\n  .parameter('foo', z.string())\n  .parameter('bar', z.number())\n  .parameter('qux', z.boolean())\n  .parse()\n\nargs.foo\nargs.bar\nargs.qux\n```\n\n#### Flag Syntax\n\nYou can also define them using flag syntax if you prefer. Thanks to `@molt/types` this style doesn't sacrifice any type safety.\n\n```ts\nconst args = Command.create()\n  .parameter('--foo', z.string())\n  .parameter('--bar', z.number())\n  .parameter('--qux', z.boolean())\n  .parse()\n\nargs.foo\nargs.bar\nargs.qux\n```\n\n#### Short, Long, & Aliasing\n\nYou can give your parameters short and long names, as well as aliases.\n\nA set of parameter names gets normalized into its canonical name internally (again thanks to `@molt/types` this is all represented statically as well). The canonical name choice is as follows:\n\n1. The first long flag\n2. Otherwise the first short flag\n\n```ts\nconst args = Command.create()\n  .parameter('--foobar --foo -f ', z.string())\n  .parameter('--bar -b -x', z.number())\n  .parameter('-q --qux', z.boolean())\n  .parameter('-m -n', z.boolean())\n  .parse()\n\n// $ mybin --foobar moo --bar 2 --qux -m\n// $ mybin --foo    moo  -x   2 --qux -m\n// $ mybin  -f      moo  -b   1  -q   -n\nargs.foobar === 'moo'\nargs.bar === 1\nargs.qux === true\nargs.m === true\n```\n\nIf you prefer you can use a dash-prefix free syntax:\n\n```ts\nconst args = Command.create()\n  .parameter('foobar foo f ', z.string())\n  .parameter('bar b x', z.number())\n  .parameter('q qux', z.boolean())\n  .parameter('m n', z.boolean())\n  .parse()\n```\n\n#### Kebab / Camel Case\n\nYou can use kebab or camel case (and likewise your users can pass flags in either style). Canonical form internally uses camel case.\n\n```ts\nconst args = Command.create().parameter('foo-bar', z.string()).parameter('quxLot', z.string()).parse()\n\n// $ mybin --foo-bar moo --qux-lot zoo\n// $ mybin --fooBar moo --quxLot zoo\nargs.fooBar === 'moo'\nargs.quxLot === 'zoo'\n```\n\n#### Type Safety\n\nDuplicate parameter names will be caught statically via TypeScript.\n\n```ts\nconst args = Command.create()\n  .parameter('f foo bar', z.string())\n  .parameter('bar', z.string()) //  <-- TS error: already taken\n  .parameter('f', z.string()) //    <-- TS error: already taken\n  .parameter('foo', z.string()) //  <-- TS error: already taken\n  .parameter('help', z.string()) // <-- TS error: reserved name\n  .parameter('h', z.string()) //    <-- TS error: reserved name\n  .parse()\n```\n\n### Parameter Types\n\nThis section covers how parameters are typed via a subset of Zod schemas and the types used will affect parsing.\n\n#### Zod Support\n\nOnly the following set of Zod types are supported. In addition to the docs below, static typing will raise an error if you pass in something invalid.\n\n```ts\nz.boolean()\nz.string()\nz.enum(['...', '...'])\nz.nativeEnum({'...':'...', '...':'...'})\nz.number()\nz.union([...]) // where ... can be any other type above.\n```\n\nValidation methods like `.min(1)` and `.regex(/.../)` should all just work.\n\nThe following modifiers are accepted:\n\n```ts\n.optional()\n.default(...)\n```\n\nIf both `optional` and `default` are used then `default` takes precedence.\nThe `describe` method is used for adding docs. It can show up in any part of the chain. All the following are fine:\n\n```ts\nz.string().describe('...').optional()\nz.string().optional().describe('...')\nz.string().min(1).describe('...').optional()\n```\n\n#### Boolean\n\n- Flag does not accept any arguments.\n- Environment variable accepts `\"true\"` or `\"1\"` for `true` and `\"false\"` or `\"0\"` for `false`.\n- Negated form of parameters automatically accepted.\n- [Zod docs](https://github.com/colinhacks/zod#booleans)\n\nExamples:\n\n```ts\nconst args = Command.create().parameter('f force forcefully', z.boolean()).parse()\n// $ CLI_PARAM_NO_F='true' mybin\n// $ CLI_PARAM_NO_FORCE='true' mybin\n// $ CLI_PARAM_NO_FORCEFULLY='true' mybin\n// $ CLI_PARAM_F='false' mybin\n// $ CLI_PARAM_FORCE='false' mybin\n// $ CLI_PARAM_FORCEFULLY='false' mybin\n// $ mybin --no-f\n// $ mybin --noF\n// $ mybin --no-force\n// $ mybin --noForce\n// $ mybin --no-forcefully\n// $ mybin --noForcefully\nargs.force === false\n// $ CLI_PARAM_NO_F='false' mybin\n// $ CLI_PARAM_NO_FORCE='false' mybin\n// $ CLI_PARAM_NO_FORCEFULLY='false' mybin\n// $ CLI_PARAM_F='true' mybin\n// $ CLI_PARAM_FORCE='true' mybin\n// $ CLI_PARAM_FORCEFULLY='true' mybin\n// $ mybin -f\n// $ mybin --force\n// $ mybin --forcefully\nargs.force === true\n```\n\n#### String\n\n- Flag expects an argument.\n- [Zod docs](https://github.com/colinhacks/zod#strings)\n\n##### Transformations\n\n- `trim`\n- `toLowerCase`\n- `toUpperCase`\n\n##### Validations\n\n- `startsWith` - A prefix-string the value must be begin with.\n- `endsWith` - A suffix-string the value must end with.\n- `includes` - A sub-string the value must exactly contain.\n- `regex` - An arbitrary Regular Expression that the value must conform to.\n- `min` - The minimum allowed string length\n- `max` - The maximum allowed string length\n- `length` - An exact length the string must be\n- `pattern` - Different well known patterns that the value must conform to.\n  - `email` - An email\n  - `ip` - An IP address. Can be configured:\n    - Version 4\n    - Version 6\n    - Accept any version\n  - `url` - A URL\n  - `emoji` - An emoji\n  - `ulid` - [A ULID](https://github.com/ulid/javascript)\n  - `uuid` - A [UUID](https://www.ietf.org/rfc/rfc4122.txt)\n  - `cuid` - A [CUID](https://github.com/paralleldrive/cuid)\n  - `cuid2` - A [CUID v2](https://github.com/paralleldrive/cuid2)\n  - `dateTime` - An ISO DateTime. Can be configured:\n    - To forbid or accept an `offset`\n    - To require a specific level of precision\n\n#### Number\n\n- Flag expects an argument.\n- Argument is cast via the `Number()` function.\n- [Zod docs](https://github.com/colinhacks/zod#numbers)\n\n##### Validations\n\n- `min` - The minimum allowed number.\n- `max` - the maximum allowed number.\n- `multipleOf` - The multiple that the given number must be of. For example `20, 15, 10,5 ` would all be allowed if `multipleOf` was `5` since all those numbers are divisible by `5`.\n- `int`\n\n#### Enum\n\n- Flag expects an argument.\n- [Zod docs](https://github.com/colinhacks/zod#zod-enums)\n\n#### Native Enum\n\n- [Zod docs](https://github.com/colinhacks/zod#native-enums)\n- Flag expects an argument.\n\n#### Union\n\n- If no variant is a boolean then flag expects an argument.\n\n- If one variant is a boolean then flag will interpret no argument as being an argument of the boolean variant. For example given this CLI:\n\n  ```ts\n  Command.create().parameter('xee', z.union([z.boolean(), z.number()]))\n  ```\n\n  A user could call your CLI in any of these ways:\n\n  ```\n  $ mybin --xee\n  $ mybin --no-xee\n  $ mybin --xee 1\n  ```\n\n- When a parameter is a union type, the variant that can first successfully parse the given value becomes the interpreted type for the given value. Variant parsers are tried in order of most specific to least, which is: `enum`, `number`, `boolean`, `string`. So for example if you had a union parameter like this:\n\n  ```ts\n  Command.create().parameter('xee', z.union([z.string(), z.number()]))\n  ```\n\n- [Zod docs](https://github.com/colinhacks/zod#unions)\n\n##### Help Rendering\n\n- By default help rendering will render something like so:\n\n  ```ts\n  Command.create().parameter('xee', z.union([z.string(), z.number()]).description('Blah blah blah.'))\n  ```\n\n  ```\n  PARAMETERS\n\n    Name    Type/Description                              Default\n\n    xee     string | number                               REQUIRED\n            Blah blah blah.\n  ```\n\n- When the parameters have descriptions then it will cause an expanded layout e.g.:\n\n  ```ts\n  Command.create().parameter(\n    'xee',\n    z\n      .union([\n        z.string().description('Blah blah blah string.'),\n        z.number().description('Blah blah blah number.'),\n      ])\n      .description('Blah blah blah Overview'),\n  )\n  ```\n\n  ```\n  PARAMETERS\n\n    Name    Type/Description                              Default\n\n    xee     ┌─union                                       REQUIRED\n            │ Blah blah blah overview.\n            │\n            ◒ string\n            │ Blah blah blah string.\n            │\n            ◒ number\n            │ Blah blah blah number.\n            └─\n  ```\n\n- You can force expanded layout even when parameters do not have descriptions via the settings, e.g.:\n\n  ```ts\n  Command.create()\n    .parameter('xee', z.union([z.string(), z.number()]))\n    .parameter('foo', z.union([z.string(), z.number()]))\n    .settings({\n      helpRendering: {\n        union: {\n          mode: 'expandAlways',\n        },\n      },\n    })\n  ```\n\n  ```\n  PARAMETERS\n\n    Name    Type/Description                              Default\n\n    xee     ┌─union                                       REQUIRED\n            ◒ string\n            ◒ number\n            └─\n\n    foo     ┌─union                                       REQUIRED\n            │ Blah blah blah string.\n            ◒ string\n            ◒ number\n            └─\n  ```\n\n### Parameter Prompts\n\nYou can make Molt Command interactively _prompt_ users for arguments. This enables richer experiences for your users, like:\n\n- Graceful recovery from invalid up front arguments.\n- Guided argument passing meaning no need to know ahead of time the required parameters, just follow the prompts.\n\nExample:\n\n```\n$ mybin --filePath ./a/b/c.yaml\n\n1/1  to\n     ❯ jsonn\n     Invalid value: Value is not a member of the enum.\n     ❯ json\n```\n\n#### Overview\n\n- By default, disabled.\n- Can be configured at parameter level _or_ command level. Parameter level overrides command level.\n- Only _basic_ parameters support prompting (so e.g. not [mutually exclusive parameters](#mutually-exclusive-parameters)).\n- Can be enabled _conditionally_ via _pattern matching_ on _events_.\n- Common patterns have been pre-defined and exported at `Command.eventPatterns` for you.\n- Custom patterns may be defined in a type-safe way.\n- When enabled, a default pattern is used when none explicitly set.\n- The order of prompts will match the order of your parameter definitions.\n- The default pattern may be changed.\n- The default settings are:\n  ```ts\n  Command.create().settings({\n    prompt: {\n      enabled: false,\n      when: Command.eventPatterns.rejectedMissingOrInvalid,\n    },\n  })\n  ```\n- When there is no `TTY` (`process.stdout.isTTY === false`) then prompts are always disabled.\n- Arguments are validated just like they are when given \"up front\". However, when invalid, the user will be shown an error message and re-prompted, instead of the process exiting non-zero.\n- Prompts are _asynchronously_ executed so you must `await` the return of `.parse()`.\n\n#### Conditional\n\nYou can enable parameter prompts conditionally by _pattern matching_ on their parse event emitted during when Command runs. Every parameter whose parse event matches with your given pattern will subsequently be prompted for.\n\n_All_ defined parameters emit parse events, irregardless if _arguments_ were given, or from where those arguments originated (line, environment). Therefore this gives you lots of flexibility about when to prompt your user for input. For example:\n\n- When they miss a required parameter\n- When their input does not pass validation\n- When they an optional parameter is not given an argument up front\n- ...\n\nAll you need to do is pass a _pattern_ to `prompt` either at the parameter level or the [command level settings](#settings). There are three parse events you can match against:\n\n- _Accepted_\n  The parameter received an argument and it was successfully parsed.\n- _Rejected_\n  The parameter was not successfully parsed. This could be for various reasons such as a required parameter not receiving an argument or the given argument failing pass the parameter's validation rules.\n- _Omitted_\n  The parameter was not passed an argument by the user. Since this is not a _Rejected_ event it implies that the parameter was either optional, be that with or without a default.\n\nEach event type share some core properties but also have their own unique fields. For example with `Accepted` you can match against what the value given was and with `Rejected` you can match against the specific error that occurred.\n\n```ts\nconst args = await Command.create()\n  .parameter(`filePath`, z.string())\n  .parameter(`to`, {\n    schema: z.enum([`json`, `yaml`, `toml`]),\n    prompt: {\n      result: 'rejected',\n      error: 'ErrorMissingArgument',\n    },\n  })\n  .parse()\n```\n\nThe pattern matching library will be open-sourced and thoroughly documented in the future.\n\n#### Examples\n\n##### For the Default Event Pattern\n\nPassing `true` will enable using the default event pattern.\n\n```ts\nconst args = await Command.create()\n  .parameter(`filePath`, z.string())\n  .parameter(`to`, {\n    schema: z.enum([`json`, `yaml`, `toml`]),\n    prompt: true,\n  })\n  .parse()\n```\n\n##### For Particular Event(s)\n\nYou can enable prompt when one of the built-in event patterns occur:\n\n```ts\nconst args = await Command.create()\n  .parameter(`filePath`, z.string())\n  .parameter(`to`, {\n    schema: z.enum([`json`, `yaml`, `toml`]),\n    prompt: {\n      when: Command.EventPatterns.rejectedMissingOrInvalid,\n    },\n  })\n  .parse()\n```\n\nOr when one of multiple events occurs:\n\n```ts\nconst args = await Command.create()\n  .parameter(`filePath`, z.string())\n  .parameter(`to`, {\n    schema: z.enum([`json`, `yaml`, `toml`]),\n    prompt: {\n      when: [Command.EventPatterns.rejectedMissingOrInvalid, Command.EventPatterns.omittedWithoutDefault],\n    },\n  })\n  .parse()\n```\n\n##### For a Custom Event Pattern\n\nYou can enable prompt when your given _event pattern_ occurs.\n\n```ts\nconst args = await Command.create()\n  .parameter(`filePath`, z.string())\n  .parameter(`to`, {\n    schema: z.enum([`json`, `yaml`, `toml`]),\n    prompt: {\n      when: {\n        rejected: {\n          reason: 'missing',\n        },\n      },\n    },\n  })\n  .parse()\n```\n\n##### At Command Level\n\nYou can configure prompts for the entire instance in the settings. The configuration mirrors the parameter level. Parameter level overrides command level.\n\nEnable explicitly with shorthand approach using a `boolean`:\n\n```ts\nconst args = await Command.create()\n  .parameter(`filePath`, z.string())\n  .parameter(`to`, z.enum([`json`, `yaml`, `toml`]))\n  .settings({ prompt: true })\n  .parse()\n```\n\nEnable explicitly with longhand approach using the `enabled` nested property and include a condition.\n\nNote that in the following `enabled` could be omitted because passing an object implies `enabled: true` by default.\n\n```ts\nconst args = await Command.create()\n  .parameter(`filePath`, z.string())\n  .parameter(`to`, z.enum([`json`, `yaml`, `toml`]))\n  .settings({\n    prompt: {\n      enabled: true,\n      when: {\n        rejected: {\n          reason: 'missing',\n        },\n      },\n    },\n  })\n  .parse()\n```\n\n### Line Arguments\n\nThis section is about users passing arguments via the command line (as opposed to [the environment](#environment-arguments)), also known as \"flags\", to the parameters you've defined for your CLI.\n\n#### Parameter Argument Separator\n\nArguments can be separated from parameters using the following characters:\n\n- whitespace\n- equals sign\n\nExamples:\n\n```\n$ mybin --foo=moo\n$ mybin --foo= moo\n$ mybin --foo = moo\n$ mybin --foo moo\n```\n\nNote that when `=` is attached to the value side then it is considered part of the value:\n\n```\n$ mybin --foo =moo\n```\n\n#### Stacked Short Flags\n\nBoolean short flags can be stacked. Imagine you have defined three parameters `a`, `b`, `c`. They could be passed like so:\n\n```\n$ mybin -abc\n```\n\nThe last short flag does not have to be boolean flag. For example if there were a `d` parameter taking a string, this could work:\n\n```\n$ mybin -abcd foobar\n```\n\n#### Case\n\nYou can write flags in kebab or camel case:\n\n```\n$ mybin --foo-bar moo\n$ mybin --fooBar moo\n```\n\n### Environment Arguments\n\nParameter arguments can be passed by environment variables instead of flags.\n\nEnvironment arguments have lower precedence than Flags, so if an argument is available from both places, the environment argument is ignored while the flag argument is used.\n\n#### Default Name Pattern\n\nBy default environment arguments can be set using one of the following naming conventions (note: Molt reads environment variables with _case-insensitivity_):\n\n```\nCLI_PARAMETER_{parameter_name}\nCLI_PARAM_{parameter_name}\n```\n\n```ts\nconst args = Command.create().parameter('--path', z.string()).parse()\nargs.path === './a/b/c/' // $ CLI_PARAMETER_PATH='./a/b/c' mybin\n```\n\n#### Toggling\n\nYou can toggle environment arguments on/off. It is on by default.\n\n```ts\nconst command = Command.create().parameter('--path', z.string()).settings({\n  environment: false,\n})\n// $ CLI_PARAMETER_PATH='./a/b/c' mybin\n// Throws error because no argument given for \"path\"\ncommand.parse()\n```\n\nYou can also toggle with the environment variable `CLI_SETTINGS_READ_ARGUMENTS_FROM_ENVIRONMENT` (case insensitive):\n\n```ts\nconst command = Command.create().parameter('--path', z.string())\n// $ CLI_SETTINGS_READ_ARGUMENTS_FROM_ENVIRONMENT='false' CLI_PARAMETER_PATH='./a/b/c' mybin\n// Throws error because no argument given for \"path\"\ncommand.parse()\n```\n\n#### Selective Toggling\n\nYou can toggle environment on for just one or some parameters.\n\n```ts\nconst args = Command.create()\n  .parameter('--foo', z.string())\n  .parameter('--bar', z.string().default('not_from_env'))\n  .settings({ environment: { foo: true } })\n  .parse()\n\n// $ CLI_PARAMETER_FOO='foo' CLI_PARAMETER_BAR='bar' mybin\nargs.foo === 'foo'\nargs.bar === 'not_from_env'\n```\n\nYou can toggle environment on except for just one or some parameters.\n\n```ts\nconst args = Command.create()\n  .parameter('--foo', z.string().default('not_from_env'))\n  .parameter('--bar', z.string().default('not_from_env'))\n  .parameter('--qux', z.string().default('not_from_env'))\n  .settings({ environment: { $default: true, bar: false } })\n  .parse()\n\n// $ CLI_PARAMETER_FOO='foo' CLI_PARAMETER_BAR='bar' CLI_PARAMETER_QUX='qux' mybin\nargs.foo === 'foo'\nargs.bar === 'not_from_env'\nargs.qux === 'qux'\n```\n\n#### Custom Prefix\n\nYou can customize the environment variable name prefix:\n\n```ts\nconst args = Command.create()\n  .parameter('--path', z.string())\n  //                                              o-- case insensitive\n  .settings({ environment: { $default: { prefix: 'foo' } } })\n  .parse()\n\nargs.path === './a/b/c/' // $ FOO_PATH='./a/b/c' mybin\n```\n\nYou can pass a list of accepted prefixes instead of just one. Earlier ones take precedence over later ones:\n\n```ts\nconst args = Command.create()\n  .parameter('--path', z.string())\n  //                                               o---------o--- case insensitive\n  .settings({ environment: { $default: { prefix: ['foobar', 'foo'] } } })\n  .parse()\n\nargs.path === './a/b/c/' // $ FOOBAR_PATH='./a/b/c' mybin\nargs.path === './a/b/c/' // $ FOO_PATH='./a/b/c' mybin\nargs.path === './a/b/c/' // $ FOO_PATH='./x/y/z' FOOBAR_PATH='./a/b/c' mybin\n```\n\n#### Selective Custom Prefix\n\nYou can customize the environment variable name prefix for just one or some parameters.\n\n```ts\nconst args = Command.create()\n  .parameter('--foo', z.string().default('not_from_env'))\n  .parameter('--bar', z.string().default('not_from_env'))\n  .parameter('--qux', z.string().default('not_from_env'))\n  .settings({ environment: { bar: { prefix: 'MOO' } } })\n  .parse()\n\n// $ CLI_PARAMETER_FOO='foo' MOO_BAR='bar' CLI_PARAMETER_QUX='qux' mybin\nargs.foo === 'foo'\nargs.bar === 'bar'\nargs.qux === 'qux'\n```\n\nYou can customize the environment variable name prefix except for just one or some parameters.\n\n```ts\nconst args = Command.create()\n  .parameter('--foo', z.string().default('not_from_env'))\n  .parameter('--bar', z.string().default('not_from_env'))\n  .parameter('--qux', z.string().default('not_from_env'))\n  .settings({ environment: { $default: { enabled: true, prefix: 'MOO' }, bar: { prefix: true } } })\n  .parse()\n\n// $ MOO_FOO='foo' CLI_PARAM_BAR='bar' MOO_QUX='qux' mybin\nargs.foo === 'foo'\nargs.bar === 'bar'\nargs.qux === 'qux'\n```\n\n#### Prefix Disabling\n\nYou can remove the prefix altogether. Pretty and convenient, but be careful for unexpected use of variables in host environment that would affect your CLI execution!\n\n```ts\nconst args = Command.create()\n  .parameter('--path', z.string())\n  .settings({ environment: { $default: { prefix: false } } })\n  .parse()\n\nargs.path === './a/b/c/' // $ PATH='./a/b/c' mybin\n```\n\n#### Selective Prefix Disabling\n\nYou can disable environment variable name prefixes for just one or some parameters.\n\n```ts\nconst args = Command.create()\n  .parameter('--foo', z.string().default('not_from_env'))\n  .parameter('--bar', z.string().default('not_from_env'))\n  .parameter('--qux', z.string().default('not_from_env'))\n  .settings({ environment: { bar: { prefix: false } } })\n  .parse()\n\n// $ CLI_PARAMETER_FOO='foo' BAR='bar' CLI_PARAMETER_QUX='qux' mybin\nargs.foo === 'foo'\nargs.bar === 'bar'\nargs.qux === 'qux'\n```\n\nYou can disable environment variable name prefixes except for just one or some parameters.\n\n```ts\nconst args = Command.create()\n  .parameter('--foo', z.string().default('not_from_env'))\n  .parameter('--bar', z.string().default('not_from_env'))\n  .parameter('--qux', z.string().default('not_from_env'))\n  .settings({ environment: { $default: { enabled: true, prefix: false }, bar: { prefix: true } } })\n  .parse()\n\n// $ FOO='foo' CLI_PARAM_BAR='bar' QUX='qux' mybin\nargs.foo === 'foo'\nargs.bar === 'bar'\nargs.qux === 'qux'\n```\n\n#### Case Insensitive\n\nEnvironment variables are considered in a case insensitive way so all of these work:\n\n```ts\nconst args = Command.create().parameter('--path', z.string()).parse()\n// $ CLI_PARAM_PATH='./a/b/c' mybin\n// $ cli_param_path='./a/b/c' mybin\n// $ cLi_pAraM_paTh='./a/b/c' mybin\nargs.path === './a/b/c/'\n```\n\n#### Validation\n\nBy default, when a prefix is defined, a typo will raise an error:\n\n```ts\nconst command = Command.create().parameter('--path', z.string())\n\n// $ CLI_PARAM_PAH='./a/b/c' mybin\n// Throws error because there is no parameter named \"pah\" defined.\ncommand.parse()\n```\n\nIf you pass arguments for a parameter multiple times under different environment variable name aliases an error will be raised.\n\n```ts\nconst command = Command.create().parameter('--path', z.string())\n\n// $ CLI_PARAMETER_PAH='./1/2/3' CLI_PARAM_PAH='./a/b/c' mybin\n/ole/ Throws error because user intent is ambiguous.\ncommand.parse()\n```\n\n### Mutually Exclusive Parameters\n\nWith the chaining API you can declaratively state that two or more parameters are mutually exclusive using the `parametersExclusive` method.\n\nHere is an example where you might want this feature. You are building a CLI for publishing software packages that allows the user to specify the version to publish either by [semver](https://semver.org) level to bump by OR an exact version.\n\n```ts\n// prettier-ignore\nconst args = Command.create()\n  .parametersExclusive(`method`, (_) =>\n    _.parameter(`v version`, z.string().regex(semverRegex()))\n     .parameter(`b bump`, z.enum([`major`, `minor`, `patch`]))\n  )\n```\n\nThere are three key benefits to this method:\n\n1. Type safety for your implementation\n2. Autogenerated documentation for your users\n3. Clear runtime feedback for your users when they mistakenly pass arguments for more than one of the mutually exclusive parameters.\n\n#### Type Safety\n\nIn the above example `args` will end up with a `method` property whose type is:\n\n```ts\n// prettier-ignore\ntype Method =\n  | { _tag: 'version', value: string }\n  | { _tag: 'bump',    value: 'major' | 'minor' | 'patch' }\n```\n\nYou automatically get a proper TypeScript-ready discriminant property based on the canonical names of your parameters. This helps you to write type-safe code. Also, it pairs well with [Alge ????](https://github.com/jasonkuhrt/alge) :). In the following example `Semver.inc` expects a strongly typed semver bump level of `'major'|'minor'|'patch'`:\n\n```ts\nconst newVersion = Alge.match(args.method)\n  .bump(({ value }) => Semver.inc(pkg.version, value))\n  .version(({ value }) => value)\n  .done()\n```\n\n#### Optional\n\nBy default, input for a group of mutually exclusive parameters is required. You can mark the group as being optional:\n\n```ts\n// prettier-ignore\nconst args = Command.create()\n  .parametersExclusive(`method`, (_) =>\n    _.parameter(`v version`, z.string().regex(semverRegex()))\n     .parameter(`b bump`, z.enum([`major`, `minor`, `patch`]))\n     .optional()\n  )\n```\n\n#### Default\n\nBy default, input for a group of mutually exclusive parameters is required. You can mark the group as being optional for users via a default so that internally there is always a value:\n\n```ts\n// prettier-ignore\nconst args = Command.create()\n  .parametersExclusive(`method`, (_) =>\n    _.parameter(`v version`, z.string().regex(semverRegex()))\n     .parameter(`b bump`, z.enum([`major`, `minor`, `patch`]))\n     .optional()\n     .default('bump', 'patch')\n  )\n```\n\n#### Autogenerated Documentation\n\nYour users will clearly see that these parameters are mutually exclusive. Here's an example from the CLI/script Molt itself uses to publish new releases:\n\n![doc](../../../assets/example-doc-mx-params.png)\n\n### Description\n\nYou can give your command a description similar to how you can give each of your parameters a description.\n\n```ts\nconst args = Command.create()\n  .description(\n    'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam.',\n  )\n  .parameter(/* ... */)\n```\n\nDescriptions will show up in the auto generated help.\n\n### Settings\n\nYou can control certain settings about the command centrally using the `.settings` method. Sometimes the options here approximate the same options passable to parameter level settings, with the difference that configuration here affects all parameters at once. However, parameter level settings will always override command level ones.\n\nSettings documentation is not co-located. Documentation for various features will mention when there are command level settings available.\n\n```ts\nCommand.create().settings({...})\n```\n\n## Recipes\n\n### Optional Argument With Default Behavior\n\nSay you want this CLI design:\n\n```\nmybin             <-- Disable xee (default)\nmybin --xee       <-- Enable xee, use default\nmybin --xee x     <-- enable xee using x\nmybin --xee y     <-- enable xee using y\nmybin --xee z     <-- enable xee using z\n```\n\nYou could achieve this with the following parameter definition:\n\n```ts\nconst args = Command.create().parameter('xee', z.union([z.boolean(), z.enum(['x', 'y', 'z'])]).default(false))\n\nargs.xee // type: false | true | 'x' | 'y' | 'z'\n```\n\n## Architecture\n\nMolt Command is composed from multiple distinct layers that execute in a flow:\n\n1. Settings Parser\n1. Parameter Parser\n   - Use settings to enrich parameter specifications (like environment support)\n1. Up Front Arguments Parser\n   - Accept inputs from difference sources:\n     - Line\n     - Environment\n   - Cast values to primitive types based on parameter specification\n1. Pre-Prompt Argument Validation\n1. Prompt Plan (prompt matchers executed, matches mean prompt should run)\n1. Prompt Apply or Mistake Reporter (if not all mistakes recovered as prompts)\n1. Prompt/Up Front Arguments Merger (prompt overrides up front)\n\n```\n\n```\n","_attachments":{},"license":"MIT"}