{"_id":"operetta","_rev":"26-cb780bd346ee6ed896646121137898bc","name":"operetta","description":"The Node Option Parser That Sings!","dist-tags":{"latest":"1.0.2"},"versions":{"0.0.2":{"author":{"name":"Dmytri Kleiner","email":"dk@trick.ca","url":"http://dmytri.info"},"name":"operetta","description":"The Node Option Parser That Sings!","version":"0.0.2","repository":{"type":"git","url":"git://github.com/tricknik/node-operetta.git"},"engines":{"node":"~0.4.6"},"dependencies":{},"devDependencies":{},"_npmUser":{"name":"dk","email":"dk@trick.ca"},"_id":"operetta@0.0.2","_engineSupported":true,"_npmVersion":"1.0.105","_nodeVersion":"v0.4.6","_defaultsLoaded":true,"dist":{"shasum":"502602b2d20a919d785e0e64082c2644659140c7","tarball":"https://registry.npmjs.org/operetta/-/operetta-0.0.2.tgz","integrity":"sha512-xUTWBW8lP6ATzl3JV6kfNCr43GIdqDmOJbFfLDXjdtjc8Feixi4+hlFcHLTQS2xRyGTDcSXHsTas7LyFiaLeqw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBNpvkO/JdZAw1ySf1/vrRVVoZDkNiiJTzGXD/t3tG47AiEA1qcGMZzTztfzEN5qUPWHr62qoMb4NTYzy4koKoMy/j0="}]},"maintainers":[{"name":"dk","email":"dk@trick.ca"}],"directories":{}},"0.0.3":{"author":{"name":"Dmytri Kleiner","email":"dk@trick.ca","url":"http://dmytri.info"},"name":"operetta","description":"The Node Option Parser That Sings!","homepage":"https://github.com/tricknik/node-operetta","version":"0.0.3","repository":{"type":"git","url":"git://github.com/tricknik/node-operetta.git"},"bugs":{"url":"https://github.com/tricknik/node-operetta/issues"},"engines":{"node":"~0.4.6"},"dependencies":{},"devDependencies":{},"_npmUser":{"name":"dk","email":"dk@trick.ca"},"_id":"operetta@0.0.3","_engineSupported":true,"_npmVersion":"1.0.105","_nodeVersion":"v0.4.6","_defaultsLoaded":true,"dist":{"shasum":"84ec4b083c3b2d0e530fc6bea2a79068af5e2fe9","tarball":"https://registry.npmjs.org/operetta/-/operetta-0.0.3.tgz","integrity":"sha512-LIddhzpdDAVMBSwaIZDmOMWK7jhCeil42O/hze0L1rwFGFBplrz1gSSiUrndODGTNjRpGfYoHDtQ2AQTSs8T+Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICXxfCZdtCsBOtkLRDYNORxsmkvQl8OOuOvTlJvKR1n6AiEAxQyw09/h1nlv98dAEjgZc7J5H+soIEcX0jCU82E1Xlk="}]},"maintainers":[{"name":"dk","email":"dk@trick.ca"}],"directories":{}},"0.0.4":{"author":{"name":"Dmytri Kleiner","email":"dk@trick.ca","url":"http://dmytri.info"},"name":"operetta","main":"operetta","description":"The Node Option Parser That Sings!","homepage":"https://github.com/tricknik/node-operetta","version":"0.0.4","repository":{"type":"git","url":"git://github.com/tricknik/node-operetta.git"},"bugs":{"url":"https://github.com/tricknik/node-operetta/issues"},"engines":{"node":"~0.4.6"},"dependencies":{},"devDependencies":{},"_npmUser":{"name":"dk","email":"dk@trick.ca"},"_id":"operetta@0.0.4","_engineSupported":true,"_npmVersion":"1.0.105","_nodeVersion":"v0.4.6","_defaultsLoaded":true,"dist":{"shasum":"d2bdb0d9c357200ad6c1aabb15e6c808995cba63","tarball":"https://registry.npmjs.org/operetta/-/operetta-0.0.4.tgz","integrity":"sha512-6KrCbyjOrW6XywotzODNhjbyH8uHnnkgxTgLN882l2X9WXEbBVexBHxgMTMS1XW6ao62s+uwdELDsP/ovVHy8w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDyua/jEZnH9v+5nMtiTsjtKGW8TmIwPVge209qxS0htwIhAP+WRPZ+VUkJnmQghW7uZ5J8e+Gxh2iV8m9oiS88TaDF"}]},"maintainers":[{"name":"dk","email":"dk@trick.ca"}],"directories":{}},"0.0.5":{"author":{"name":"Dmytri Kleiner","email":"dk@trick.ca","url":"http://dmytri.info"},"name":"operetta","main":"operetta","description":"The Node Option Parser That Sings!","homepage":"https://github.com/tricknik/node-operetta","version":"0.0.5","repository":{"type":"git","url":"git://github.com/tricknik/node-operetta.git"},"bugs":{"url":"https://github.com/tricknik/node-operetta/issues"},"engines":["node >= 0.4.6"],"dependencies":{},"devDependencies":{},"_npmUser":{"name":"dk","email":"dk@trick.ca"},"_id":"operetta@0.0.5","_engineSupported":true,"_npmVersion":"1.0.105","_nodeVersion":"v0.4.6","_defaultsLoaded":true,"dist":{"shasum":"14828c97eeb913e2aa85d1d1d39a8926958e5556","tarball":"https://registry.npmjs.org/operetta/-/operetta-0.0.5.tgz","integrity":"sha512-b9E0Z5nvkHf9IQ0q7VaWpDfj/nX/pRAcMBoGh4SLrGhC2gE3BD6GwLc2qp64AsZgEwBe2gqIgBc5fqu/WDL9uQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGx3oxlLoAIW/Iz1Mdce+a2q2KkT4j7Pokw8g4Yx68ezAiA3HMYI3wgZTj5VTkYG3LrGyz7+kKZiU8WL5x0+CXWRRw=="}]},"maintainers":[{"name":"dk","email":"dk@trick.ca"}],"directories":{}},"0.0.6":{"author":{"name":"Dmytri Kleiner","email":"dk@trick.ca","url":"http://dmytri.info"},"name":"operetta","main":"operetta","description":"The Node Option Parser That Sings!","homepage":"https://github.com/dmytri/node-operetta","version":"0.0.6","repository":{"type":"git","url":"git://github.com/dmytri/node-operetta.git"},"bugs":{"url":"https://github.com/dmytri/node-operetta/issues"},"engines":["node >= 0.4.6"],"dependencies":{},"devDependencies":{},"gitHead":"7f3dc83aae1eb9951673cc00339c4dbf40f930b8","_id":"operetta@0.0.6","_nodeVersion":"14.5.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-y5/w2UcE7KCAKYFcl3JSNj1QTUs6degp4pIlaLLJop0CMYg8rAYM8dpKICyHMNvfWT7WLNKH1d0GoQPmdd91rw==","shasum":"c35f684575c7a494b0449fb1beb9c144d422efdf","tarball":"https://registry.npmjs.org/operetta/-/operetta-0.0.6.tgz","fileCount":8,"unpackedSize":17774,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfEF31CRA9TVsSAnZWagAAsicP+wfm2Tf355IEvMGVoNP5\nUNDDPFgLgnQCzfFjh3QQR/cvyjuszNjeQ9xwyGVt1hug4ueXy0gEOoFrcnmc\nNvyXoGYoNwyVXkOWDO2zAyhnP5bEU3toSOdKj16f+B3FmkaL1/qzRKox+1Kd\nb34aP+gzI0cu5rF1KaRCIWqVVcSDKbFzIp9EOrV2j5hCE6Sg3LfYyfoz3eNv\nCYN2hLO5u+lovPzgw3GzkebJUEO7VjA+2c5crAjXYcz+lBrgmtB8oFZ/JJsS\n3AbcreI3+q70NsEYMlkcTDW05onaoFvK+2auiBgxLPP70IKXIBjnCYLDJPwP\nV/Qz4b86TjjE53DfaU0yZplH+cqwpSRl0G7rW74pflCkrR01gBL1HjWZZLJ6\nxuONS9mB87WJKxez0bgI1SjRN93NMz93+t7aizoU0dQSCfH5aC0kss+LZRGL\noJo9Fbum0AUiMRlVB0IqX8/75vdVPRq670nm3Q4F2QETKpv7ysEJPZCuH177\n5TGLLJ6rG7Rl8a1xq5dvygmSRiVHwAQfXaxleoS7iZytdD/saAttcyj9stIQ\ndcw236kRaBIb/dLDNoeaERdiGbPD4pOapfTjfn1clRFdmsTrA7kXN7FOVxf4\nQ4wkK6RgT/uh/UtcHRJs90bD7d9Q50TxykreJsd7FOxcbr7vDi0tEuKmegI5\nBdcT\r\n=aTrP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICoTavjqknp0KcyA9zEvo4PhNOsj64ra7Ucr66eUrT8KAiBaCoeZ6S9h/YjT4NvbU6/XsI50Bec1vhPfOZTNn/Ik5Q=="}]},"maintainers":[{"name":"dk","email":"dk@trick.ca"}],"_npmUser":{"name":"dk","email":"dk@trick.ca"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/operetta_0.0.6_1594908149222_0.6239094877843436"},"_hasShrinkwrap":false},"0.0.7":{"author":{"name":"Dmytri Kleiner","email":"dk@trick.ca"},"name":"operetta","main":"operetta","description":"The Node Option Parser That Sings!","homepage":"https://github.com/dmytri/node-operetta","version":"0.0.7","license":"Apache-2.0","repository":{"type":"git","url":"git://github.com/dmytri/node-operetta.git"},"bugs":{"url":"https://github.com/dmytri/node-operetta/issues"},"engines":["node >= 0.4.6"],"gitHead":"50d73451277add8f83fe6f058a2e9ef4d057c547","_id":"operetta@0.0.7","_nodeVersion":"14.5.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-qTBgLF0cyTXlfcQOuD7ILJVohh78oTYzvd3ffyB501FIG1GneBwXGUWn9Lxgh+DSlyqh+xaH+Mq7qQB0++ejBQ==","shasum":"828fa2ef9b7ed0ad624e8419a822469ec87e54a4","tarball":"https://registry.npmjs.org/operetta/-/operetta-0.0.7.tgz","fileCount":8,"unpackedSize":17733,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfEGYWCRA9TVsSAnZWagAAWYEP/jd0LvXKH1awYhCpbugh\nwA4pGBZo8VBIzuJuFsWMIxW1/xDiilRYbxZQAblMCgFYIaOms6dK6ongMz2X\nuUdSFuZMkU95OdhEx3xPJ3B9tKRK/mkFG6gF56oLw6ROQrVCW5M3pJt2wiVh\nHrVQFJLRmBoLQa/7hub9O/pmjGVkUqeaQkmOMeF/19mZHCy/Mel5kM7bqBBz\nctjog1/A9iKyj+biFpND0Sdvg5xgdOEbJBIlnfVr9KN4QH7rFMCnnquWskef\npO4Qo5jEsiIKcvhGzIuAZmWoBHyG9laZyxdzfj+jIoOk/dEk6l0wxAxuDv73\nopccqDL/YJ6TiG/lMg3b4XOdevglkDWV9Wwij5ntnFAywc4JhGkl/Z4+ce6l\n+Vt6Av+5mNCVTeyUSN4GNHO5WdF3dEbevJDeZk6yw4OHGRcxpcIQEY19sJ6k\nNuLk5pq69WyjDY5KJKHMDZmQoJxkpexhyZJwKrv6+lY3CDkgoOnokkTGjS5W\nzCzrOvR2tWCZAF4+7i9GrLyXdQnaBKmehLwoAYqdpo4cOzGa+7yeBtxeq1tN\nEJILc9I48Af3noAKJltzgUuYxaRhrIg7ruZq9zAzir01DAV1ScOvWzahZrWy\nLy/jDVgFm7VpplTUGhKg0EH7C7MgH448HKd74X2H9UQwdBtr0f7fvcx/4BAx\n6xmo\r\n=Oa1q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFVQWKlP1rnSoktnfCEF2TdT0LCQEllZR4/IjrX/u1ESAiEA6uYUdA4hC9OSAa+TzQijrAzOynP1vdioWTyr4v9jO2k="}]},"maintainers":[{"name":"dk","email":"dk@trick.ca"}],"_npmUser":{"name":"dk","email":"dk@trick.ca"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/operetta_0.0.7_1594910230056_0.20249202290753088"},"_hasShrinkwrap":false},"1.0.0":{"name":"operetta","description":"The Node Option Parser That Sings!","version":"1.0.0","author":{"name":"Dmytri Kleiner","email":"dk@trick.ca"},"bugs":{"url":"https://github.com/dmytri/node-operetta/issues"},"engines":{"node":">=8.10.0"},"homepage":"https://www.npmjs.com/package/operetta","keywords":["Option Parser","gnuopt","options","paramaters","subcommands","cli"],"license":"Apache-2.0","main":"index.js","repository":{"type":"git","url":"git://github.com/dmytri/node-operetta.git"},"scripts":{"test":"standard *.js test/*.js && tape test/*.js"},"devDependencies":{"standard":"^14.3.4","tape":"^5.0.1"},"gitHead":"ad4de5db8ab6120801fb7ac319ed9f2ee130da00","_id":"operetta@1.0.0","_nodeVersion":"14.5.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-xbFXLp/hxul3/Oct7kBIXPjMOwFcgMsaY7OsCy1KCtVp8dazx6DGUyxzt8UhLyMzrhm3woi1vHaKWhNxDzmp8g==","shasum":"06a9d8789bdd035e93efc5779611de4fb7f87ecd","tarball":"https://registry.npmjs.org/operetta/-/operetta-1.0.0.tgz","fileCount":9,"unpackedSize":20824,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfGFGeCRA9TVsSAnZWagAArg0P/2/HQte5EH6TWAcHTSiJ\nWDf6z9T1akYcuv54u20r40vqhMHjZCv8o/rQ89KyIqvO2JfoQFsI7IUJaVQx\nmM9EeHzBgS0UJxrUleDgYFDss9AwjGooXbpmENCOxCOm3rvM6Ov8LSeT+8dY\nAPMT3zyvBgb5nKJ6tg8C0FanHJD0hPnVmYkXcabI4GSEAW2r3Swe3JgNWZ97\nfnKQM7t9nK/62yjo1B7bwk13aL46UURQgtgPIOrJaLFrieJQeuFLCfgtLQ8d\nvue1GDrmVkuqshYwWjirf9mDJx9e1u+fzbbZSqS+YhIDMHFaULXscihDyRYY\n4f3C7fWZ6u/EtKTDo8m7bckP0dvOjBGgofz+/MSQLXHjej31Queg4XGQVJdr\nXY/Hw4cKE/i/JUvMUVX1t9rh/KmbgWYFTxiOfQ2UshHHQECYgtWFTDm7+J8K\n3TxcJ7MhVRSQA89I90qyLbpdhI2GlVusPx5WvecaApeIrnqpOqUUvSlqo6Fq\nxtSkLgcQ7TMU5piM1K6RbYCe7yy6/vNoj7VHZiEt4TWGOAu/5nmB8CF6vVXl\nnYkP+YZwJBlfZ6uId6NUa+tXkKZBCdhf1yc6F83LCV0F932pvxRlP2C7Caui\nr9InLdGdXxqm9JoJIqLStfFK5UZdBVRoOFdmxRiIOsZUrhLTpoF1hagMbNQA\nubos\r\n=odpe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCBCZ5FKNWJMPgw0zd0fBptvVvafavS7zU01R6rluIkAgIgBM+RF7fOLopdcmyHIN1i0G71PgzmBCTAc64y+AvmKXw="}]},"maintainers":[{"email":"dk@trick.ca","name":"dmytri"}],"_npmUser":{"name":"dmytri","email":"dk@trick.ca"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/operetta_1.0.0_1595429278163_0.6984510343528156"},"_hasShrinkwrap":false},"1.0.1":{"name":"operetta","description":"The Node Option Parser That Sings!","version":"1.0.1","author":{"name":"Dmytri Kleiner","email":"dk@trick.ca"},"bugs":{"url":"https://github.com/dmytri/node-operetta/issues"},"engines":{"node":">=8.10.0"},"homepage":"https://www.npmjs.com/package/operetta","keywords":["Option Parser","gnuopt","options","paramaters","subcommands","cli"],"license":"Apache-2.0","main":"index.js","repository":{"type":"git","url":"git://github.com/dmytri/node-operetta.git"},"scripts":{"test":"standard *.js test/*.js && tape test/*.js"},"devDependencies":{"standard":"^14.3.4","tape":"^5.0.1"},"gitHead":"20a5f4f2dc5ed19c7f0b271d391a86f4819090d7","_id":"operetta@1.0.1","_nodeVersion":"14.5.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-ksrgUTvKLsnTjoCZ1B7oNPjfdRjgO3mGrMyouyK1jTeYUR+6CqN58MhZsQy+jzR+ALisJSAbRcnC9hgK5yhuqw==","shasum":"1164fce3bf76c2d54c2e2a9d1248255fbb1a16be","tarball":"https://registry.npmjs.org/operetta/-/operetta-1.0.1.tgz","fileCount":9,"unpackedSize":20815,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfGFuaCRA9TVsSAnZWagAAjoYP/2G/yIm1zt6Dx0w4HHOq\nBRk67kVYJvyB1zW1vcQeMk9UWNNOooCHuqpfnHoKICtR3UOE28u5yiZilcqN\nPh4gib/+t43tvuxS7hhGNlsuiYTKWANYNMlIDMiLCW2rbalcTivq6aqzkQ2Y\nPqUE/71m9NyY1SbLLSARmgG/4fEBRwPGTOm5MQ573se2U9Y5CuzIaU+XTVze\nfA2p+JrCPV/CLesN6Z4+mkY/mhF95MSDTHdK5Bl1PPrbySSUbkDdjWxaI3U5\nVTiBnOFbhGIxUUTUiKot2yVehRNHdbqftZ4Oj4I817wVYdESQh8h0yD5SN5A\nfM5kbsGu0M5YmEne0mb8ruvhqvALAkV3vkKwsnimWBmR3XFrY9dCCNj5eFi9\nNt89lkIIhOhkaN+r6+05natGtMsgwFBOaNTJMdwNpSZe3ZA0BmjvaagvhmeQ\nboWip7OFCjIpiC/wUNsBfYqMP6wHGGZn5OJisN/SfihWyvGo++ZLJKZ0etLJ\nueM55vTBna0O/6C3m7faUPu6ixX7Gmtgw6ja86ndIY1fxdb+bIh5PW7FZkAJ\n9y3lIecKXL1aM6cg7XOrIZ08JZbFYyzoK+PWD86WPT1+QWh1YO9eSz91IMEW\nC9aI7uICykxVYeuFQqxPjqTyUW824zvvbpqGUpyV+rpKDEyqxUyZs7FDttOE\n+E1B\r\n=EoSK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD2YUxja7qcyYtBAsWgmdPkZHEDEn1PCfwmJ8JfMsQlrQIgDv4uV0KOUqBKzD0UFf863AsAfrfle1qgNaVIx/Bc57o="}]},"maintainers":[{"email":"dk@trick.ca","name":"dmytri"}],"_npmUser":{"name":"dmytri","email":"dk@trick.ca"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/operetta_1.0.1_1595431834065_0.41307655221657047"},"_hasShrinkwrap":false},"1.0.2":{"name":"operetta","description":"The Node Option Parser That Sings!","version":"1.0.2","author":{"name":"Dmytri Kleiner","email":"dk@trick.ca"},"bugs":{"url":"https://github.com/dmytri/node-operetta/issues"},"engines":{"node":">=8.10.0"},"homepage":"https://www.npmjs.com/package/operetta","keywords":["Option Parser","gnuopt","options","paramaters","subcommands","cli"],"license":"Apache-2.0","main":"index.js","repository":{"type":"git","url":"git://github.com/dmytri/node-operetta.git"},"scripts":{"test":"standard *.js test/*.js && tape test/*.js"},"devDependencies":{"standard":"^14.3.4","tape":"^5.0.1"},"gitHead":"c3f57fb493c4b65a07c62be6ad8ab97533f338d8","_id":"operetta@1.0.2","_nodeVersion":"14.6.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-eeBQnOzBUrcxPYvJh4UXODjZrIBGXTmddJRpKIidimqYZf9j7ofSBrA4EU+l38MrJUEC4EkHMCIeLdCIbRMZ/Q==","shasum":"40aed4faf644f34a0cd0770e67680c85d811f5f7","tarball":"https://registry.npmjs.org/operetta/-/operetta-1.0.2.tgz","fileCount":9,"unpackedSize":20279,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfGVaUCRA9TVsSAnZWagAAFwYQAI2NSjDUjsCv9rbZjXHD\np4DJKcRGAWG3ycEjU4bEsrLPCVJjTRywq6d+S1vE6hvLnA2ICqwsunj6nXKi\nmqwm+HUjdVP4zFz+c8Dgt8EI4S4uf1GLQJvWaztIMrZb6qfRmUlfVJz4fF7P\nvgdXY5UbvETBUMl8eg66irBugw515jbL31ZsSIdivXxEnCmB89wBv2dH3Mx+\nk63IfgVgkm7AxBKHI/+na7fSVMY/iGxa2O/yss6ziPHqp96JqTb6QQwvPN+7\nzkVb96YpGbCCB8oQDH4ulKNxlkTEQQNU1RHjFWEPH9TSR3G4nLKw6Z1Cfshb\nEtmcxycapxUhigJKwxD9r2Lz0ksTjNIrqKSNc4bvo6Fg+WrdwSbNgvQTiDEJ\nMoEB8rYJ6S1VdD5Rwb9jis5+byN2mhf7YZUAcZ6D62ggNUHqJLT6PH26N+cc\ng1F3TuLCI8j/lwOEZ6220txYud8Pl3scB7+/NdXLvAPqUGFBE+fyeBiUI5K2\n5jpw+/fgZvtIz8/ugBaEFycHj32BOkG8RFJ5lWbPXci5FUtM6APYyxvvN0QD\n9e86Ec0jamzMA2f+/Zs//Kkyr1LrzXHtc2cVkdbuPpvSczKJz5Pc5ewnp2ox\n3sjtFpgx4gM215y4JORfdeK3Sw5hQXyDFtPEbusFbvjxZyyztZm300JJBJca\n3vgQ\r\n=9jF1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDpQU/h9azRBErEBrJWOEDg4G/PBPJSukIzoGyJclns3gIhANHp8otcxclJMj2go6TCg9TAcgUvvry6BHlORMZyxLyQ"}]},"maintainers":[{"email":"dk@trick.ca","name":"dmytri"}],"_npmUser":{"name":"dmytri","email":"dk@trick.ca"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/operetta_1.0.2_1595496084324_0.3262407006838779"},"_hasShrinkwrap":false}},"readme":"<pre>\n~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~\n _____  ____  ____  ____  ____  ____  ____   __\n(  _  )(  _ \\( ___)(  _ \\( ___)(_  _)(_  _) /__\\\n )(_)(  )___/ )__)  )   / )__)   )(    )(  /(__)\\\n(_____)(__)  (____)(_)\\_)(____) (__)  (__)(__)(__)\n\n        A Node Option Parser That Sings!\n\n~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~\n</pre>\n\n# Plot Summary #\n\n## Options ##\n\n**All options are arguments, but not all arguments are options.**\n\n $ nurl -I --insecure https://topsyturvey.onion/mikado.mkv\n\nIn the example above, the program nurl has three arguments, two of which are\noptions. Options are arguments that are one letter long and start with a dash\n(-), these are \"short options,\" or many letters long and start with a double\ndash (--), these are long options. Arguments that are not options are called\n\"positional\" arguments, because they have no name, so can only be referred to\nby their position following the command.\n\nOperetta would parse the above example as follows:\n\n<pre>\n{ positional: [ 'https://topsyturvey.onion/mikado.mkv' ],\n '-I': [ true ],\n '--insecure': [ true ]}\n</pre>\n\nFor the program to receive these values, it calls the start function with a\ncallback.\n\n<pre>\nvar Operetta = require(\"operetta\");\noperetta = new Operetta();\noperetta.start(function(values) {\n  console.log(values);\n});\n</pre>\n\nSimple, right? And quite enough for many programs.  But that is not all, oh no\nthat is not all!\n\n## Parameters ##\n\n**All parameters are options but not all options are parameters.**\n\n $ nysql --database secret_database --host=control.onion -usmart -p Iheart99\n\nSometimes options take a value. We call these Parameters.\n\nThe above shows the four valid forms to set values. Without any further\ninstruction, Operetta would parse the above as follows:\n\n<pre>\n{ positional: [ 'secret_database', 'Iheart99' ],\n '--database': [ true ],\n '--host': [ 'control.onion' ],\n '-u': [ true ],\n '-s': [ true ],\n '-m': [ true ],\n '-a': [ true ],\n '-r': [ true ],\n '-t': [ true ],\n '-p': [ true ]\n}\n</pre>\n\nUhgg. That's probably not what we want. It got --host right, because that is\nthe most unambiguous form for a parameter to take, a long option connected to a\nvalue by an equal sign. However the rest, what a mess! Since it doesn't know\nthat --database and -p are parameters, it treats \"secret_database\" and\n\"Iheart99\" as positional arguments, and since short options can be chained\ntogether, Operetta thinks \"usmart\" is a chain of 6 options. We're going to have\nto give operetta more information to handle these correctly.\n\n<pre>\nvar Operetta = require(\"operetta\").Operetta;\noperetta = new Operetta();\noperetta.parameters(['-D','--database'], \"Database\");\noperetta.parameters(['-H','--host'], \"Host\");\noperetta.parameters(['-u','--user'], \"User\");\noperetta.parameters(['-p','--password'], \"Password\");\noperetta.start(function(values) {\n  console.log(values);\n});\n</pre>\n\nWe use the parameters function to tell Operetta some things about our parameters,\nfirst we pass a list of options, i.e. ['-D','--database'], this gives the long\nand short form of the option, then we give a description.\n\nNow, we get the follow values:\n\n<pre>\n{ positional: [],\n '-D': [ 'secret_database' ],\n '-H': [ 'control.onion' ],\n '-u': [ 'smart' ],\n '-p': [ 'Iheart99' ]}\n</pre>\n\nMuch better! Note that the key for the value is always the first item in the\noptions list passed, so -D is present, even though --database was used.\n\n## Help ##\n\nWhat's more is now that we have descriptions, operetta will automatically bind\nthe options -h and --help to show these descriptions as help.\n\n<pre>\n$ nysql --help\n\nUsage:\n-D,--database  Database\n-H,--host      Host\n-u,--user      User\n-p,--password  Password\n-h,--help      Show Help\n</pre>\n\nNifty, huh? But what about plain old options? We may want to give these\ndescriptions too. For example, in our earlier nurl example, we may want to\nprovide descriptions for -I and --insecure. We can use the options function for\nthis.\n\n<pre>\noperetta.options(['-I','--head'], \"Show document info only\");\noperetta.options(['-k','--insecure'], \"Allow connections to SSL sites without certs\");\n</pre>\n\nIf you really insist, you can can override -h and --help using either the\noptions or parameters function, you can then then get the help output by\ncalling the usage function, either with or without a callback.\n\n<pre>\n// this will call console.log with help output.\noperetta.usage();\n// this will pass usage text to a callback.\noperetta.usage(function(help) {\n  console.log(help);\n});\n</pre>\n\nWe can add a banner above line that says \"Usage.\"\n\n<pre>\noperetta.banner = \"NySQL. The Nultimate Natabase!\\n\";\n</pre>\n\nNow we get the following Help:\n<pre>\nNySQL. The Nultimate Natabase!\n\nUsage:\n-D,--database  Database\n-H,--host      Host\n-u,--user      User\n-p,--password  Password\n-h,--help      Show Help\n</pre>\n\nThere you go! Now you can add options and parameters to your program and have\nit display nice help with the descriptions. That's all you need right? But that\nis not all operetta can do! Oh no, that is not all!\n\n## Events ##\n\nSometimes you don't just want all the options parsed and dumped to a single\ncallback as a values object, but you wold rather have an event triggered for\neach option. Here is where Operetta Sings!\n\nThe operetta object is an EventEmitter, so you can bind events with the on\noption.\n\n<pre>\noperetta.on('-k', function(value) {\n  console.log('Warning! The url you are requesting has not given any money to the SSL root certificate racketeers, and so while it's probably perfectly secure, it is not contributing to the profits of any money grubbing certificate authority!');\n});\n</pre>\n\nSince -k is just an option, value will always be true when this event is\ncalled, in the case of a parameter, value will be the value passed or null if\nnone was passed.\n\nWhile using the on function works, the preferred way to set a callback is to\npass it as the third argument to either the options or parameters function.\n\n<pre>\noperetta.options(['-k','--insecure'], \"Allow connections to SSL sites without certs\", function(value) {\n  console.log('Danger! Danger, Will Robinson!');\n});\n</pre>\n\nSo there you have it, Options, Parameters, Help and Events. Surely that's the\nend of this interminable readme file? No! That's not all. And stop calling me\nShirley.\n\n## Subcommands\n\nSometimes programs have different commands, each with their own options, i.e.\n\n<pre>\n $ nit clone http://nitnub.onion/nit.nit\n $ nit commit -am \"lotsa great codez\"\n $ nit push origin master\n</pre>\n\nIf the program nit has many subcommands, i.e. clone, commit, push then each of\nthese could have their own options and help. Operetta has a command function\nthat allows you to define these and get a new instance of operetta for\neach command.\n\n<pre>\noperetta.command('clone', \"Clone a Repo\", function(command) {\n  command.start(function(values) {\n    var url = values.positional[0];\n  });.\n});\noperetta.command('commit', \"Commit Changes\", function(command) {\n  command.options(['-a','--all'], \"Tell the command to automatically stage files that have been modified and deleted, but new files you have not told git about are not affected.\");\n  command.parameters(['-m','--message'], \"Use the given message as the commit message.\", function(value) {\n    console.log(\"Staging modified files.\");\n  });.\n  command.start();\n});\noperetta.command('push', \"Push To Remote Repo\", function(command) {\n  command.start(function(values) {\n    var remote = values.positional[0],\n      branch = values.positional[1];\n  });.\n});\noperetta.start();\n</pre>\n\nNow, if you called help without a subcommand:\n\n $ nit -h\n\n<pre>\nUsage:\nclone          Clone a Repo\ncommit         Commit Changes\npush           Push To Remote Repo\n-h,--help      Show Help\n</pre>\n\nYou get a list of the subcommands.\n\nHowever, if you call help on commit:\n\n $ nit commit --help\n\n<pre>\nUsage:\n-a,--all       Tell the command to automatically stage files that have been modified and deleted, but new files you have not told git about are not affected.\n-m,--message   Use the given message as the commit message.\n-h,--help      Show Help\n</pre>\n\nYou get the descriptions of the options defined for commit.\n\nAnd yes, if you really want, subcommand can have subcommands:\n\n<pre>\noperetta.command('submodule', \"Manage Submodules\", function(command) {\n  command.command('add', \"Add A submodule to the repo\", function(subcommand) {\n    subcommand.start();\n  });.\n});\n</pre>\n\nNow you could do:\n\n $ nit submodule add http://nitorious.onion/nitorious.nit\n\n# Coda #\n\nSo, options, parameters, help, events and subcommands. Shirley, you're thinking\noperetta must be some big, baroque, bloated, blob of blubbery JavaScript! Well,\nhere's what SLOCcount has to say:\n\n<pre>\nTotal Physical Source Lines of Code (SLOC)                = 107\nDevelopment Effort Estimate, Person-Years (Person-Months) = 0.02 (0.23)\n (Basic COCOMO model, Person-Months = 2.4 * (KSLOC**1.05))\n Schedule Estimate, Years (Months)                         = 0.12 (1.43)\n  (Basic COCOMO model, Months = 2.5 * (person-months**0.38))\n</pre>\n\nThat's right, small and cheap. So far it's only got One Hundred and Seven Lines\nof Code. So get it while it's small, before I add thousands of lines to support\nsuch must-have features as sending and receiving email and impersonating\na teenager in IRC channels.\n\nAnd yes, I called you Shirley.\n\n\n","maintainers":[{"email":"dk@trick.ca","name":"dmytri"}],"time":{"modified":"2022-06-23T00:45:08.822Z","created":"2011-11-14T07:54:04.282Z","0.0.2":"2011-11-14T07:54:05.295Z","0.0.3":"2011-11-14T08:04:22.292Z","0.0.4":"2011-11-14T08:42:07.117Z","0.0.5":"2012-01-05T16:39:05.390Z","0.0.6":"2020-07-16T14:02:29.356Z","0.0.7":"2020-07-16T14:37:10.237Z","1.0.0":"2020-07-22T14:47:58.264Z","1.0.1":"2020-07-22T15:30:34.196Z","1.0.2":"2020-07-23T09:21:24.449Z"},"author":{"name":"Dmytri Kleiner","email":"dk@trick.ca"},"repository":{"type":"git","url":"git://github.com/dmytri/node-operetta.git"},"homepage":"https://www.npmjs.com/package/operetta","bugs":{"url":"https://github.com/dmytri/node-operetta/issues"},"readmeFilename":"README.md","license":"Apache-2.0","keywords":["Option Parser","gnuopt","options","paramaters","subcommands","cli"]}