added bower, gulp
This commit is contained in:
+653
@@ -0,0 +1,653 @@
|
||||
# Change Log
|
||||
|
||||
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
||||
|
||||
<a name="4.8.1"></a>
|
||||
## [4.8.1](https://github.com/yargs/yargs/compare/v4.8.0...v4.8.1) (2016-07-16)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **commandDir:** make dir relative to caller instead of require.main.filename ([#548](https://github.com/yargs/yargs/issues/548)) ([3c2e479](https://github.com/yargs/yargs/commit/3c2e479))
|
||||
* add config lookup for .implies() ([#556](https://github.com/yargs/yargs/issues/556)) ([8d7585c](https://github.com/yargs/yargs/commit/8d7585c))
|
||||
* cache pkg lookups by path to avoid returning the wrong one ([#552](https://github.com/yargs/yargs/issues/552)) ([fea7e0b](https://github.com/yargs/yargs/commit/fea7e0b))
|
||||
* positional arguments were not being handled appropriately by parse() ([#559](https://github.com/yargs/yargs/issues/559)) ([063a866](https://github.com/yargs/yargs/commit/063a866))
|
||||
* pull in [@nexdrew](https://github.com/nexdrew)'s fixes to yargs-parser ([#560](https://github.com/yargs/yargs/issues/560)) ([c77c080](https://github.com/yargs/yargs/commit/c77c080)), closes [#560](https://github.com/yargs/yargs/issues/560)
|
||||
|
||||
|
||||
|
||||
<a name="4.8.0"></a>
|
||||
# [4.8.0](https://github.com/yargs/yargs/compare/v4.7.1...v4.8.0) (2016-07-09)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* drop unused camelcase dependency fixes [#516](https://github.com/yargs/yargs/issues/516) ([#525](https://github.com/yargs/yargs/issues/525)) ([365fb9a](https://github.com/yargs/yargs/commit/365fb9a)), closes [#516](https://github.com/yargs/yargs/issues/516) [#525](https://github.com/yargs/yargs/issues/525)
|
||||
* fake a tty in tests, so that we can use the new set-blocking ([#512](https://github.com/yargs/yargs/issues/512)) ([a54c742](https://github.com/yargs/yargs/commit/a54c742))
|
||||
* ignore invalid package.json during read-pkg-up ([#546](https://github.com/yargs/yargs/issues/546)) ([e058c87](https://github.com/yargs/yargs/commit/e058c87))
|
||||
* keep both zh and zh_CN until yargs[@5](https://github.com/5).x ([0f8faa7](https://github.com/yargs/yargs/commit/0f8faa7))
|
||||
* lazy-load package.json and cache. get rid of pkg-conf dependency. ([#544](https://github.com/yargs/yargs/issues/544)) ([2609b2e](https://github.com/yargs/yargs/commit/2609b2e))
|
||||
* we now respect the order of _ when applying commands ([#537](https://github.com/yargs/yargs/issues/537)) ([ed86b78](https://github.com/yargs/yargs/commit/ed86b78))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add .commandDir(dir) to API to apply all command modules from a relative directory ([#494](https://github.com/yargs/yargs/issues/494)) ([b299dff](https://github.com/yargs/yargs/commit/b299dff))
|
||||
* **command:** derive missing command string from module filename ([#527](https://github.com/yargs/yargs/issues/527)) ([20d4b8a](https://github.com/yargs/yargs/commit/20d4b8a))
|
||||
* builder is now optional for a command module ([#545](https://github.com/yargs/yargs/issues/545)) ([8d6ad6e](https://github.com/yargs/yargs/commit/8d6ad6e))
|
||||
|
||||
|
||||
|
||||
<a name="4.7.1"></a>
|
||||
## [4.7.1](https://github.com/yargs/yargs/compare/v4.7.0...v4.7.1) (2016-05-15)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* switch to using `const` rather than `var` ([#499](https://github.com/yargs/yargs/pull/499))
|
||||
* make stdout flush on newer versions of Node.js ([#501](https://github.com/yargs/yargs/issues/501)) ([9f8c6f4](https://github.com/yargs/yargs/commit/9f8c6f4))
|
||||
|
||||
|
||||
|
||||
<a name="4.7.0"></a>
|
||||
# [4.7.0](https://github.com/yargs/yargs/compare/v4.6.0...v4.7.0) (2016-05-02)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **pkgConf:** fix aliases issues in .pkgConf() ([#478](https://github.com/yargs/yargs/issues/478))([b900502](https://github.com/yargs/yargs/commit/b900502))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **completion:** allow to get completions for any string, not just process.argv ([#470](https://github.com/yargs/yargs/issues/470))([74fcfbc](https://github.com/yargs/yargs/commit/74fcfbc))
|
||||
* **configuration:** Allow to directly pass a configuration object to .config() ([#480](https://github.com/yargs/yargs/issues/480))([e0a7e05](https://github.com/yargs/yargs/commit/e0a7e05))
|
||||
* **validation:** Add .skipValidation() method ([#471](https://github.com/yargs/yargs/issues/471))([d72badb](https://github.com/yargs/yargs/commit/d72badb))
|
||||
|
||||
|
||||
|
||||
<a name="4.6.0"></a>
|
||||
# [4.6.0](https://github.com/yargs/yargs/compare/v4.5.0...v4.6.0) (2016-04-11)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **my brand!:** I agree with [@osher](https://github.com/osher) lightweight isn't a huge selling point of ours any longer, see [#468](https://github.com/yargs/yargs/issues/468) ([c46d7e1](https://github.com/yargs/yargs/commit/c46d7e1))
|
||||
|
||||
### Features
|
||||
|
||||
* switch to standard-version for release management ([f70f801](https://github.com/yargs/yargs/commit/f70f801))
|
||||
* upgrade to version of yargs-parser that introduces some slick new features, great work [@elas7](https://github.com/elas7). update cliui, replace win-spawn, replace badge. ([#475](https://github.com/yargs/yargs/issues/475)) ([f915dd4](https://github.com/yargs/yargs/commit/f915dd4))
|
||||
|
||||
|
||||
|
||||
<a name="4.5.0"></a>
|
||||
# [4.5.0](https://github.com/yargs/yargs/compare/v4.4.0...v4.5.0) (2016-04-05)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **windows:** handle $0 better on Windows platforms ([eb6e03f](https://github.com/yargs/yargs/commit/eb6e03f))
|
||||
|
||||
### Features
|
||||
|
||||
* **commands:** implemented variadic positional arguments ([51d926e](https://github.com/yargs/yargs/commit/51d926e))
|
||||
* **completion:** completion now better handles aliases, and avoids duplicating keys. ([86416c8](https://github.com/yargs/yargs/commit/86416c8))
|
||||
* **config:** If invoking .config() without parameters, set a default option ([0413dd1](https://github.com/yargs/yargs/commit/0413dd1))
|
||||
* **conventional-changelog:** switching to using conventional-changelog for generating the changelog ([a2b5a2a](https://github.com/yargs/yargs/commit/a2b5a2a))
|
||||
|
||||
|
||||
|
||||
### v4.4.0 (2016/04/03 21:10 +07:00)
|
||||
|
||||
- [#454](https://github.com/yargs/yargs/pull/454) fix demand() when second argument is an array (@elas7)
|
||||
- [#452](https://github.com/yargs/yargs/pull/452) fix code example for `.help()` docs (@maxrimue)
|
||||
- [#450](https://github.com/yargs/yargs/pull/450) fix for bash completion trailing space edge-case (@elas7)
|
||||
- [#448](https://github.com/yargs/yargs/pull/448) allow a method to be passed to `showHelp`, rather than a log-level (@osher)
|
||||
- [#446](https://github.com/yargs/yargs/pull/446) update yargs-parser, y18n, nyc, cliui, pkg-conf (@bcoe)
|
||||
- [#436](https://github.com/yargs/yargs/pull/436) the rebase method is only used by tests, do not export it in two places (@elas7)
|
||||
- [#428](https://github.com/yargs/yargs/pull/428) initial support for subcommands (@nexdrew)
|
||||
|
||||
### v4.3.2 (2016/3/20 15:07 +07:00)
|
||||
|
||||
- [#445](https://github.com/yargs/yargs/pull/445) strict mode was failing if no commands were registered (@nexdrew)
|
||||
- [#443](https://github.com/yargs/yargs/pull/443) adds Italian translation \o/ (@madrisan)
|
||||
- [#441](https://github.com/yargs/yargs/pull/441) remove duplicate keys from array options configuration (@elas7)
|
||||
- [#437](https://github.com/yargs/yargs/pull/437) standardize tests for .command() (@lrlna)
|
||||
|
||||
### v4.3.0 (2016/3/12 14:19 +07:00)
|
||||
|
||||
- [#432](https://github.com/yargs/yargs/pull/432) non-singleton version of yargs (@bcoe)
|
||||
- [#422, #425, #420] translations for number (@zkat, @rilut, @maxrimue, @watilde)
|
||||
- [#414](https://github.com/yargs/yargs/pull/414) all command options can be defined in module now (@nexdrew)
|
||||
|
||||
### v4.2.0 (2016/2/22 11:02 +07:00)
|
||||
|
||||
- [#395](https://github.com/yargs/yargs/pull/395) do not reset groups if they contain
|
||||
global keys (@novemberborn)
|
||||
- [#393](https://github.com/yargs/yargs/pull/393) use sane default for usage strings (@nexdrew)
|
||||
- [#392](https://github.com/yargs/yargs/pull/392) resetting wrap() was causing layout issues
|
||||
with commands (@nexdrew)
|
||||
- [#391](https://github.com/yargs/yargs/pull/391) commands were being added multiple times (@nexdrew)
|
||||
|
||||
### v4.0.0 (2016/2/14 1:27 +07:00)
|
||||
|
||||
- [#384](https://github.com/bcoe/yargs/pull/384) add new number type to yargs (@lrlna, @maxrimue)
|
||||
- [#382](https://github.com/bcoe/yargs/pull/382) pass error as extra parameter to fail (@gajus)
|
||||
- [#378](https://github.com/bcoe/yargs/pull/378) introduces the pkgConf feature, which tells
|
||||
yargs to load default argument values from a key on a project's package.json (@bcoe)
|
||||
- [#376](https://github.com/bcoe/yargs/pull/376) **breaking change**, make help() method signature
|
||||
more consistent with other commands (@maxrimue)
|
||||
- [#368](https://github.com/bcoe/yargs/pull/368) **breaking change**, overhaul to command handling API:
|
||||
introducing named positional arguments, commands as modules, introduces the concept of global options (options that don't reset). (@nexdrew, @bcoe).
|
||||
- [#364](https://github.com/bcoe/yargs/pull/364) add the slick new yargs website to the package.json (@iarna).
|
||||
- [#357](https://github.com/bcoe/yargs/pull/357) .strict() now requires that a valid command is provided (@lrlna)
|
||||
- [#356](https://github.com/bcoe/yargs/pull/356) pull the parsing bits of yargs into the separate module yargs-parser. Various parsing options can now be turned on and off using configuration (@bcoe).
|
||||
- [#330](https://github.com/bcoe/yargs/pull/330) **breaking change**, fix inconsistencies with `.version()` API. (@maxrimue).
|
||||
|
||||
### v3.32.0 (2016/1/14 10:13 +07:00)
|
||||
|
||||
- [#344](https://github.com/bcoe/yargs/pull/344) yargs now has a code of conduct and contributor guidelines (@bcoe)
|
||||
- [#341](https://github.com/bcoe/yargs/issues/341) Fix edge-case with camel-case arguments (@davibe)
|
||||
- [#331](https://github.com/bcoe/yargs/pull/331) Handle parsing a raw argument string (@kellyselden)
|
||||
- [#325](https://github.com/bcoe/yargs/pull/325) Tweaks to make tests pass again on Windows (@isaacs)
|
||||
- [#321](https://github.com/bcoe/yargs/pull/321) Custom config parsing function (@bcoe)
|
||||
|
||||
### v3.31.0 (2015/12/03 10:15 +07:00)
|
||||
|
||||
- [#239](https://github.com/bcoe/yargs/pull/239) Pass argv to commands (@bcoe)
|
||||
- [#308](https://github.com/bcoe/yargs/pull/308) Yargs now handles environment variables (@nexdrew)
|
||||
- [#302](https://github.com/bcoe/yargs/pull/302) Add Indonesian translation (@rilut)
|
||||
- [#300](https://github.com/bcoe/yargs/pull/300) Add Turkish translation (@feyzo)
|
||||
- [#298](https://github.com/bcoe/yargs/pull/298) Add Norwegian Bokmål translation (@sindresorhus)
|
||||
- [#297](https://github.com/bcoe/yargs/pull/297) Fix for layout of cjk characters (@disjukr)
|
||||
- [#296](https://github.com/bcoe/yargs/pull/296) Add Korean translation (@disjukr)
|
||||
|
||||
### v3.30.0 (2015/11/13 16:29 +07:00)
|
||||
|
||||
- [#293](https://github.com/bcoe/yargs/pull/293) Polish language support (@kamilogorek)
|
||||
- [#291](https://github.com/bcoe/yargs/pull/291) fix edge-cases with `.alias()` (@bcoe)
|
||||
- [#289](https://github.com/bcoe/yargs/pull/289) group options in custom groups (@bcoe)
|
||||
|
||||
### v3.29.0 (2015/10/16 21:51 +07:00)
|
||||
|
||||
- [#282](https://github.com/bcoe/yargs/pull/282) completions now accept promises (@LinusU)
|
||||
- [#281](https://github.com/bcoe/yargs/pull/281) fix parsing issues with dot notation (@bcoe)
|
||||
|
||||
### v3.28.0 (2015/10/16 1:55 +07:00)
|
||||
|
||||
- [#277](https://github.com/bcoe/yargs/pull/277) adds support for ansi escape codes (@bcoe)
|
||||
|
||||
### v3.27.0 (2015/10/08 1:55 +00:00)
|
||||
|
||||
- [#271](https://github.com/bcoe/yargs/pull/273) skips validation for help or version flags with exitProcess(false) (@tepez)
|
||||
- [#273](https://github.com/bcoe/yargs/pull/273) implements single output for errors with exitProcess(false) (@nexdrew)
|
||||
- [#269](https://github.com/bcoe/yargs/pull/269) verifies single output for errors with exitProcess(false) (@tepez)
|
||||
- [#268](https://github.com/bcoe/yargs/pull/268) adds Chinese translation (@qiu8310)
|
||||
- [#266](https://github.com/bcoe/yargs/pull/266) adds case for -- after -- in parser test (@geophree)
|
||||
|
||||
### v3.26.0 (2015/09/25 2:14 +00:00)
|
||||
|
||||
- [#263](https://github.com/bcoe/yargs/pull/263) document count() and option() object keys (@nexdrew)
|
||||
- [#259](https://github.com/bcoe/yargs/pull/259) remove util in readme (@38elements)
|
||||
- [#258](https://github.com/bcoe/yargs/pull/258) node v4 builds, update deps (@nexdrew)
|
||||
- [#257](https://github.com/bcoe/yargs/pull/257) fix spelling errors (@dkoleary88)
|
||||
|
||||
### v3.25.0 (2015/09/13 7:38 -07:00)
|
||||
|
||||
- [#254](https://github.com/bcoe/yargs/pull/254) adds Japanese translation (@oti)
|
||||
- [#253](https://github.com/bcoe/yargs/pull/253) fixes for tests on Windows (@bcoe)
|
||||
|
||||
### v3.24.0 (2015/09/04 12:02 +00:00)
|
||||
|
||||
- [#248](https://github.com/bcoe/yargs/pull/248) reinstate os-locale, no spawning (@nexdrew)
|
||||
- [#249](https://github.com/bcoe/yargs/pull/249) use travis container-based infrastructure (@nexdrew)
|
||||
- [#247](https://github.com/bcoe/yargs/pull/247) upgrade standard (@nexdrew)
|
||||
|
||||
### v3.23.0 (2015/08/30 23:00 +00:00)
|
||||
|
||||
- [#246](https://github.com/bcoe/yargs/pull/246) detect locale based only on environment variables (@bcoe)
|
||||
- [#244](https://github.com/bcoe/yargs/pull/244) adds Windows CI testing (@bcoe)
|
||||
- [#245](https://github.com/bcoe/yargs/pull/245) adds OSX CI testing (@bcoe, @nexdrew)
|
||||
|
||||
### v3.22.0 (2015/08/28 22:26 +00:00)
|
||||
- [#242](https://github.com/bcoe/yargs/pull/242) adds detectLocale config option (@bcoe)
|
||||
|
||||
### v3.21.1 (2015/08/28 20:58 +00:00)
|
||||
- [#240](https://github.com/bcoe/yargs/pull/240) hot-fix for Atom on Windows (@bcoe)
|
||||
|
||||
### v3.21.0 (2015/08/21 21:20 +00:00)
|
||||
- [#238](https://github.com/bcoe/yargs/pull/238) upgrade camelcase, window-size, chai, mocha (@nexdrew)
|
||||
- [#237](https://github.com/bcoe/yargs/pull/237) adds defaultDescription to option() (@nexdrew)
|
||||
|
||||
### v3.20.0 (2015/08/20 01:29 +00:00)
|
||||
- [#231](https://github.com/bcoe/yargs/pull/231) Merge pull request #231 from bcoe/detect-locale (@sindresorhus)
|
||||
- [#235](https://github.com/bcoe/yargs/pull/235) adds german translation to yargs (@maxrimue)
|
||||
|
||||
### v3.19.0 (2015/08/14 05:12 +00:00)
|
||||
- [#224](https://github.com/bcoe/yargs/pull/224) added Portuguese translation (@codemonkey3045)
|
||||
|
||||
### v3.18.1 (2015/08/12 05:53 +00:00)
|
||||
|
||||
- [#228](https://github.com/bcoe/yargs/pull/228) notes about embedding yargs in Electron (@etiktin)
|
||||
- [#223](https://github.com/bcoe/yargs/pull/223) make booleans work in config files (@sgentle)
|
||||
|
||||
### v3.18.0 (2015/08/06 20:05 +00:00)
|
||||
- [#222](https://github.com/bcoe/yargs/pull/222) updates fr locale (@nexdrew)
|
||||
- [#221](https://github.com/bcoe/yargs/pull/221) adds missing locale strings (@nexdrew)
|
||||
- [#220](https://github.com/bcoe/yargs/pull/220) adds es locale (@zkat)
|
||||
|
||||
### v3.17.1 (2015/08/02 19:35 +00:00)
|
||||
- [#218](https://github.com/bcoe/yargs/pull/218) upgrades nyc (@bcoe)
|
||||
|
||||
### v3.17.0 (2015/08/02 18:39 +00:00)
|
||||
- [#217](https://github.com/bcoe/yargs/pull/217) sort methods in README.md (@nexdrew)
|
||||
- [#215](https://github.com/bcoe/yargs/pull/215) adds fr locale (@LoicMahieu)
|
||||
|
||||
### v3.16.0 (2015/07/30 04:35 +00:00)
|
||||
- [#210](https://github.com/bcoe/yargs/pull/210) adds i18n support to yargs (@bcoe)
|
||||
- [#209](https://github.com/bcoe/yargs/pull/209) adds choices type to yargs (@nexdrew)
|
||||
- [#207](https://github.com/bcoe/yargs/pull/207) pretty new shields from shields.io (@SimenB)
|
||||
- [#208](https://github.com/bcoe/yargs/pull/208) improvements to README.md (@nexdrew)
|
||||
- [#205](https://github.com/bcoe/yargs/pull/205) faster build times on Travis (@ChristianMurphy)
|
||||
|
||||
### v3.15.0 (2015/07/06 06:01 +00:00)
|
||||
- [#197](https://github.com/bcoe/yargs/pull/197) tweaks to how errors bubble up from parser.js (@bcoe)
|
||||
- [#193](https://github.com/bcoe/yargs/pull/193) upgraded nyc, reporting now happens by default (@bcoe)
|
||||
|
||||
### v3.14.0 (2015/06/28 02:12 +00:00)
|
||||
|
||||
- [#192](https://github.com/bcoe/yargs/pull/192) standard style nits (@bcoe)
|
||||
- [#190](https://github.com/bcoe/yargs/pull/190) allow for hidden commands, e.g.,
|
||||
.completion('completion', false) (@tschaub)
|
||||
|
||||
### v3.13.0 (2015/06/24 04:12 +00:00)
|
||||
|
||||
- [#187](https://github.com/bcoe/yargs/pull/187) completion now behaves differently
|
||||
if it is being run in the context of a command (@tschaub)
|
||||
- [#186](https://github.com/bcoe/yargs/pull/186) if no matches are found for a completion
|
||||
default to filename completion (@tschaub)
|
||||
|
||||
### v3.12.0 (2015/06/19 03:23 +00:00)
|
||||
- [#183](https://github.com/bcoe/yargs/pull/183) don't complete commands if they've already been completed (@tschaub)
|
||||
- [#181](https://github.com/bcoe/yargs/pull/181) various fixes for completion. (@bcoe, @tschaub)
|
||||
- [#182](https://github.com/bcoe/yargs/pull/182) you can now set a maximum # of of required arguments (@bcoe)
|
||||
|
||||
### v3.11.0 (2015/06/15 05:15 +00:00)
|
||||
|
||||
- [#173](https://github.com/bcoe/yargs/pull/173) update standard, window-size, chai (@bcoe)
|
||||
- [#171](https://github.com/bcoe/yargs/pull/171) a description can now be set
|
||||
when providing a config option. (@5c077yP)
|
||||
|
||||
### v3.10.0 (2015/05/29 04:25 +00:00)
|
||||
|
||||
- [#165](https://github.com/bcoe/yargs/pull/165) expose yargs.terminalWidth() thanks @ensonic (@bcoe)
|
||||
- [#164](https://github.com/bcoe/yargs/pull/164) better array handling thanks @getify (@bcoe)
|
||||
|
||||
### v3.9.1 (2015/05/20 05:14 +00:00)
|
||||
- [b6662b6](https://github.com/bcoe/yargs/commit/b6662b6774cfeab4876f41ec5e2f67b7698f4e2f) clarify .config() docs (@linclark)
|
||||
- [0291360](https://github.com/bcoe/yargs/commit/02913606285ce31ce81d7f12c48d8a3029776ec7) fixed tests, switched to nyc for coverage, fixed security issue, added Lin as collaborator (@bcoe)
|
||||
|
||||
### v3.9.0 (2015/05/10 18:32 +00:00)
|
||||
- [#157](https://github.com/bcoe/yargs/pull/157) Merge pull request #157 from bcoe/command-yargs. allows handling of command specific arguments. Thanks for the suggestion @ohjames (@bcoe)
|
||||
- [#158](https://github.com/bcoe/yargs/pull/158) Merge pull request #158 from kemitchell/spdx-license. Update license format (@kemitchell)
|
||||
|
||||
### v3.8.0 (2015/04/24 23:10 +00:00)
|
||||
- [#154](https://github.com/bcoe/yargs/pull/154) showHelp's method signature was misleading fixes #153 (@bcoe)
|
||||
- [#151](https://github.com/bcoe/yargs/pull/151) refactor yargs' table layout logic to use new helper library (@bcoe)
|
||||
- [#150](https://github.com/bcoe/yargs/pull/150) Fix README example in argument requirements (@annonymouse)
|
||||
|
||||
### v3.7.2 (2015/04/13 11:52 -07:00)
|
||||
|
||||
* [679fbbf](https://github.com/bcoe/yargs/commit/679fbbf55904030ccee8a2635e8e5f46551ab2f0) updated yargs to use the [standard](https://github.com/feross/standard) style guide (agokjr)
|
||||
* [22382ee](https://github.com/bcoe/yargs/commit/22382ee9f5b495bc2586c1758cd1091cec3647f9 various bug fixes for $0 (@nylen)
|
||||
|
||||
### v3.7.1 (2015/04/10 11:06 -07:00)
|
||||
|
||||
* [89e1992](https://github.com/bcoe/yargs/commit/89e1992a004ba73609b5f9ee6890c4060857aba4) detect iojs bin along with node bin. (@bcoe)
|
||||
* [755509e](https://github.com/bcoe/yargs/commit/755509ea90041e5f7833bba3b8c5deffe56f0aab) improvements to example documentation in README.md (@rstacruz)
|
||||
* [0d2dfc8](https://github.com/bcoe/yargs/commit/0d2dfc822a43418242908ad97ddd5291a1b35dc6) showHelp() no longer requires that .argv has been called (@bcoe)
|
||||
|
||||
### v3.7.0 (2015/04/04 02:29 -07:00)
|
||||
|
||||
* [56cbe2d](https://github.com/bcoe/yargs/commit/56cbe2ddd33dc176dcbf97ba40559864a9f114e4) make .requiresArg() work with type hints. (@bcoe).
|
||||
* [2f5d562](https://github.com/bcoe/yargs/commit/2f5d5624f736741deeedf6a664d57bc4d857bdd0) serialize arrays and objects in usage strings. (@bcoe).
|
||||
* [5126304](https://github.com/bcoe/yargs/commit/5126304dd18351fc28f10530616fdd9361e0af98) be more lenient about alias/primary key ordering in chaining API. (@bcoe)
|
||||
|
||||
### v3.6.0 (2015/03/21 01:00 +00:00)
|
||||
- [4e24e22](https://github.com/bcoe/yargs/commit/4e24e22e6a195e55ab943ede704a0231ac33b99c) support for .js configuration files. (@pirxpilot)
|
||||
|
||||
### v3.5.4 (2015/03/12 05:56 +00:00)
|
||||
- [c16cc08](https://github.com/bcoe/yargs/commit/c16cc085501155cf7fd853ccdf8584b05ab92b78) message for non-option arguments is now optional, thanks to (@raine)
|
||||
|
||||
### v3.5.3 (2015/03/09 06:14 +00:00)
|
||||
- [870b428](https://github.com/bcoe/yargs/commit/870b428cf515d560926ca392555b7ad57dba9e3d) completion script was missing in package.json (@bcoe)
|
||||
|
||||
### v3.5.2 (2015/03/09 06:11 +00:00)
|
||||
- [58a4b24](https://github.com/bcoe/yargs/commit/58a4b2473ebbb326713d522be53e32d3aabb08d2) parse was being called multiple times, resulting in strange behavior (@bcoe)
|
||||
|
||||
### v3.5.1 (2015/03/09 04:55 +00:00)
|
||||
- [4e588e0](https://github.com/bcoe/yargs/commit/4e588e055afbeb9336533095f051496e3977f515) accidentally left testing logic in (@bcoe)
|
||||
|
||||
### v3.5.0 (2015/03/09 04:49 +00:00)
|
||||
- [718bacd](https://github.com/bcoe/yargs/commit/718bacd81b9b44f786af76b2afe491fe06274f19) added support for bash completions see #4 (@bcoe)
|
||||
- [a192882](https://github.com/bcoe/yargs/commit/a19288270fc431396c42af01125eeb4443664528) downgrade to mocha 2.1.0 until https://github.com/mochajs/mocha/issues/1585 can be sorted out (@bcoe)
|
||||
|
||||
### v3.4.7 (2015/03/09 04:09 +00:00)
|
||||
- [9845e5c](https://github.com/bcoe/yargs/commit/9845e5c1a9c684ba0be3f0bfb40e7b62ab49d9c8) the Argv singleton was not being updated when manually parsing arguments, fixes #114 (@bcoe)
|
||||
|
||||
### v3.4.6 (2015/03/09 04:01 +00:00)
|
||||
- [45b4c80](https://github.com/bcoe/yargs/commit/45b4c80b890d02770b0a94f326695a8a566e8fe9) set placeholders for all keys fixes #115 (@bcoe)
|
||||
|
||||
### v3.4.5 (2015/03/01 20:31 +00:00)
|
||||
- [a758e0b](https://github.com/bcoe/yargs/commit/a758e0b2556184f067cf3d9c4ef886d39817ebd2) fix for count consuming too many arguments (@bcoe)
|
||||
|
||||
### v3.4.4 (2015/02/28 04:52 +00:00)
|
||||
- [0476af7](https://github.com/bcoe/yargs/commit/0476af757966acf980d998b45108221d4888cfcb) added nargs feature, allowing you to specify the number of arguments after an option (@bcoe)
|
||||
- [092477d](https://github.com/bcoe/yargs/commit/092477d7ab3efbf0ba11cede57f7d8cfc70b024f) updated README with full example of v3.0 API (@bcoe)
|
||||
|
||||
### v3.3.3 (2015/02/28 04:23 +00:00)
|
||||
- [0c4b769](https://github.com/bcoe/yargs/commit/0c4b769516cd8d93a7c4e5e675628ae0049aa9a8) remove string dependency, which conflicted with other libraries see #106 (@bcoe)
|
||||
|
||||
### v3.3.2 (2015/02/28 04:11 +00:00)
|
||||
- [2a98906](https://github.com/bcoe/yargs/commit/2a9890675821c0e7a12f146ce008b0562cb8ec9a) add $0 to epilog (@schnittstabil)
|
||||
|
||||
### v3.3.1 (2015/02/24 03:28 +00:00)
|
||||
- [ad485ce](https://github.com/bcoe/yargs/commit/ad485ce748ebdfce25b88ef9d6e83d97a2f68987) fix for applying defaults to camel-case args (@bcoe)
|
||||
|
||||
### v3.3.0 (2015/02/24 00:49 +00:00)
|
||||
- [8bfe36d](https://github.com/bcoe/yargs/commit/8bfe36d7fb0f93a799ea3f4c756a7467c320f8c0) fix and document restart() command, as a tool for building nested CLIs (@bcoe)
|
||||
|
||||
### v3.2.1 (2015/02/22 05:45 +00:00)
|
||||
- [49a6d18](https://github.com/bcoe/yargs/commit/49a6d1822a4ef9b1ea6f90cc366be60912628885) you can now provide a function that generates a default value (@bcoe)
|
||||
|
||||
### v3.2.0 (2015/02/22 05:24 +00:00)
|
||||
- [7a55886](https://github.com/bcoe/yargs/commit/7a55886c9343cf71a20744ca5cdd56d2ea7412d5) improvements to yargs two-column text layout (@bcoe)
|
||||
- [b6ab513](https://github.com/bcoe/yargs/commit/b6ab5136a4c3fa6aa496f6b6360382e403183989) Tweak NPM version badge (@nylen)
|
||||
|
||||
### v3.1.0 (2015/02/19 19:37 +00:00)
|
||||
- [9bd2379](https://github.com/bcoe/yargs/commit/9bd237921cf1b61fd9f32c0e6d23f572fc225861) version now accepts a function, making it easy to load version #s from a package.json (@bcoe)
|
||||
|
||||
### v3.0.4 (2015/02/14 01:40 +00:00)
|
||||
- [0b7c19b](https://github.com/bcoe/yargs/commit/0b7c19beaecb747267ca4cc10e5cb2a8550bc4b7) various fixes for dot-notation handling (@bcoe)
|
||||
|
||||
### v3.0.3 (2015/02/14 00:59 +00:00)
|
||||
- [c3f35e9](https://github.com/bcoe/yargs/commit/c3f35e99bd5a0d278073fcadd95e2d778616cc17) make sure dot-notation is applied to aliases (@bcoe)
|
||||
|
||||
### 3.0.2 (2015/02/13 16:50 +00:00)
|
||||
- [74c8967](https://github.com/bcoe/yargs/commit/74c8967c340c204a0a7edf8a702b6f46c2705435) document epilog shorthand of epilogue. (@bcoe)
|
||||
- [670110f](https://github.com/bcoe/yargs/commit/670110fc01bedc4831b6fec6afac54517d5a71bc) any non-truthy value now causes check to fail see #76 (@bcoe)
|
||||
- [0d8f791](https://github.com/bcoe/yargs/commit/0d8f791a33c11ced4cd431ea8d3d3a337d456b56) finished implementing my wish-list of fetures for yargs 3.0. see #88 (@bcoe)
|
||||
- [5768447](https://github.com/bcoe/yargs/commit/5768447447c4c8e8304f178846206ce86540f063) fix coverage. (@bcoe)
|
||||
- [82e793f](https://github.com/bcoe/yargs/commit/82e793f3f61c41259eaacb67f0796aea2cf2aaa0) detect console width and perform word-wrapping. (@bcoe)
|
||||
- [67476b3](https://github.com/bcoe/yargs/commit/67476b37eea07fee55f23f35b9e0c7d76682b86d) refactor two-column table layout so that we can use it for examples and usage (@bcoe)
|
||||
- [4724cdf](https://github.com/bcoe/yargs/commit/4724cdfcc8e37ae1ca3dcce9d762f476e9ef4bb4) major refactor of index.js, in prep for 3.x release. (@bcoe)
|
||||
|
||||
### v2.3.0 (2015/02/08 20:41 +00:00)
|
||||
- [d824620](https://github.com/bcoe/yargs/commit/d824620493df4e63664af1fe320764dd1a9244e6) allow for undefined boolean defaults (@ashi009)
|
||||
|
||||
### v2.2.0 (2015/02/08 20:07 +00:00)
|
||||
- [d6edd98](https://github.com/bcoe/yargs/commit/d6edd9848826e7389ed1393858c45d03961365fd) in-prep for further refactoring, and a 3.x release I've shuffled some things around and gotten test-coverage to 100%. (@bcoe)
|
||||
|
||||
### v2.1.2 (2015/02/08 06:05 +00:00)
|
||||
- [d640745](https://github.com/bcoe/yargs/commit/d640745a7b9f8d476e0223879d056d18d9c265c4) switch to path.relative (@bcoe)
|
||||
- [3bfd41f](https://github.com/bcoe/yargs/commit/3bfd41ff262a041f29d828b88936a79c63cad594) remove mocha.opts. (@bcoe)
|
||||
- [47a2f35](https://github.com/bcoe/yargs/commit/47a2f357091db70903a402d6765501c1d63f15fe) document using .string('_') for string ids. see #56 (@bcoe)
|
||||
- [#57](https://github.com/bcoe/yargs/pull/57) Merge pull request #57 from eush77/option-readme (@eush77)
|
||||
|
||||
### v2.1.1 (2015/02/06 08:08 +00:00)
|
||||
- [01c6c61](https://github.com/bcoe/yargs/commit/01c6c61d67b4ebf88f41f0b32a345ec67f0ac17d) fix for #71, 'newAliases' of undefined (@bcoe)
|
||||
|
||||
### v2.1.0 (2015/02/06 07:59 +00:00)
|
||||
- [6a1a3fa](https://github.com/bcoe/yargs/commit/6a1a3fa731958e26ccd56885f183dd8985cc828f) try to guess argument types, and apply sensible defaults see #73 (@bcoe)
|
||||
|
||||
### v2.0.1 (2015/02/06 07:54 +00:00)
|
||||
- [96a06b2](https://github.com/bcoe/yargs/commit/96a06b2650ff1d085a52b7328d8bba614c20cc12) Fix for strange behavior with --sort option, see #51 (@bcoe)
|
||||
|
||||
### v2.0.0 (2015/02/06 07:45 +00:00)
|
||||
- [0250517](https://github.com/bcoe/yargs/commit/0250517c9643e53f431b824e8ccfa54937414011) - [108fb84](https://github.com/bcoe/yargs/commit/108fb8409a3a63dcaf99d917fe4dfcfaa1de236d) fixed bug with boolean parsing, when bools separated by = see #66 (@bcoe)
|
||||
- [a465a59](https://github.com/bcoe/yargs/commit/a465a5915f912715738de890982e4f8395958b10) Add `files` field to the package.json (@shinnn)
|
||||
- [31043de](https://github.com/bcoe/yargs/commit/31043de7a38a17c4c97711f1099f5fb164334db3) fix for yargs.argv having the same keys added multiple times see #63 (@bcoe)
|
||||
- [2d68c5b](https://github.com/bcoe/yargs/commit/2d68c5b91c976431001c4863ce47c9297850f1ad) Disable process.exit calls using .exitProcess(false) (@cianclarke)
|
||||
- [45da9ec](https://github.com/bcoe/yargs/commit/45da9ec4c55a7bd394721bc6a1db0dabad7bc52a) Mention .option in README (@eush77)
|
||||
|
||||
### v1.3.2 (2014/10/06 21:56 +00:00)
|
||||
- [b8d3472](https://github.com/bcoe/yargs/commit/b8d34725482e5821a3cc809c0df71378f282f526) 1.3.2 (@chevex)
|
||||
|
||||
### list (2014/08/30 18:41 +00:00)
|
||||
- [fbc777f](https://github.com/bcoe/yargs/commit/fbc777f416eeefd37c84e44d27d7dfc7c1925721) Now that yargs is the successor to optimist, I'm changing the README language to be more universal. Pirate speak isn't very accessible to non-native speakers. (@chevex)
|
||||
- [a54d068](https://github.com/bcoe/yargs/commit/a54d0682ae2efc2394d407ab171cc8a8bbd135ea) version output will not print extra newline (@boneskull)
|
||||
- [1cef5d6](https://github.com/bcoe/yargs/commit/1cef5d62a9d6d61a3948a49574892e01932cc6ae) Added contributors section to package.json (@chrisn)
|
||||
- [cc295c0](https://github.com/bcoe/yargs/commit/cc295c0a80a2de267e0155b60d315fc4b6f7c709) Added 'require' and 'required' as synonyms for 'demand' (@chrisn)
|
||||
- [d0bf951](https://github.com/bcoe/yargs/commit/d0bf951d949066b6280101ed606593d079ee15c8) Updating minimist. (@chevex)
|
||||
- [c15f8e7](https://github.com/bcoe/yargs/commit/c15f8e7f245b261e542cf205ce4f4313630cbdb4) Fix #31 (bad interaction between camelCase options and strict mode) (@nylen)
|
||||
- [d991b9b](https://github.com/bcoe/yargs/commit/d991b9be687a68812dee1e3b185ba64b7778b82d) Added .help() and .version() methods (@chrisn)
|
||||
- [e8c8aa4](https://github.com/bcoe/yargs/commit/e8c8aa46268379357cb11e9fc34b8c403037724b) Added .showHelpOnFail() method (@chrisn)
|
||||
- [e855af4](https://github.com/bcoe/yargs/commit/e855af4a933ea966b5bbdd3c4c6397a4bac1a053) Allow boolean flag with .demand() (@chrisn)
|
||||
- [14dbec2](https://github.com/bcoe/yargs/commit/14dbec24fb7380683198e2b20c4deb8423e64bea) Fixes issue #22. Arguments are no longer printed to the console when using .config. (@chevex)
|
||||
- [bef74fc](https://github.com/bcoe/yargs/commit/bef74fcddc1544598a804f80d0a3728459f196bf) Informing users that Yargs is the official optimist successor. (@chevex)
|
||||
- [#24](https://github.com/bcoe/yargs/pull/24) Merge pull request #24 from chrisn/strict (@chrisn)
|
||||
- [889a2b2](https://github.com/bcoe/yargs/commit/889a2b28eb9768801b05163360a470d0fd6c8b79) Added requiresArg option, for options that require values (@chrisn)
|
||||
- [eb16369](https://github.com/bcoe/yargs/commit/eb163692262be1fe80b992fd8803d5923c5a9b18) Added .strict() method, to report error if unknown arguments are given (@chrisn)
|
||||
- [0471c3f](https://github.com/bcoe/yargs/commit/0471c3fd999e1ad4e6cded88b8aa02013b66d14f) Changed optimist to yargs in usage-options.js example (@chrisn)
|
||||
- [5c88f74](https://github.com/bcoe/yargs/commit/5c88f74e3cf031b17c54b4b6606c83e485ff520e) Change optimist to yargs in examples (@chrisn)
|
||||
- [66f12c8](https://github.com/bcoe/yargs/commit/66f12c82ba3c943e4de8ca862980e835da8ecb3a) Fix a couple of bad interactions between aliases and defaults (@nylen)
|
||||
- [8fa1d80](https://github.com/bcoe/yargs/commit/8fa1d80f14b03eb1f2898863a61f1d1615bceb50) Document second argument of usage(message, opts) (@Gobie)
|
||||
- [56e6528](https://github.com/bcoe/yargs/commit/56e6528cf674ff70d63083fb044ff240f608448e) For "--some-option", also set argv.someOption (@nylen)
|
||||
- [ed5f6d3](https://github.com/bcoe/yargs/commit/ed5f6d33f57ad1086b11c91b51100f7c6c7fa8ee) Finished porting unit tests to Mocha. (@chevex)
|
||||
|
||||
### v1.0.15 (2014/02/05 23:18 +00:00)
|
||||
- [e2b1fc0](https://github.com/bcoe/yargs/commit/e2b1fc0c4a59cf532ae9b01b275e1ef57eeb64d2) 1.0.15 update to badges (@chevex)
|
||||
|
||||
### v1.0.14 (2014/02/05 23:17 +00:00)
|
||||
- [f33bbb0](https://github.com/bcoe/yargs/commit/f33bbb0f00fe18960f849cc8e15a7428a4cd59b8) Revert "Fixed issue which caused .demand function not to work correctly." (@chevex)
|
||||
|
||||
### v1.0.13 (2014/02/05 22:13 +00:00)
|
||||
- [6509e5e](https://github.com/bcoe/yargs/commit/6509e5e7dee6ef1a1f60eea104be0faa1a045075) Fixed issue which caused .demand function not to work correctly. (@chevex)
|
||||
|
||||
### v1.0.12 (2013/12/13 00:09 +00:00)
|
||||
- [05eb267](https://github.com/bcoe/yargs/commit/05eb26741c9ce446b33ff006e5d33221f53eaceb) 1.0.12 (@chevex)
|
||||
|
||||
### v1.0.11 (2013/12/13 00:07 +00:00)
|
||||
- [c1bde46](https://github.com/bcoe/yargs/commit/c1bde46e37318a68b87d17a50c130c861d6ce4a9) 1.0.11 (@chevex)
|
||||
|
||||
### v1.0.10 (2013/12/12 23:57 +00:00)
|
||||
- [dfebf81](https://github.com/bcoe/yargs/commit/dfebf8164c25c650701528ee581ca483a99dc21c) Fixed formatting in README (@chevex)
|
||||
|
||||
### v1.0.9 (2013/12/12 23:47 +00:00)
|
||||
- [0b4e34a](https://github.com/bcoe/yargs/commit/0b4e34af5e6d84a9dbb3bb6d02cd87588031c182) Update README.md (@chevex)
|
||||
|
||||
### v1.0.8 (2013/12/06 16:36 +00:00)
|
||||
- [#1](https://github.com/bcoe/yargs/pull/1) fix error caused by check() see #1 (@martinheidegger)
|
||||
|
||||
### v1.0.7 (2013/11/24 18:01 +00:00)
|
||||
- [a247d88](https://github.com/bcoe/yargs/commit/a247d88d6e46644cbb7303c18b1bb678fc132d72) Modified Pirate Joe image. (@chevex)
|
||||
|
||||
### v1.0.6 (2013/11/23 19:21 +00:00)
|
||||
- [d7f69e1](https://github.com/bcoe/yargs/commit/d7f69e1d34bc929736a8bdccdc724583e21b7eab) Updated Pirate Joe image. (@chevex)
|
||||
|
||||
### v1.0.5 (2013/11/23 19:09 +00:00)
|
||||
- [ece809c](https://github.com/bcoe/yargs/commit/ece809cf317cc659175e1d66d87f3ca68c2760be) Updated readme notice again. (@chevex)
|
||||
|
||||
### v1.0.4 (2013/11/23 19:05 +00:00)
|
||||
- [9e81e81](https://github.com/bcoe/yargs/commit/9e81e81654028f83ba86ffc3ac772a0476084e5e) Updated README with a notice about yargs being a fork of optimist and what that implies. (@chevex)
|
||||
|
||||
### v1.0.3 (2013/11/23 17:43 +00:00)
|
||||
- [65e7a78](https://github.com/bcoe/yargs/commit/65e7a782c86764944d63d084416aba9ee6019c5f) Changed some small wording in README.md. (@chevex)
|
||||
- [459e20e](https://github.com/bcoe/yargs/commit/459e20e539b366b85128dd281ccd42221e96c7da) Fix a bug in the options function, when string and boolean options weren't applied to aliases. (@shockone)
|
||||
|
||||
### v1.0.2 (2013/11/23 09:46 +00:00)
|
||||
- [3d80ebe](https://github.com/bcoe/yargs/commit/3d80ebed866d3799224b6f7d596247186a3898a9) 1.0.2 (@chevex)
|
||||
|
||||
### v1.0.1 (2013/11/23 09:39 +00:00)
|
||||
- [f80ff36](https://github.com/bcoe/yargs/commit/f80ff3642d580d4b68bf9f5a94277481bd027142) Updated image. (@chevex)
|
||||
|
||||
### v1.0.0 (2013/11/23 09:33 +00:00)
|
||||
- [54e31d5](https://github.com/bcoe/yargs/commit/54e31d505f820b80af13644e460894b320bf25a3) Rebranded from optimist to yargs in the spirit of the fork :D (@chevex)
|
||||
- [4ebb6c5](https://github.com/bcoe/yargs/commit/4ebb6c59f44787db7c24c5b8fe2680f01a23f498) Added documentation for demandCount(). (@chevex)
|
||||
- [4561ce6](https://github.com/bcoe/yargs/commit/4561ce66dcffa95f49e8b4449b25b94cd68acb25) Simplified the error messages returned by .check(). (@chevex)
|
||||
- [661c678](https://github.com/bcoe/yargs/commit/661c67886f479b16254a830b7e1db3be29e6b7a6) Fixed an issue with demand not accepting a zero value. (@chevex)
|
||||
- [731dd3c](https://github.com/bcoe/yargs/commit/731dd3c37624790490bd6df4d5f1da8f4348279e) Add .fail(fn) so death isn't the only option. Should fix issue #39. (@chevex)
|
||||
- [fa15417](https://github.com/bcoe/yargs/commit/fa15417ff9e70dace0d726627a5818654824c1d8) Added a few missing 'return self' (@chevex)
|
||||
- [e655e4d](https://github.com/bcoe/yargs/commit/e655e4d99d1ae1d3695ef755d51c2de08d669761) Fix showing help in certain JS environments. (@chevex)
|
||||
- [a746a31](https://github.com/bcoe/yargs/commit/a746a31cd47c87327028e6ea33762d6187ec5c87) Better string representation of default values. (@chevex)
|
||||
- [6134619](https://github.com/bcoe/yargs/commit/6134619a7e90b911d5443230b644c5d447c1a68c) Implies: conditional demands (@chevex)
|
||||
- [046b93b](https://github.com/bcoe/yargs/commit/046b93b5d40a27367af4cb29726e4d781d934639) Added support for JSON config files. (@chevex)
|
||||
- [a677ec0](https://github.com/bcoe/yargs/commit/a677ec0a0ecccd99c75e571d03323f950688da03) Add .example(cmd, desc) feature. (@chevex)
|
||||
- [1bd4375](https://github.com/bcoe/yargs/commit/1bd4375e11327ba1687d4bb6e5e9f3c30c1be2af) Added 'defaults' as alias to 'default' so as to avoid usage of a reserved keyword. (@chevex)
|
||||
- [6b753c1](https://github.com/bcoe/yargs/commit/6b753c16ca09e723060e70b773b430323b29c45c) add .normalize(args..) support for normalizing paths (@chevex)
|
||||
- [33d7d59](https://github.com/bcoe/yargs/commit/33d7d59341d364f03d3a25f0a55cb99004dbbe4b) Customize error messages with demand(key, msg) (@chevex)
|
||||
- [647d37f](https://github.com/bcoe/yargs/commit/647d37f164c20f4bafbf67dd9db6cd6e2cd3b49f) Merge branch 'rewrite-duplicate-test' of github.com:isbadawi/node-optimist (@chevex)
|
||||
- [9059d1a](https://github.com/bcoe/yargs/commit/9059d1ad5e8aea686c2a01c89a23efdf929fff2e) Pass aliases object to check functions for greater versatility. (@chevex)
|
||||
- [623dc26](https://github.com/bcoe/yargs/commit/623dc26c7331abff2465ef8532e3418996d42fe6) Added ability to count boolean options and rolled minimist library back into project. (@chevex)
|
||||
- [49f0dce](https://github.com/bcoe/yargs/commit/49f0dcef35de4db544c3966350d36eb5838703f6) Fixed small typo. (@chevex)
|
||||
- [79ec980](https://github.com/bcoe/yargs/commit/79ec9806d9ca6eb0014cfa4b6d1849f4f004baf2) Removed dependency on wordwrap module. (@chevex)
|
||||
- [ea14630](https://github.com/bcoe/yargs/commit/ea14630feddd69d1de99dd8c0e08948f4c91f00a) Merge branch 'master' of github.com:chbrown/node-optimist (@chevex)
|
||||
- [2b75da2](https://github.com/bcoe/yargs/commit/2b75da2624061e0f4f3107d20303c06ec9054906) Merge branch 'master' of github.com:seanzhou1023/node-optimist (@chevex)
|
||||
- [d9bda11](https://github.com/bcoe/yargs/commit/d9bda1116e26f3b40e833ca9ca19263afea53565) Merge branch 'patch-1' of github.com:thefourtheye/node-optimist (@chevex)
|
||||
- [d6cc606](https://github.com/bcoe/yargs/commit/d6cc6064a4f1bea38a16a4430b8a1334832fbeff) Renamed README. (@chevex)
|
||||
- [9498d3f](https://github.com/bcoe/yargs/commit/9498d3f59acfb5e102826503e681623c3a64b178) Renamed readme and added .gitignore. (@chevex)
|
||||
- [bbd1fe3](https://github.com/bcoe/yargs/commit/bbd1fe37fefa366dde0fb3dc44d91fe8b28f57f5) Included examples for ```help``` and ```showHelp``` functions and fixed few formatting issues (@thefourtheye)
|
||||
- [37fea04](https://github.com/bcoe/yargs/commit/37fea0470a5796a0294c1dcfff68d8041650e622) .alias({}) behaves differently based on mapping direction when generating descriptions (@chbrown)
|
||||
- [855b20d](https://github.com/bcoe/yargs/commit/855b20d0be567ca121d06b30bea64001b74f3d6d) Documented function signatures are useful for dynamically typed languages. (@chbrown)
|
||||
|
||||
### 0.6.0 (2013/06/25 08:48 +00:00)
|
||||
- [d37bfe0](https://github.com/bcoe/yargs/commit/d37bfe05ae6d295a0ab481efe4881222412791f4) all tests passing using minimist (@substack)
|
||||
- [76f1352](https://github.com/bcoe/yargs/commit/76f135270399d01f2bbc621e524a5966e5c422fd) all parse tests now passing (@substack)
|
||||
- [a7b6754](https://github.com/bcoe/yargs/commit/a7b6754276c38d1565479a5685c3781aeb947816) using minimist, some tests passing (@substack)
|
||||
- [6655688](https://github.com/bcoe/yargs/commit/66556882aa731cbbbe16cc4d42c85740a2e98099) Give credit where its due (@DeadAlready)
|
||||
- [602a2a9](https://github.com/bcoe/yargs/commit/602a2a92a459f93704794ad51b115bbb08b535ce) v0.5.3 - Remove wordwrap as dependency (@DeadAlready)
|
||||
|
||||
### 0.5.2 (2013/05/31 03:46 +00:00)
|
||||
- [4497ca5](https://github.com/bcoe/yargs/commit/4497ca55e332760a37b866ec119ded347ca27a87) fixed the whitespace bug without breaking anything else (@substack)
|
||||
- [5a3dd1a](https://github.com/bcoe/yargs/commit/5a3dd1a4e0211a38613c6e02f61328e1031953fa) failing test for whitespace arg (@substack)
|
||||
|
||||
### 0.5.1 (2013/05/30 07:17 +00:00)
|
||||
- [a20228f](https://github.com/bcoe/yargs/commit/a20228f62a454755dd07f628a7c5759113918327) fix parse() to work with functions before it (@substack)
|
||||
- [b13bd4c](https://github.com/bcoe/yargs/commit/b13bd4cac856a9821d42fa173bdb58f089365a7d) failing test for parse() with modifiers (@substack)
|
||||
|
||||
### 0.5.0 (2013/05/18 21:59 +00:00)
|
||||
- [c474a64](https://github.com/bcoe/yargs/commit/c474a649231527915c222156e3b40806d365a87c) fixes for dash (@substack)
|
||||
|
||||
### 0.4.0 (2013/04/13 19:03 +00:00)
|
||||
- [dafe3e1](https://github.com/bcoe/yargs/commit/dafe3e18d7c6e7c2d68e06559df0e5cbea3adb14) failing short test (@substack)
|
||||
|
||||
### 0.3.7 (2013/04/04 04:07 +00:00)
|
||||
- [6c7a0ec](https://github.com/bcoe/yargs/commit/6c7a0ec94ce4199a505f0518b4d6635d4e47cc81) Fix for windows. On windows there is no _ in environment. (@hdf)
|
||||
|
||||
### 0.3.6 (2013/04/04 04:04 +00:00)
|
||||
- [e72346a](https://github.com/bcoe/yargs/commit/e72346a727b7267af5aa008b418db89970873f05) Add support for newlines in -a="" arguments (@danielbeardsley)
|
||||
- [71e1fb5](https://github.com/bcoe/yargs/commit/71e1fb55ea9987110a669ac6ec12338cfff3821c) drop 0.4, add 0.8 to travis (@substack)
|
||||
|
||||
### 0.3.5 (2012/10/10 11:09 +00:00)
|
||||
- [ee692b3](https://github.com/bcoe/yargs/commit/ee692b37554c70a0bb16389a50a26b66745cbbea) Fix parsing booleans (@vojtajina)
|
||||
- [5045122](https://github.com/bcoe/yargs/commit/5045122664c3f5b4805addf1be2148d5856f7ce8) set $0 properly in the tests (@substack)
|
||||
|
||||
### 0.3.4 (2012/04/30 06:54 +00:00)
|
||||
- [f28c0e6](https://github.com/bcoe/yargs/commit/f28c0e62ca94f6e0bb2e6d82fc3d91a55e69b903) bump for string "true" params (@substack)
|
||||
- [8f44aeb](https://github.com/bcoe/yargs/commit/8f44aeb74121ddd689580e2bf74ef86a605e9bf2) Fix failing test for aliased booleans. (@coderarity)
|
||||
- [b9f7b61](https://github.com/bcoe/yargs/commit/b9f7b613b1e68e11e6c23fbda9e555a517dcc976) Add failing test for short aliased booleans. (@coderarity)
|
||||
|
||||
### 0.3.3 (2012/04/30 06:45 +00:00)
|
||||
- [541bac8](https://github.com/bcoe/yargs/commit/541bac8dd787a5f1a5d28f6d8deb1627871705e7) Fixes #37.
|
||||
|
||||
### 0.3.2 (2012/04/12 20:28 +00:00)
|
||||
- [3a0f014](https://github.com/bcoe/yargs/commit/3a0f014c1451280ac1c9caa1f639d31675586eec) travis badge (@substack)
|
||||
- [4fb60bf](https://github.com/bcoe/yargs/commit/4fb60bf17845f4ce3293f8ca49c9a1a7c736cfce) Fix boolean aliases. (@coderarity)
|
||||
- [f14dda5](https://github.com/bcoe/yargs/commit/f14dda546efc4fe06ace04d36919bfbb7634f79b) Adjusted package.json to use tap (@jfhbrook)
|
||||
- [88e5d32](https://github.com/bcoe/yargs/commit/88e5d32295be6e544c8d355ff84e355af38a1c74) test/usage.js no longer hangs (@jfhbrook)
|
||||
- [e1e740c](https://github.com/bcoe/yargs/commit/e1e740c27082f3ce84deca2093d9db2ef735d0e5) two tests for combined boolean/alias opts parsing (@jfhbrook)
|
||||
|
||||
### 0.3.1 (2011/12/31 08:44 +00:00)
|
||||
- [d09b719](https://github.com/bcoe/yargs/commit/d09b71980ef711b6cf3918cd19beec8257e40e82) If "default" is set to false it was not passed on, fixed. (@wolframkriesing)
|
||||
|
||||
### 0.3.0 (2011/12/09 06:03 +00:00)
|
||||
- [6e74aa7](https://github.com/bcoe/yargs/commit/6e74aa7b46a65773e20c0cb68d2d336d4a0d553d) bump and documented dot notation (@substack)
|
||||
|
||||
### 0.2.7 (2011/10/20 02:25 +00:00)
|
||||
- [94adee2](https://github.com/bcoe/yargs/commit/94adee20e17b58d0836f80e8b9cdbe9813800916) argv._ can be told 'Hey! argv._! Don't be messing with my args.', and it WILL obey (@colinta)
|
||||
- [c46fdd5](https://github.com/bcoe/yargs/commit/c46fdd56a05410ae4a1e724a4820c82e77ff5469) optimistic critter image (@substack)
|
||||
- [5c95c73](https://github.com/bcoe/yargs/commit/5c95c73aedf4c7482bd423e10c545e86d7c8a125) alias options() to option() (@substack)
|
||||
- [f7692ea](https://github.com/bcoe/yargs/commit/f7692ea8da342850af819367833abb685fde41d8) [fix] Fix for parsing boolean edge case (@indexzero)
|
||||
- [d1f92d1](https://github.com/bcoe/yargs/commit/d1f92d1425bd7f356055e78621b30cdf9741a3c2)
|
||||
- [b01bda8](https://github.com/bcoe/yargs/commit/b01bda8d86e455bbf74ce497864cb8ab5b9fb847) [fix test] Update to ensure optimist is aware of default booleans. Associated tests included (@indexzero)
|
||||
- [aa753e7](https://github.com/bcoe/yargs/commit/aa753e7c54fb3a12f513769a0ff6d54aa0f63943) [dist test] Update devDependencies in package.json. Update test pathing to be more npm and require.paths future-proof (@indexzero)
|
||||
- [7bfce2f](https://github.com/bcoe/yargs/commit/7bfce2f3b3c98e6539e7549d35fbabced7e9341e) s/sys/util/ (@substack)
|
||||
- [d420a7a](https://github.com/bcoe/yargs/commit/d420a7a9c890d2cdb11acfaf3ea3f43bc3e39f41) update usage output (@substack)
|
||||
- [cf86eed](https://github.com/bcoe/yargs/commit/cf86eede2e5fc7495b6ec15e6d137d9ac814f075) some sage readme protips about parsing rules (@substack)
|
||||
- [5da9f7a](https://github.com/bcoe/yargs/commit/5da9f7a5c0e1758ec7c5801fb3e94d3f6e970513) documented all the methods finally (@substack)
|
||||
- [8ca6879](https://github.com/bcoe/yargs/commit/8ca6879311224b25933642987300f6a29de5c21b) fenced syntax highlighting (@substack)
|
||||
- [b72bacf](https://github.com/bcoe/yargs/commit/b72bacf1d02594778c1935405bc8137eb61761dc) right-alignment of wrapped extra params (@substack)
|
||||
- [2b980bf](https://github.com/bcoe/yargs/commit/2b980bf2656b4ee8fc5134dc5f56a48855c35198) now with .wrap() (@substack)
|
||||
- [d614f63](https://github.com/bcoe/yargs/commit/d614f639654057d1b7e35e3f5a306e88ec2ad1e4) don't show 'Options:' when there aren't any (@substack)
|
||||
- [691eda3](https://github.com/bcoe/yargs/commit/691eda354df97b5a86168317abcbcaabdc08a0fb) failing test for multi-aliasing (@substack)
|
||||
- [0826c9f](https://github.com/bcoe/yargs/commit/0826c9f462109feab2bc7a99346d22e72bf774b7) "Options:" > "options:" (@substack)
|
||||
- [72f7490](https://github.com/bcoe/yargs/commit/72f749025d01b7f295738ed370a669d885fbada0) [minor] Update formatting for `.showHelp()` (@indexzero)
|
||||
- [75aecce](https://github.com/bcoe/yargs/commit/75aeccea74329094072f95800e02c275e7d999aa) options works again, too lazy to write a proper test right now (@substack)
|
||||
- [f742e54](https://github.com/bcoe/yargs/commit/f742e5439817c662dc3bd8734ddd6467e6018cfd) line_count_options example, which breaks (@substack)
|
||||
- [4ca06b8](https://github.com/bcoe/yargs/commit/4ca06b8b4ea99b5d5714b315a2a8576bee6e5537) line count example (@substack)
|
||||
- [eeb8423](https://github.com/bcoe/yargs/commit/eeb8423e0a5ecc9dc3eb1e6df9f3f8c1c88f920b) remove self.argv setting in boolean (@substack)
|
||||
- [6903412](https://github.com/bcoe/yargs/commit/69034126804660af9cc20ea7f4457b50338ee3d7) removed camel case for now (@substack)
|
||||
- [5a0d88b](https://github.com/bcoe/yargs/commit/5a0d88bf23e9fa79635dd034e2a1aa992acc83cd) remove dead longest checking code (@substack)
|
||||
- [d782170](https://github.com/bcoe/yargs/commit/d782170babf7284b1aa34f5350df0dd49c373fa8) .help() too (@substack)
|
||||
- [622ec17](https://github.com/bcoe/yargs/commit/622ec17379bb5374fdbb190404c82bc600975791) rm old help generator (@substack)
|
||||
- [7c8baac](https://github.com/bcoe/yargs/commit/7c8baac4d66195e9f5158503ea9ebfb61153dab7) nub keys (@substack)
|
||||
- [8197785](https://github.com/bcoe/yargs/commit/8197785ad4762465084485b041abd722f69bf344) generate help message based on the previous calls, todo: nub (@substack)
|
||||
- [3ffbdc3](https://github.com/bcoe/yargs/commit/3ffbdc33c8f5e83d4ea2ac60575ce119570c7ede) stub out new showHelp, better checks (@substack)
|
||||
- [d4e21f5](https://github.com/bcoe/yargs/commit/d4e21f56a4830f7de841900d3c79756fb9886184) let .options() take single options too (@substack)
|
||||
- [3c4cf29](https://github.com/bcoe/yargs/commit/3c4cf2901a29bac119cca8e983028d8669230ec6) .options() is now heaps simpler (@substack)
|
||||
- [89f0d04](https://github.com/bcoe/yargs/commit/89f0d043cbccd302f10ab30c2069e05d2bf817c9) defaults work again, all tests pass (@substack)
|
||||
- [dd87333](https://github.com/bcoe/yargs/commit/dd8733365423006a6e4156372ebb55f98323af58) update test error messages, down to 2 failing tests (@substack)
|
||||
- [53f7bc6](https://github.com/bcoe/yargs/commit/53f7bc626b9875f2abdfc5dd7a80bde7f14143a3) fix for bools doubling up, passes the parse test again, others fail (@substack)
|
||||
- [2213e2d](https://github.com/bcoe/yargs/commit/2213e2ddc7263226fba717fb041dc3fde9bc2ee4) refactored for an argv getter, failing several tests (@substack)
|
||||
- [d1e7379](https://github.com/bcoe/yargs/commit/d1e737970f15c6c006bebdd8917706827ff2f0f2) just rescan for now, alias test passes (@substack)
|
||||
- [b2f8c99](https://github.com/bcoe/yargs/commit/b2f8c99cc477a8eb0fdf4cf178e1785b63185cfd) failing alias test (@substack)
|
||||
- [d0c0174](https://github.com/bcoe/yargs/commit/d0c0174daa144bfb6dc7290fdc448c393c475e15) .alias() (@substack)
|
||||
- [d85f431](https://github.com/bcoe/yargs/commit/d85f431ad7d07b058af3f2a57daa51495576c164) [api] Remove `.describe()` in favor of building upon the existing `.usage()` API (@indexzero)
|
||||
- [edbd527](https://github.com/bcoe/yargs/commit/edbd5272a8e213e71acd802782135c7f9699913a) [doc api] Add `.describe()`, `.options()`, and `.showHelp()` methods along with example. (@indexzero)
|
||||
- [be4902f](https://github.com/bcoe/yargs/commit/be4902ff0961ae8feb9093f2c0a4066463ded2cf) updates for coffee since it now does argv the node way (@substack)
|
||||
- [e24cb23](https://github.com/bcoe/yargs/commit/e24cb23798ee64e53b60815e7fda78b87f42390c) more general coffeescript detection (@substack)
|
||||
- [78ac753](https://github.com/bcoe/yargs/commit/78ac753e5d0ec32a96d39d893272afe989e42a4d) Don't trigger the CoffeeScript hack when running under node_g. (@papandreou)
|
||||
- [bcfe973](https://github.com/bcoe/yargs/commit/bcfe9731d7f90d4632281b8a52e8d76eb0195ae6) .string() but failing test (@substack)
|
||||
- [1987aca](https://github.com/bcoe/yargs/commit/1987aca28c7ba4e8796c07bbc547cb984804c826) test hex strings (@substack)
|
||||
- [ef36db3](https://github.com/bcoe/yargs/commit/ef36db32259b0b0d62448dc907c760e5554fb7e7) more keywords (@substack)
|
||||
- [cc53c56](https://github.com/bcoe/yargs/commit/cc53c56329960bed6ab077a79798e991711ba01d) Added camelCase function that converts --multi-word-option to camel case (so it becomes argv.multiWordOption). (@papandreou)
|
||||
- [60b57da](https://github.com/bcoe/yargs/commit/60b57da36797716e5783a633c6d5c79099016d45) fixed boolean bug by rescanning (@substack)
|
||||
- [dff6d07](https://github.com/bcoe/yargs/commit/dff6d078d97f8ac503c7d18dcc7b7a8c364c2883) boolean examples (@substack)
|
||||
- [0e380b9](https://github.com/bcoe/yargs/commit/0e380b92c4ef4e3c8dac1da18b5c31d85b1d02c9) boolean() with passing test (@substack)
|
||||
- [62644d4](https://github.com/bcoe/yargs/commit/62644d4bffbb8d1bbf0c2baf58a1d14a6359ef07) coffee compatibility with node regex for versions too (@substack)
|
||||
- [430fafc](https://github.com/bcoe/yargs/commit/430fafcf1683d23774772826581acff84b456827) argv._ fixed by fixing the coffee detection (@substack)
|
||||
- [343b8af](https://github.com/bcoe/yargs/commit/343b8afefd98af274ebe21b5a16b3a949ec5429f) whichNodeArgs test fails too (@substack)
|
||||
- [63df2f3](https://github.com/bcoe/yargs/commit/63df2f371f31e63d7f1dec2cbf0022a5f08da9d2) replicated mnot's bug in whichNodeEmpty test (@substack)
|
||||
- [35473a4](https://github.com/bcoe/yargs/commit/35473a4d93a45e5e7e512af8bb54ebb532997ae1) test for ./bin usage (@substack)
|
||||
- [13df151](https://github.com/bcoe/yargs/commit/13df151e44228eed10e5441c7cd163e086c458a4) don't coerce booleans to numbers (@substack)
|
||||
- [85f8007](https://github.com/bcoe/yargs/commit/85f8007e93b8be7124feea64b1f1916d8ba1894a) package bump for automatic number conversion (@substack)
|
||||
- [8f17014](https://github.com/bcoe/yargs/commit/8f170141cded4ccc0c6d67a849c5bf996aa29643) updated readme and examples with new auto-numberification goodness (@substack)
|
||||
- [73dc901](https://github.com/bcoe/yargs/commit/73dc9011ac968e39b55e19e916084a839391b506) auto number conversion works yay (@substack)
|
||||
- [bcec56b](https://github.com/bcoe/yargs/commit/bcec56b3d031e018064cbb691539ccc4f28c14ad) failing test for not-implemented auto numification (@substack)
|
||||
- [ebd2844](https://github.com/bcoe/yargs/commit/ebd2844d683feeac583df79af0e5124a7a7db04e) odd that eql doesn't check types careflly (@substack)
|
||||
- [fd854b0](https://github.com/bcoe/yargs/commit/fd854b02e512ce854b76386d395672a7969c1bc4) package author + keywords (@substack)
|
||||
- [656a1d5](https://github.com/bcoe/yargs/commit/656a1d5a1b7c0e49d72e80cb13f20671d56f76c6) updated readme with .default() stuff (@substack)
|
||||
- [cd7f8c5](https://github.com/bcoe/yargs/commit/cd7f8c55f0b82b79b690d14c5f806851236998a1) passing tests for new .default() behavior (@substack)
|
||||
- [932725e](https://github.com/bcoe/yargs/commit/932725e39ce65bc91a0385a5fab659a5fa976ac2) new default() thing for setting default key/values (@substack)
|
||||
- [4e6c7ab](https://github.com/bcoe/yargs/commit/4e6c7aba6374ac9ebc6259ecf91f13af7bce40e3) test for coffee usage (@substack)
|
||||
- [d54ffcc](https://github.com/bcoe/yargs/commit/d54ffccf2a5a905f51ed5108f7c647f35d64ae23) new --key value style with passing tests. NOTE: changes existing behavior (@substack)
|
||||
- [ed2a2d5](https://github.com/bcoe/yargs/commit/ed2a2d5d828100ebeef6385c0fb88d146a5cfe9b) package bump for summatix's coffee script fix (@substack)
|
||||
- [75a975e](https://github.com/bcoe/yargs/commit/75a975eed8430d28e2a79dc9e6d819ad545f4587) Added support for CoffeeScript (@summatix)
|
||||
- [56b2b1d](https://github.com/bcoe/yargs/commit/56b2b1de8d11f8a2b91979d8ae2d6db02d8fe64d) test coverage for the falsy check() usage (@substack)
|
||||
- [a4843a9](https://github.com/bcoe/yargs/commit/a4843a9f0e69ffb4afdf6a671d89eb6f218be35d) check bug fixed plus a handy string (@substack)
|
||||
- [857bd2d](https://github.com/bcoe/yargs/commit/857bd2db933a5aaa9cfecba0ced2dc9b415f8111) tests for demandCount, back up to 100% coverage (@substack)
|
||||
- [073b776](https://github.com/bcoe/yargs/commit/073b7768ebd781668ef05c13f9003aceca2f5c35) call demandCount from demand (@substack)
|
||||
- [4bd4b7a](https://github.com/bcoe/yargs/commit/4bd4b7a085c8b6ce1d885a0f486cc9865cee2db1) add demandCount to check for the number of arguments in the _ list (@marshall)
|
||||
- [b8689ac](https://github.com/bcoe/yargs/commit/b8689ac68dacf248119d242bba39a41cb0adfa07) Rebase checks. That will be its own module eventually. (@substack)
|
||||
- [e688370](https://github.com/bcoe/yargs/commit/e688370b576f0aa733c3f46183df69e1b561668e) a $0 like in perl (@substack)
|
||||
- [2e5e196](https://github.com/bcoe/yargs/commit/2e5e1960fc19afb21fb3293752316eaa8bcd3609) usage test hacking around process and console (@substack)
|
||||
- [fcc3521](https://github.com/bcoe/yargs/commit/fcc352163fbec6a1dfe8caf47a0df39de24fe016) description pun (@substack)
|
||||
- [87a1fe2](https://github.com/bcoe/yargs/commit/87a1fe29037ca2ca5fefda85141aaeb13e8ce761) mit/x11 license (@substack)
|
||||
- [8d089d2](https://github.com/bcoe/yargs/commit/8d089d24cd687c0bde3640a96c09b78f884900dd) bool example is more consistent and also shows off short option grouping (@substack)
|
||||
- [448d747](https://github.com/bcoe/yargs/commit/448d7473ac68e8e03d8befc9457b0d9e21725be0) start of the readme and examples (@substack)
|
||||
- [da74dea](https://github.com/bcoe/yargs/commit/da74dea799a9b59dbf022cbb8001bfdb0d52eec9) more tests for long and short captures (@substack)
|
||||
- [ab6387e](https://github.com/bcoe/yargs/commit/ab6387e6769ca4af82ca94c4c67c7319f0d9fcfa) silly bug in the tests with s/not/no/, all tests pass now (@substack)
|
||||
- [102496a](https://github.com/bcoe/yargs/commit/102496a319e8e06f6550d828fc2f72992c7d9ecc) hack an instance for process.argv onto Argv so the export can be called to create an instance or used for argv, which is the most common case (@substack)
|
||||
- [a01caeb](https://github.com/bcoe/yargs/commit/a01caeb532546d19f68f2b2b87f7036cfe1aaedd) divide example (@substack)
|
||||
- [443da55](https://github.com/bcoe/yargs/commit/443da55736acbaf8ff8b04d1b9ce19ab016ddda2) start of the lib with a package.json (@substack)
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
Copyright 2010 James Halliday (mail@substack.net)
|
||||
Modified work Copyright 2014 Contributors (ben@npmjs.com)
|
||||
|
||||
This project is free software released under the MIT/X11 license:
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
+1674
File diff suppressed because it is too large
Load Diff
+28
@@ -0,0 +1,28 @@
|
||||
###-begin-{{app_name}}-completions-###
|
||||
#
|
||||
# yargs command completion script
|
||||
#
|
||||
# Installation: {{app_path}} completion >> ~/.bashrc
|
||||
# or {{app_path}} completion >> ~/.bash_profile on OSX.
|
||||
#
|
||||
_yargs_completions()
|
||||
{
|
||||
local cur_word args type_list
|
||||
|
||||
cur_word="${COMP_WORDS[COMP_CWORD]}"
|
||||
args=("${COMP_WORDS[@]}")
|
||||
|
||||
# ask yargs to generate completions.
|
||||
type_list=$({{app_path}} --get-yargs-completions "${args[@]}")
|
||||
|
||||
COMPREPLY=( $(compgen -W "${type_list}" -- ${cur_word}) )
|
||||
|
||||
# if no match was found, fall back to filename completion
|
||||
if [ ${#COMPREPLY[@]} -eq 0 ]; then
|
||||
COMPREPLY=( $(compgen -f -- "${cur_word}" ) )
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
complete -F _yargs_completions {{app_name}}
|
||||
###-end-{{app_name}}-completions-###
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
// classic singleton yargs API, to use yargs
|
||||
// without running as a singleton do:
|
||||
// require('yargs/yargs')(process.argv.slice(2))
|
||||
const yargs = require('./yargs')
|
||||
|
||||
Argv(process.argv.slice(2))
|
||||
|
||||
module.exports = Argv
|
||||
|
||||
function Argv (processArgs, cwd) {
|
||||
const argv = yargs(processArgs, cwd, require)
|
||||
singletonify(argv)
|
||||
return argv
|
||||
}
|
||||
|
||||
/* Hack an instance of Argv with process.argv into Argv
|
||||
so people can do
|
||||
require('yargs')(['--beeble=1','-z','zizzle']).argv
|
||||
to parse a list of args and
|
||||
require('yargs').argv
|
||||
to get a parsed version of process.argv.
|
||||
*/
|
||||
function singletonify (inst) {
|
||||
Object.keys(inst).forEach(function (key) {
|
||||
if (key === 'argv') {
|
||||
Argv.__defineGetter__(key, inst.__lookupGetter__(key))
|
||||
} else {
|
||||
Argv[key] = typeof inst[key] === 'function' ? inst[key].bind(inst) : inst[key]
|
||||
}
|
||||
})
|
||||
}
|
||||
+196
@@ -0,0 +1,196 @@
|
||||
const path = require('path')
|
||||
const inspect = require('util').inspect
|
||||
const requireDirectory = require('require-directory')
|
||||
const whichModule = require('which-module')
|
||||
|
||||
// handles parsing positional arguments,
|
||||
// and populating argv with said positional
|
||||
// arguments.
|
||||
module.exports = function (yargs, usage, validation) {
|
||||
const self = {}
|
||||
|
||||
var handlers = {}
|
||||
self.addHandler = function (cmd, description, builder, handler) {
|
||||
if (typeof cmd === 'object') {
|
||||
const commandString = typeof cmd.command === 'string' ? cmd.command : moduleName(cmd)
|
||||
self.addHandler(commandString, extractDesc(cmd), cmd.builder, cmd.handler)
|
||||
return
|
||||
}
|
||||
|
||||
// allow a module to be provided instead of separate builder and handler
|
||||
if (typeof builder === 'object' && builder.builder && typeof builder.handler === 'function') {
|
||||
self.addHandler(cmd, description, builder.builder, builder.handler)
|
||||
return
|
||||
}
|
||||
|
||||
if (description !== false) {
|
||||
usage.command(cmd, description)
|
||||
}
|
||||
|
||||
// we should not register a handler if no
|
||||
// builder is provided, e.g., user will
|
||||
// handle command themselves with '_'.
|
||||
var parsedCommand = parseCommand(cmd)
|
||||
handlers[parsedCommand.cmd] = {
|
||||
original: cmd,
|
||||
handler: handler,
|
||||
// TODO: default to a noop builder in
|
||||
// yargs@5.x
|
||||
builder: builder,
|
||||
demanded: parsedCommand.demanded,
|
||||
optional: parsedCommand.optional
|
||||
}
|
||||
}
|
||||
|
||||
self.addDirectory = function (dir, context, req, callerFile, opts) {
|
||||
opts = opts || {}
|
||||
// disable recursion to support nested directories of subcommands
|
||||
if (typeof opts.recurse !== 'boolean') opts.recurse = false
|
||||
// exclude 'json', 'coffee' from require-directory defaults
|
||||
if (!Array.isArray(opts.extensions)) opts.extensions = ['js']
|
||||
// allow consumer to define their own visitor function
|
||||
const parentVisit = typeof opts.visit === 'function' ? opts.visit : function (o) { return o }
|
||||
// call addHandler via visitor function
|
||||
opts.visit = function (obj, joined, filename) {
|
||||
const visited = parentVisit(obj, joined, filename)
|
||||
// allow consumer to skip modules with their own visitor
|
||||
if (visited) {
|
||||
// check for cyclic reference
|
||||
// each command file path should only be seen once per execution
|
||||
if (~context.files.indexOf(joined)) return visited
|
||||
// keep track of visited files in context.files
|
||||
context.files.push(joined)
|
||||
self.addHandler(visited)
|
||||
}
|
||||
return visited
|
||||
}
|
||||
requireDirectory({ require: req, filename: callerFile }, dir, opts)
|
||||
}
|
||||
|
||||
// lookup module object from require()d command and derive name
|
||||
// if module was not require()d and no name given, throw error
|
||||
function moduleName (obj) {
|
||||
const mod = whichModule(obj)
|
||||
if (!mod) throw new Error('No command name given for module: ' + inspect(obj))
|
||||
return commandFromFilename(mod.filename)
|
||||
}
|
||||
|
||||
// derive command name from filename
|
||||
function commandFromFilename (filename) {
|
||||
return path.basename(filename, path.extname(filename))
|
||||
}
|
||||
|
||||
function extractDesc (obj) {
|
||||
for (var keys = ['describe', 'description', 'desc'], i = 0, l = keys.length, test; i < l; i++) {
|
||||
test = obj[keys[i]]
|
||||
if (typeof test === 'string' || typeof test === 'boolean') return test
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
function parseCommand (cmd) {
|
||||
var splitCommand = cmd.split(/\s/)
|
||||
var bregex = /\.*[\][<>]/g
|
||||
var parsedCommand = {
|
||||
cmd: (splitCommand.shift()).replace(bregex, ''),
|
||||
demanded: [],
|
||||
optional: []
|
||||
}
|
||||
splitCommand.forEach(function (cmd, i) {
|
||||
var variadic = false
|
||||
if (/\.+[\]>]/.test(cmd) && i === splitCommand.length - 1) variadic = true
|
||||
if (/^\[/.test(cmd)) {
|
||||
parsedCommand.optional.push({
|
||||
cmd: cmd.replace(bregex, ''),
|
||||
variadic: variadic
|
||||
})
|
||||
} else {
|
||||
parsedCommand.demanded.push({
|
||||
cmd: cmd.replace(bregex, ''),
|
||||
variadic: variadic
|
||||
})
|
||||
}
|
||||
})
|
||||
return parsedCommand
|
||||
}
|
||||
|
||||
self.getCommands = function () {
|
||||
return Object.keys(handlers)
|
||||
}
|
||||
|
||||
self.getCommandHandlers = function () {
|
||||
return handlers
|
||||
}
|
||||
|
||||
self.runCommand = function (command, yargs, parsed) {
|
||||
var argv = parsed.argv
|
||||
var commandHandler = handlers[command]
|
||||
var innerArgv = argv
|
||||
var currentContext = yargs.getContext()
|
||||
var parentCommands = currentContext.commands.slice()
|
||||
currentContext.commands.push(command)
|
||||
if (commandHandler.builder && typeof commandHandler.builder === 'function') {
|
||||
// a function can be provided, which interacts which builds
|
||||
// up a yargs chain and returns it.
|
||||
innerArgv = commandHandler.builder(yargs.reset(parsed.aliases))
|
||||
// if the builder function did not yet parse argv with reset yargs
|
||||
// and did not explicitly set a usage() string, then apply the
|
||||
// original command string as usage() for consistent behavior with
|
||||
// options object below
|
||||
if (yargs.parsed === false && typeof yargs.getUsageInstance().getUsage() === 'undefined') {
|
||||
yargs.usage('$0 ' + (parentCommands.length ? parentCommands.join(' ') + ' ' : '') + commandHandler.original)
|
||||
}
|
||||
innerArgv = innerArgv ? innerArgv.argv : argv
|
||||
} else if (commandHandler.builder && typeof commandHandler.builder === 'object') {
|
||||
// as a short hand, an object can instead be provided, specifying
|
||||
// the options that a command takes.
|
||||
innerArgv = yargs.reset(parsed.aliases)
|
||||
innerArgv.usage('$0 ' + (parentCommands.length ? parentCommands.join(' ') + ' ' : '') + commandHandler.original)
|
||||
Object.keys(commandHandler.builder).forEach(function (key) {
|
||||
innerArgv.option(key, commandHandler.builder[key])
|
||||
})
|
||||
innerArgv = innerArgv.argv
|
||||
}
|
||||
|
||||
populatePositional(commandHandler, innerArgv, currentContext)
|
||||
|
||||
if (commandHandler.handler) {
|
||||
commandHandler.handler(innerArgv)
|
||||
}
|
||||
currentContext.commands.pop()
|
||||
return innerArgv
|
||||
}
|
||||
|
||||
function populatePositional (commandHandler, argv, context) {
|
||||
argv._ = argv._.slice(context.commands.length) // nuke the current commands
|
||||
var demanded = commandHandler.demanded.slice(0)
|
||||
var optional = commandHandler.optional.slice(0)
|
||||
|
||||
validation.positionalCount(demanded.length, argv._.length)
|
||||
|
||||
while (demanded.length) {
|
||||
var demand = demanded.shift()
|
||||
if (demand.variadic) argv[demand.cmd] = []
|
||||
if (!argv._.length) break
|
||||
if (demand.variadic) argv[demand.cmd] = argv._.splice(0)
|
||||
else argv[demand.cmd] = argv._.shift()
|
||||
}
|
||||
|
||||
while (optional.length) {
|
||||
var maybe = optional.shift()
|
||||
if (maybe.variadic) argv[maybe.cmd] = []
|
||||
if (!argv._.length) break
|
||||
if (maybe.variadic) argv[maybe.cmd] = argv._.splice(0)
|
||||
else argv[maybe.cmd] = argv._.shift()
|
||||
}
|
||||
|
||||
argv._ = context.commands.concat(argv._)
|
||||
}
|
||||
|
||||
self.reset = function () {
|
||||
handlers = {}
|
||||
return self
|
||||
}
|
||||
|
||||
return self
|
||||
}
|
||||
+99
@@ -0,0 +1,99 @@
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
|
||||
// add bash completions to your
|
||||
// yargs-powered applications.
|
||||
module.exports = function (yargs, usage, command) {
|
||||
const self = {
|
||||
completionKey: 'get-yargs-completions'
|
||||
}
|
||||
|
||||
// get a list of completion commands.
|
||||
// 'args' is the array of strings from the line to be completed
|
||||
self.getCompletion = function (args, done) {
|
||||
const completions = []
|
||||
const current = args.length ? args[args.length - 1] : ''
|
||||
const argv = yargs.parse(args, true)
|
||||
const aliases = yargs.parsed.aliases
|
||||
|
||||
// a custom completion function can be provided
|
||||
// to completion().
|
||||
if (completionFunction) {
|
||||
if (completionFunction.length < 3) {
|
||||
var result = completionFunction(current, argv)
|
||||
|
||||
// promise based completion function.
|
||||
if (typeof result.then === 'function') {
|
||||
return result.then(function (list) {
|
||||
process.nextTick(function () { done(list) })
|
||||
}).catch(function (err) {
|
||||
process.nextTick(function () { throw err })
|
||||
})
|
||||
}
|
||||
|
||||
// synchronous completion function.
|
||||
return done(result)
|
||||
} else {
|
||||
// asynchronous completion function
|
||||
return completionFunction(current, argv, function (completions) {
|
||||
done(completions)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
var handlers = command.getCommandHandlers()
|
||||
for (var i = 0, ii = args.length; i < ii; ++i) {
|
||||
if (handlers[args[i]] && handlers[args[i]].builder) {
|
||||
return handlers[args[i]].builder(yargs.reset()).argv
|
||||
}
|
||||
}
|
||||
|
||||
if (!current.match(/^-/)) {
|
||||
usage.getCommands().forEach(function (command) {
|
||||
if (args.indexOf(command[0]) === -1) {
|
||||
completions.push(command[0])
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
if (current.match(/^-/)) {
|
||||
Object.keys(yargs.getOptions().key).forEach(function (key) {
|
||||
// If the key and its aliases aren't in 'args', add the key to 'completions'
|
||||
var keyAndAliases = [key].concat(aliases[key] || [])
|
||||
var notInArgs = keyAndAliases.every(function (val) {
|
||||
return args.indexOf('--' + val) === -1
|
||||
})
|
||||
if (notInArgs) {
|
||||
completions.push('--' + key)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
done(completions)
|
||||
}
|
||||
|
||||
// generate the completion script to add to your .bashrc.
|
||||
self.generateCompletionScript = function ($0) {
|
||||
var script = fs.readFileSync(
|
||||
path.resolve(__dirname, '../completion.sh.hbs'),
|
||||
'utf-8'
|
||||
)
|
||||
var name = path.basename($0)
|
||||
|
||||
// add ./to applications not yet installed as bin.
|
||||
if ($0.match(/\.js$/)) $0 = './' + $0
|
||||
|
||||
script = script.replace(/{{app_name}}/g, name)
|
||||
return script.replace(/{{app_path}}/g, $0)
|
||||
}
|
||||
|
||||
// register a function to perform your own custom
|
||||
// completions., this function can be either
|
||||
// synchrnous or asynchronous.
|
||||
var completionFunction = null
|
||||
self.registerFunction = function (fn) {
|
||||
completionFunction = fn
|
||||
}
|
||||
|
||||
return self
|
||||
}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
module.exports = function (original, filter) {
|
||||
const obj = {}
|
||||
filter = filter || function (k, v) { return true }
|
||||
Object.keys(original || {}).forEach(function (key) {
|
||||
if (filter(key, original[key])) {
|
||||
obj[key] = original[key]
|
||||
}
|
||||
})
|
||||
return obj
|
||||
}
|
||||
+408
@@ -0,0 +1,408 @@
|
||||
// this file handles outputting usage instructions,
|
||||
// failures, etc. keeps logging in one place.
|
||||
const cliui = require('cliui')
|
||||
const decamelize = require('decamelize')
|
||||
const stringWidth = require('string-width')
|
||||
const wsize = require('window-size')
|
||||
const objFilter = require('./obj-filter')
|
||||
const setBlocking = require('set-blocking')
|
||||
|
||||
module.exports = function (yargs, y18n) {
|
||||
const __ = y18n.__
|
||||
const self = {}
|
||||
|
||||
// methods for ouputting/building failure message.
|
||||
var fails = []
|
||||
self.failFn = function (f) {
|
||||
fails.push(f)
|
||||
}
|
||||
|
||||
var failMessage = null
|
||||
var showHelpOnFail = true
|
||||
self.showHelpOnFail = function (enabled, message) {
|
||||
if (typeof enabled === 'string') {
|
||||
message = enabled
|
||||
enabled = true
|
||||
} else if (typeof enabled === 'undefined') {
|
||||
enabled = true
|
||||
}
|
||||
failMessage = message
|
||||
showHelpOnFail = enabled
|
||||
return self
|
||||
}
|
||||
|
||||
var failureOutput = false
|
||||
self.fail = function (msg, err) {
|
||||
if (fails.length) {
|
||||
fails.forEach(function (f) {
|
||||
f(msg, err)
|
||||
})
|
||||
} else {
|
||||
if (yargs.getExitProcess()) setBlocking(true)
|
||||
|
||||
// don't output failure message more than once
|
||||
if (!failureOutput) {
|
||||
failureOutput = true
|
||||
if (showHelpOnFail) yargs.showHelp('error')
|
||||
if (msg) console.error(msg)
|
||||
if (failMessage) {
|
||||
if (msg) console.error('')
|
||||
console.error(failMessage)
|
||||
}
|
||||
}
|
||||
if (yargs.getExitProcess()) {
|
||||
process.exit(1)
|
||||
} else {
|
||||
throw err || new Error(msg)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// methods for ouputting/building help (usage) message.
|
||||
var usage
|
||||
self.usage = function (msg) {
|
||||
usage = msg
|
||||
}
|
||||
self.getUsage = function () {
|
||||
return usage
|
||||
}
|
||||
|
||||
var examples = []
|
||||
self.example = function (cmd, description) {
|
||||
examples.push([cmd, description || ''])
|
||||
}
|
||||
|
||||
var commands = []
|
||||
self.command = function (cmd, description) {
|
||||
commands.push([cmd, description || ''])
|
||||
}
|
||||
self.getCommands = function () {
|
||||
return commands
|
||||
}
|
||||
|
||||
var descriptions = {}
|
||||
self.describe = function (key, desc) {
|
||||
if (typeof key === 'object') {
|
||||
Object.keys(key).forEach(function (k) {
|
||||
self.describe(k, key[k])
|
||||
})
|
||||
} else {
|
||||
descriptions[key] = desc
|
||||
}
|
||||
}
|
||||
self.getDescriptions = function () {
|
||||
return descriptions
|
||||
}
|
||||
|
||||
var epilog
|
||||
self.epilog = function (msg) {
|
||||
epilog = msg
|
||||
}
|
||||
|
||||
var wrap = windowWidth()
|
||||
self.wrap = function (cols) {
|
||||
wrap = cols
|
||||
}
|
||||
|
||||
var deferY18nLookupPrefix = '__yargsString__:'
|
||||
self.deferY18nLookup = function (str) {
|
||||
return deferY18nLookupPrefix + str
|
||||
}
|
||||
|
||||
var defaultGroup = 'Options:'
|
||||
self.help = function () {
|
||||
normalizeAliases()
|
||||
|
||||
var demanded = yargs.getDemanded()
|
||||
var groups = yargs.getGroups()
|
||||
var options = yargs.getOptions()
|
||||
var keys = Object.keys(
|
||||
Object.keys(descriptions)
|
||||
.concat(Object.keys(demanded))
|
||||
.concat(Object.keys(options.default))
|
||||
.reduce(function (acc, key) {
|
||||
if (key !== '_') acc[key] = true
|
||||
return acc
|
||||
}, {})
|
||||
)
|
||||
var ui = cliui({
|
||||
width: wrap,
|
||||
wrap: !!wrap
|
||||
})
|
||||
|
||||
// the usage string.
|
||||
if (usage) {
|
||||
var u = usage.replace(/\$0/g, yargs.$0)
|
||||
ui.div(u + '\n')
|
||||
}
|
||||
|
||||
// your application's commands, i.e., non-option
|
||||
// arguments populated in '_'.
|
||||
if (commands.length) {
|
||||
ui.div(__('Commands:'))
|
||||
|
||||
commands.forEach(function (command) {
|
||||
ui.div(
|
||||
{text: command[0], padding: [0, 2, 0, 2], width: maxWidth(commands) + 4},
|
||||
{text: command[1]}
|
||||
)
|
||||
})
|
||||
|
||||
ui.div()
|
||||
}
|
||||
|
||||
// perform some cleanup on the keys array, making it
|
||||
// only include top-level keys not their aliases.
|
||||
var aliasKeys = (Object.keys(options.alias) || [])
|
||||
.concat(Object.keys(yargs.parsed.newAliases) || [])
|
||||
|
||||
keys = keys.filter(function (key) {
|
||||
return !yargs.parsed.newAliases[key] && aliasKeys.every(function (alias) {
|
||||
return (options.alias[alias] || []).indexOf(key) === -1
|
||||
})
|
||||
})
|
||||
|
||||
// populate 'Options:' group with any keys that have not
|
||||
// explicitly had a group set.
|
||||
if (!groups[defaultGroup]) groups[defaultGroup] = []
|
||||
addUngroupedKeys(keys, options.alias, groups)
|
||||
|
||||
// display 'Options:' table along with any custom tables:
|
||||
Object.keys(groups).forEach(function (groupName) {
|
||||
if (!groups[groupName].length) return
|
||||
|
||||
ui.div(__(groupName))
|
||||
|
||||
// if we've grouped the key 'f', but 'f' aliases 'foobar',
|
||||
// normalizedKeys should contain only 'foobar'.
|
||||
var normalizedKeys = groups[groupName].map(function (key) {
|
||||
if (~aliasKeys.indexOf(key)) return key
|
||||
for (var i = 0, aliasKey; (aliasKey = aliasKeys[i]) !== undefined; i++) {
|
||||
if (~(options.alias[aliasKey] || []).indexOf(key)) return aliasKey
|
||||
}
|
||||
return key
|
||||
})
|
||||
|
||||
// actually generate the switches string --foo, -f, --bar.
|
||||
var switches = normalizedKeys.reduce(function (acc, key) {
|
||||
acc[key] = [ key ].concat(options.alias[key] || [])
|
||||
.map(function (sw) {
|
||||
return (sw.length > 1 ? '--' : '-') + sw
|
||||
})
|
||||
.join(', ')
|
||||
|
||||
return acc
|
||||
}, {})
|
||||
|
||||
normalizedKeys.forEach(function (key) {
|
||||
var kswitch = switches[key]
|
||||
var desc = descriptions[key] || ''
|
||||
var type = null
|
||||
|
||||
if (~desc.lastIndexOf(deferY18nLookupPrefix)) desc = __(desc.substring(deferY18nLookupPrefix.length))
|
||||
|
||||
if (~options.boolean.indexOf(key)) type = '[' + __('boolean') + ']'
|
||||
if (~options.count.indexOf(key)) type = '[' + __('count') + ']'
|
||||
if (~options.string.indexOf(key)) type = '[' + __('string') + ']'
|
||||
if (~options.normalize.indexOf(key)) type = '[' + __('string') + ']'
|
||||
if (~options.array.indexOf(key)) type = '[' + __('array') + ']'
|
||||
if (~options.number.indexOf(key)) type = '[' + __('number') + ']'
|
||||
|
||||
var extra = [
|
||||
type,
|
||||
demanded[key] ? '[' + __('required') + ']' : null,
|
||||
options.choices && options.choices[key] ? '[' + __('choices:') + ' ' +
|
||||
self.stringifiedValues(options.choices[key]) + ']' : null,
|
||||
defaultString(options.default[key], options.defaultDescription[key])
|
||||
].filter(Boolean).join(' ')
|
||||
|
||||
ui.span(
|
||||
{text: kswitch, padding: [0, 2, 0, 2], width: maxWidth(switches) + 4},
|
||||
desc
|
||||
)
|
||||
|
||||
if (extra) ui.div({text: extra, padding: [0, 0, 0, 2], align: 'right'})
|
||||
else ui.div()
|
||||
})
|
||||
|
||||
ui.div()
|
||||
})
|
||||
|
||||
// describe some common use-cases for your application.
|
||||
if (examples.length) {
|
||||
ui.div(__('Examples:'))
|
||||
|
||||
examples.forEach(function (example) {
|
||||
example[0] = example[0].replace(/\$0/g, yargs.$0)
|
||||
})
|
||||
|
||||
examples.forEach(function (example) {
|
||||
ui.div(
|
||||
{text: example[0], padding: [0, 2, 0, 2], width: maxWidth(examples) + 4},
|
||||
example[1]
|
||||
)
|
||||
})
|
||||
|
||||
ui.div()
|
||||
}
|
||||
|
||||
// the usage string.
|
||||
if (epilog) {
|
||||
var e = epilog.replace(/\$0/g, yargs.$0)
|
||||
ui.div(e + '\n')
|
||||
}
|
||||
|
||||
return ui.toString()
|
||||
}
|
||||
|
||||
// return the maximum width of a string
|
||||
// in the left-hand column of a table.
|
||||
function maxWidth (table) {
|
||||
var width = 0
|
||||
|
||||
// table might be of the form [leftColumn],
|
||||
// or {key: leftColumn}}
|
||||
if (!Array.isArray(table)) {
|
||||
table = Object.keys(table).map(function (key) {
|
||||
return [table[key]]
|
||||
})
|
||||
}
|
||||
|
||||
table.forEach(function (v) {
|
||||
width = Math.max(stringWidth(v[0]), width)
|
||||
})
|
||||
|
||||
// if we've enabled 'wrap' we should limit
|
||||
// the max-width of the left-column.
|
||||
if (wrap) width = Math.min(width, parseInt(wrap * 0.5, 10))
|
||||
|
||||
return width
|
||||
}
|
||||
|
||||
// make sure any options set for aliases,
|
||||
// are copied to the keys being aliased.
|
||||
function normalizeAliases () {
|
||||
var demanded = yargs.getDemanded()
|
||||
var options = yargs.getOptions()
|
||||
|
||||
;(Object.keys(options.alias) || []).forEach(function (key) {
|
||||
options.alias[key].forEach(function (alias) {
|
||||
// copy descriptions.
|
||||
if (descriptions[alias]) self.describe(key, descriptions[alias])
|
||||
// copy demanded.
|
||||
if (demanded[alias]) yargs.demand(key, demanded[alias].msg)
|
||||
// type messages.
|
||||
if (~options.boolean.indexOf(alias)) yargs.boolean(key)
|
||||
if (~options.count.indexOf(alias)) yargs.count(key)
|
||||
if (~options.string.indexOf(alias)) yargs.string(key)
|
||||
if (~options.normalize.indexOf(alias)) yargs.normalize(key)
|
||||
if (~options.array.indexOf(alias)) yargs.array(key)
|
||||
if (~options.number.indexOf(alias)) yargs.number(key)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// given a set of keys, place any keys that are
|
||||
// ungrouped under the 'Options:' grouping.
|
||||
function addUngroupedKeys (keys, aliases, groups) {
|
||||
var groupedKeys = []
|
||||
var toCheck = null
|
||||
Object.keys(groups).forEach(function (group) {
|
||||
groupedKeys = groupedKeys.concat(groups[group])
|
||||
})
|
||||
|
||||
keys.forEach(function (key) {
|
||||
toCheck = [key].concat(aliases[key])
|
||||
if (!toCheck.some(function (k) {
|
||||
return groupedKeys.indexOf(k) !== -1
|
||||
})) {
|
||||
groups[defaultGroup].push(key)
|
||||
}
|
||||
})
|
||||
return groupedKeys
|
||||
}
|
||||
|
||||
self.showHelp = function (level) {
|
||||
if (!level) level = 'error'
|
||||
var emit = typeof level === 'function' ? level : console[ level ]
|
||||
emit(self.help())
|
||||
}
|
||||
|
||||
self.functionDescription = function (fn) {
|
||||
var description = fn.name ? decamelize(fn.name, '-') : __('generated-value')
|
||||
return ['(', description, ')'].join('')
|
||||
}
|
||||
|
||||
self.stringifiedValues = function (values, separator) {
|
||||
var string = ''
|
||||
var sep = separator || ', '
|
||||
var array = [].concat(values)
|
||||
|
||||
if (!values || !array.length) return string
|
||||
|
||||
array.forEach(function (value) {
|
||||
if (string.length) string += sep
|
||||
string += JSON.stringify(value)
|
||||
})
|
||||
|
||||
return string
|
||||
}
|
||||
|
||||
// format the default-value-string displayed in
|
||||
// the right-hand column.
|
||||
function defaultString (value, defaultDescription) {
|
||||
var string = '[' + __('default:') + ' '
|
||||
|
||||
if (value === undefined && !defaultDescription) return null
|
||||
|
||||
if (defaultDescription) {
|
||||
string += defaultDescription
|
||||
} else {
|
||||
switch (typeof value) {
|
||||
case 'string':
|
||||
string += JSON.stringify(value)
|
||||
break
|
||||
case 'object':
|
||||
string += JSON.stringify(value)
|
||||
break
|
||||
default:
|
||||
string += value
|
||||
}
|
||||
}
|
||||
|
||||
return string + ']'
|
||||
}
|
||||
|
||||
// guess the width of the console window, max-width 80.
|
||||
function windowWidth () {
|
||||
return wsize.width ? Math.min(80, wsize.width) : null
|
||||
}
|
||||
|
||||
// logic for displaying application version.
|
||||
var version = null
|
||||
self.version = function (ver) {
|
||||
version = ver
|
||||
}
|
||||
|
||||
self.showVersion = function () {
|
||||
if (typeof version === 'function') console.log(version())
|
||||
else console.log(version)
|
||||
}
|
||||
|
||||
self.reset = function (globalLookup) {
|
||||
// do not reset wrap here
|
||||
fails = []
|
||||
failMessage = null
|
||||
failureOutput = false
|
||||
usage = undefined
|
||||
epilog = undefined
|
||||
examples = []
|
||||
commands = []
|
||||
descriptions = objFilter(descriptions, function (k, v) {
|
||||
return globalLookup[k]
|
||||
})
|
||||
return self
|
||||
}
|
||||
|
||||
return self
|
||||
}
|
||||
+285
@@ -0,0 +1,285 @@
|
||||
const objFilter = require('./obj-filter')
|
||||
|
||||
// validation-type-stuff, missing params,
|
||||
// bad implications, custom checks.
|
||||
module.exports = function (yargs, usage, y18n) {
|
||||
const __ = y18n.__
|
||||
const __n = y18n.__n
|
||||
const self = {}
|
||||
|
||||
// validate appropriate # of non-option
|
||||
// arguments were provided, i.e., '_'.
|
||||
self.nonOptionCount = function (argv) {
|
||||
const demanded = yargs.getDemanded()
|
||||
const _s = argv._.length
|
||||
|
||||
if (demanded._ && (_s < demanded._.count || _s > demanded._.max)) {
|
||||
if (demanded._.msg !== undefined) {
|
||||
usage.fail(demanded._.msg)
|
||||
} else if (_s < demanded._.count) {
|
||||
usage.fail(
|
||||
__('Not enough non-option arguments: got %s, need at least %s', argv._.length, demanded._.count)
|
||||
)
|
||||
} else {
|
||||
usage.fail(
|
||||
__('Too many non-option arguments: got %s, maximum of %s', argv._.length, demanded._.max)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// validate the appropriate # of <required>
|
||||
// positional arguments were provided:
|
||||
self.positionalCount = function (required, observed) {
|
||||
if (observed < required) {
|
||||
usage.fail(
|
||||
__('Not enough non-option arguments: got %s, need at least %s', observed, required)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// make sure that any args that require an
|
||||
// value (--foo=bar), have a value.
|
||||
self.missingArgumentValue = function (argv) {
|
||||
const defaultValues = [true, false, '']
|
||||
const options = yargs.getOptions()
|
||||
|
||||
if (options.requiresArg.length > 0) {
|
||||
const missingRequiredArgs = []
|
||||
|
||||
options.requiresArg.forEach(function (key) {
|
||||
const value = argv[key]
|
||||
|
||||
// if a value is explicitly requested,
|
||||
// flag argument as missing if it does not
|
||||
// look like foo=bar was entered.
|
||||
if (~defaultValues.indexOf(value) ||
|
||||
(Array.isArray(value) && !value.length)) {
|
||||
missingRequiredArgs.push(key)
|
||||
}
|
||||
})
|
||||
|
||||
if (missingRequiredArgs.length > 0) {
|
||||
usage.fail(__n(
|
||||
'Missing argument value: %s',
|
||||
'Missing argument values: %s',
|
||||
missingRequiredArgs.length,
|
||||
missingRequiredArgs.join(', ')
|
||||
))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// make sure all the required arguments are present.
|
||||
self.requiredArguments = function (argv) {
|
||||
const demanded = yargs.getDemanded()
|
||||
var missing = null
|
||||
|
||||
Object.keys(demanded).forEach(function (key) {
|
||||
if (!argv.hasOwnProperty(key)) {
|
||||
missing = missing || {}
|
||||
missing[key] = demanded[key]
|
||||
}
|
||||
})
|
||||
|
||||
if (missing) {
|
||||
const customMsgs = []
|
||||
Object.keys(missing).forEach(function (key) {
|
||||
const msg = missing[key].msg
|
||||
if (msg && customMsgs.indexOf(msg) < 0) {
|
||||
customMsgs.push(msg)
|
||||
}
|
||||
})
|
||||
|
||||
const customMsg = customMsgs.length ? '\n' + customMsgs.join('\n') : ''
|
||||
|
||||
usage.fail(__n(
|
||||
'Missing required argument: %s',
|
||||
'Missing required arguments: %s',
|
||||
Object.keys(missing).length,
|
||||
Object.keys(missing).join(', ') + customMsg
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
// check for unknown arguments (strict-mode).
|
||||
self.unknownArguments = function (argv, aliases) {
|
||||
const aliasLookup = {}
|
||||
const descriptions = usage.getDescriptions()
|
||||
const demanded = yargs.getDemanded()
|
||||
const commandKeys = yargs.getCommandInstance().getCommands()
|
||||
const unknown = []
|
||||
const currentContext = yargs.getContext()
|
||||
|
||||
Object.keys(aliases).forEach(function (key) {
|
||||
aliases[key].forEach(function (alias) {
|
||||
aliasLookup[alias] = key
|
||||
})
|
||||
})
|
||||
|
||||
Object.keys(argv).forEach(function (key) {
|
||||
if (key !== '$0' && key !== '_' &&
|
||||
!descriptions.hasOwnProperty(key) &&
|
||||
!demanded.hasOwnProperty(key) &&
|
||||
!aliasLookup.hasOwnProperty(key)) {
|
||||
unknown.push(key)
|
||||
}
|
||||
})
|
||||
|
||||
if (commandKeys.length > 0) {
|
||||
argv._.slice(currentContext.commands.length).forEach(function (key) {
|
||||
if (commandKeys.indexOf(key) === -1) {
|
||||
unknown.push(key)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
if (unknown.length > 0) {
|
||||
usage.fail(__n(
|
||||
'Unknown argument: %s',
|
||||
'Unknown arguments: %s',
|
||||
unknown.length,
|
||||
unknown.join(', ')
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
// validate arguments limited to enumerated choices
|
||||
self.limitedChoices = function (argv) {
|
||||
const options = yargs.getOptions()
|
||||
const invalid = {}
|
||||
|
||||
if (!Object.keys(options.choices).length) return
|
||||
|
||||
Object.keys(argv).forEach(function (key) {
|
||||
if (key !== '$0' && key !== '_' &&
|
||||
options.choices.hasOwnProperty(key)) {
|
||||
[].concat(argv[key]).forEach(function (value) {
|
||||
// TODO case-insensitive configurability
|
||||
if (options.choices[key].indexOf(value) === -1) {
|
||||
invalid[key] = (invalid[key] || []).concat(value)
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
const invalidKeys = Object.keys(invalid)
|
||||
|
||||
if (!invalidKeys.length) return
|
||||
|
||||
var msg = __('Invalid values:')
|
||||
invalidKeys.forEach(function (key) {
|
||||
msg += '\n ' + __(
|
||||
'Argument: %s, Given: %s, Choices: %s',
|
||||
key,
|
||||
usage.stringifiedValues(invalid[key]),
|
||||
usage.stringifiedValues(options.choices[key])
|
||||
)
|
||||
})
|
||||
usage.fail(msg)
|
||||
}
|
||||
|
||||
// custom checks, added using the `check` option on yargs.
|
||||
var checks = []
|
||||
self.check = function (f) {
|
||||
checks.push(f)
|
||||
}
|
||||
|
||||
self.customChecks = function (argv, aliases) {
|
||||
checks.forEach(function (f) {
|
||||
try {
|
||||
const result = f(argv, aliases)
|
||||
if (!result) {
|
||||
usage.fail(__('Argument check failed: %s', f.toString()))
|
||||
} else if (typeof result === 'string') {
|
||||
usage.fail(result)
|
||||
}
|
||||
} catch (err) {
|
||||
usage.fail(err.message ? err.message : err, err)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// check implications, argument foo implies => argument bar.
|
||||
var implied = {}
|
||||
self.implies = function (key, value) {
|
||||
if (typeof key === 'object') {
|
||||
Object.keys(key).forEach(function (k) {
|
||||
self.implies(k, key[k])
|
||||
})
|
||||
} else {
|
||||
implied[key] = value
|
||||
}
|
||||
}
|
||||
self.getImplied = function () {
|
||||
return implied
|
||||
}
|
||||
|
||||
self.implications = function (argv) {
|
||||
const implyFail = []
|
||||
|
||||
Object.keys(implied).forEach(function (key) {
|
||||
var booleanNegation
|
||||
if (yargs.getOptions().configuration['boolean-negation'] === false) {
|
||||
booleanNegation = false
|
||||
} else {
|
||||
booleanNegation = true
|
||||
}
|
||||
var num
|
||||
const origKey = key
|
||||
var value = implied[key]
|
||||
|
||||
// convert string '1' to number 1
|
||||
num = Number(key)
|
||||
key = isNaN(num) ? key : num
|
||||
|
||||
if (typeof key === 'number') {
|
||||
// check length of argv._
|
||||
key = argv._.length >= key
|
||||
} else if (key.match(/^--no-.+/) && booleanNegation) {
|
||||
// check if key doesn't exist
|
||||
key = key.match(/^--no-(.+)/)[1]
|
||||
key = !argv[key]
|
||||
} else {
|
||||
// check if key exists
|
||||
key = argv[key]
|
||||
}
|
||||
|
||||
num = Number(value)
|
||||
value = isNaN(num) ? value : num
|
||||
|
||||
if (typeof value === 'number') {
|
||||
value = argv._.length >= value
|
||||
} else if (value.match(/^--no-.+/) && booleanNegation) {
|
||||
value = value.match(/^--no-(.+)/)[1]
|
||||
value = !argv[value]
|
||||
} else {
|
||||
value = argv[value]
|
||||
}
|
||||
|
||||
if (key && !value) {
|
||||
implyFail.push(origKey)
|
||||
}
|
||||
})
|
||||
|
||||
if (implyFail.length) {
|
||||
var msg = __('Implications failed:') + '\n'
|
||||
|
||||
implyFail.forEach(function (key) {
|
||||
msg += (' ' + key + ' -> ' + implied[key])
|
||||
})
|
||||
|
||||
usage.fail(msg)
|
||||
}
|
||||
}
|
||||
|
||||
self.reset = function (globalLookup) {
|
||||
implied = objFilter(implied, function (k, v) {
|
||||
return globalLookup[k]
|
||||
})
|
||||
checks = []
|
||||
return self
|
||||
}
|
||||
|
||||
return self
|
||||
}
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"Commands:": "Kommandos:",
|
||||
"Options:": "Optionen:",
|
||||
"Examples:": "Beispiele:",
|
||||
"boolean": "boolean",
|
||||
"count": "Zähler",
|
||||
"string": "string",
|
||||
"number": "Zahl",
|
||||
"array": "array",
|
||||
"required": "erforderlich",
|
||||
"default:": "Standard:",
|
||||
"choices:": "Möglichkeiten:",
|
||||
"generated-value": "Generierter-Wert",
|
||||
"Not enough non-option arguments: got %s, need at least %s": "Nicht genügend Argumente ohne Optionen: %s vorhanden, mindestens %s benötigt",
|
||||
"Too many non-option arguments: got %s, maximum of %s": "Zu viele Argumente ohne Optionen: %s vorhanden, maximal %s erlaubt",
|
||||
"Missing argument value: %s": {
|
||||
"one": "Fehlender Argumentwert: %s",
|
||||
"other": "Fehlende Argumentwerte: %s"
|
||||
},
|
||||
"Missing required argument: %s": {
|
||||
"one": "Fehlendes Argument: %s",
|
||||
"other": "Fehlende Argumente: %s"
|
||||
},
|
||||
"Unknown argument: %s": {
|
||||
"one": "Unbekanntes Argument: %s",
|
||||
"other": "Unbekannte Argumente: %s"
|
||||
},
|
||||
"Invalid values:": "Unzulässige Werte:",
|
||||
"Argument: %s, Given: %s, Choices: %s": "Argument: %s, Gegeben: %s, Möglichkeiten: %s",
|
||||
"Argument check failed: %s": "Argumente-Check fehlgeschlagen: %s",
|
||||
"Implications failed:": "Implikationen fehlgeschlagen:",
|
||||
"Not enough arguments following: %s": "Nicht genügend Argumente nach: %s",
|
||||
"Invalid JSON config file: %s": "Fehlerhafte JSON-Config Datei: %s",
|
||||
"Path to JSON config file": "Pfad zur JSON-Config Datei",
|
||||
"Show help": "Hilfe anzeigen",
|
||||
"Show version number": "Version anzeigen"
|
||||
}
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"Commands:": "Commands:",
|
||||
"Options:": "Options:",
|
||||
"Examples:": "Examples:",
|
||||
"boolean": "boolean",
|
||||
"count": "count",
|
||||
"string": "string",
|
||||
"number": "number",
|
||||
"array": "array",
|
||||
"required": "required",
|
||||
"default:": "default:",
|
||||
"choices:": "choices:",
|
||||
"generated-value": "generated-value",
|
||||
"Not enough non-option arguments: got %s, need at least %s": "Not enough non-option arguments: got %s, need at least %s",
|
||||
"Too many non-option arguments: got %s, maximum of %s": "Too many non-option arguments: got %s, maximum of %s",
|
||||
"Missing argument value: %s": {
|
||||
"one": "Missing argument value: %s",
|
||||
"other": "Missing argument values: %s"
|
||||
},
|
||||
"Missing required argument: %s": {
|
||||
"one": "Missing required argument: %s",
|
||||
"other": "Missing required arguments: %s"
|
||||
},
|
||||
"Unknown argument: %s": {
|
||||
"one": "Unknown argument: %s",
|
||||
"other": "Unknown arguments: %s"
|
||||
},
|
||||
"Invalid values:": "Invalid values:",
|
||||
"Argument: %s, Given: %s, Choices: %s": "Argument: %s, Given: %s, Choices: %s",
|
||||
"Argument check failed: %s": "Argument check failed: %s",
|
||||
"Implications failed:": "Implications failed:",
|
||||
"Not enough arguments following: %s": "Not enough arguments following: %s",
|
||||
"Invalid JSON config file: %s": "Invalid JSON config file: %s",
|
||||
"Path to JSON config file": "Path to JSON config file",
|
||||
"Show help": "Show help",
|
||||
"Show version number": "Show version number"
|
||||
}
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"Commands:": "Comandos:",
|
||||
"Options:": "Opciones:",
|
||||
"Examples:": "Ejemplos:",
|
||||
"boolean": "boolean",
|
||||
"count": "cuenta",
|
||||
"string": "cadena de caracteres",
|
||||
"number": "número",
|
||||
"array": "tabla",
|
||||
"required": "requisito",
|
||||
"default:": "defecto:",
|
||||
"choices:": "selección:",
|
||||
"generated-value": "valor-generado",
|
||||
"Not enough non-option arguments: got %s, need at least %s": "Hacen falta argumentos no-opcionales: Número recibido %s, necesita por lo menos %s",
|
||||
"Too many non-option arguments: got %s, maximum of %s": "Demasiados argumentos no-opcionales: Número recibido %s, máximo es %s",
|
||||
"Missing argument value: %s": {
|
||||
"one": "Falta argumento: %s",
|
||||
"other": "Faltan argumentos: %s"
|
||||
},
|
||||
"Missing required argument: %s": {
|
||||
"one": "Falta argumento requerido: %s",
|
||||
"other": "Faltan argumentos requeridos: %s"
|
||||
},
|
||||
"Unknown argument: %s": {
|
||||
"one": "Argumento desconocido: %s",
|
||||
"other": "Argumentos desconocidos: %s"
|
||||
},
|
||||
"Invalid values:": "Valores inválidos:",
|
||||
"Argument: %s, Given: %s, Choices: %s": "Argumento: %s, Recibido: %s, Selección: %s",
|
||||
"Argument check failed: %s": "Verificación de argumento ha fracasado: %s",
|
||||
"Implications failed:": "Implicaciones fracasadas:",
|
||||
"Not enough arguments following: %s": "No hay suficientes argumentos después de: %s",
|
||||
"Invalid JSON config file: %s": "Archivo de configuración JSON inválido: %s",
|
||||
"Path to JSON config file": "Ruta al archivo de configuración JSON",
|
||||
"Show help": "Muestra ayuda",
|
||||
"Show version number": "Muestra número de versión"
|
||||
}
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"Commands:": "Commandes:",
|
||||
"Options:": "Options:",
|
||||
"Examples:": "Exemples:",
|
||||
"boolean": "booléen",
|
||||
"count": "comptage",
|
||||
"string": "chaine de caractère",
|
||||
"number": "nombre",
|
||||
"array": "tableau",
|
||||
"required": "requis",
|
||||
"default:": "défaut:",
|
||||
"choices:": "choix:",
|
||||
"generated-value": "valeur générée",
|
||||
"Not enough non-option arguments: got %s, need at least %s": "Pas assez d'arguments non-option: reçu %s, besoin d'au moins %s",
|
||||
"Too many non-option arguments: got %s, maximum of %s": "Trop d'arguments non-option: reçu %s, maximum %s",
|
||||
"Missing argument value: %s": {
|
||||
"one": "Argument manquant: %s",
|
||||
"other": "Arguments manquants: %s"
|
||||
},
|
||||
"Missing required argument: %s": {
|
||||
"one": "Argument requis manquant: %s",
|
||||
"other": "Arguments requis manquants: %s"
|
||||
},
|
||||
"Unknown argument: %s": {
|
||||
"one": "Argument inconnu: %s",
|
||||
"other": "Arguments inconnus: %s"
|
||||
},
|
||||
"Invalid values:": "Valeurs invalides:",
|
||||
"Argument: %s, Given: %s, Choices: %s": "Argument: %s, Donné: %s, Choix: %s",
|
||||
"Argument check failed: %s": "Echec de la vérification de l'argument: %s",
|
||||
"Implications failed:": "Implications échouées:",
|
||||
"Not enough arguments following: %s": "Pas assez d'arguments suivant: %s",
|
||||
"Invalid JSON config file: %s": "Fichier de configuration JSON invalide: %s",
|
||||
"Path to JSON config file": "Chemin du fichier de configuration JSON",
|
||||
"Show help": "Affiche de l'aide",
|
||||
"Show version number": "Affiche le numéro de version"
|
||||
}
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
|
||||
{
|
||||
"Commands:": "Perintah:",
|
||||
"Options:": "Pilihan:",
|
||||
"Examples:": "Contoh:",
|
||||
"boolean": "boolean",
|
||||
"count": "jumlah",
|
||||
"number": "nomor",
|
||||
"string": "string",
|
||||
"array": "larik",
|
||||
"required": "diperlukan",
|
||||
"default:": "bawaan:",
|
||||
"choices:": "pilihan:",
|
||||
"generated-value": "nilai-yang-dihasilkan",
|
||||
"Not enough non-option arguments: got %s, need at least %s": "Argumen wajib kurang: hanya %s, minimal %s",
|
||||
"Too many non-option arguments: got %s, maximum of %s": "Terlalu banyak argumen wajib: ada %s, maksimal %s",
|
||||
"Missing argument value: %s": {
|
||||
"one": "Kurang argumen: %s",
|
||||
"other": "Kurang argumen: %s"
|
||||
},
|
||||
"Missing required argument: %s": {
|
||||
"one": "Kurang argumen wajib: %s",
|
||||
"other": "Kurang argumen wajib: %s"
|
||||
},
|
||||
"Unknown argument: %s": {
|
||||
"one": "Argumen tak diketahui: %s",
|
||||
"other": "Argumen tak diketahui: %s"
|
||||
},
|
||||
"Invalid values:": "Nilai-nilai tidak valid:",
|
||||
"Argument: %s, Given: %s, Choices: %s": "Argumen: %s, Diberikan: %s, Pilihan: %s",
|
||||
"Argument check failed: %s": "Pemeriksaan argument gagal: %s",
|
||||
"Implications failed:": "Implikasi gagal:",
|
||||
"Not enough arguments following: %s": "Kurang argumen untuk: %s",
|
||||
"Invalid JSON config file: %s": "Berkas konfigurasi JSON tidak valid: %s",
|
||||
"Path to JSON config file": "Alamat berkas konfigurasi JSON",
|
||||
"Show help": "Lihat bantuan",
|
||||
"Show version number": "Lihat nomor versi"
|
||||
}
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"Commands:": "Comandi:",
|
||||
"Options:": "Opzioni:",
|
||||
"Examples:": "Esempi:",
|
||||
"boolean": "booleano",
|
||||
"count": "contatore",
|
||||
"string": "stringa",
|
||||
"number": "numero",
|
||||
"array": "vettore",
|
||||
"required": "richiesto",
|
||||
"default:": "predefinito:",
|
||||
"choices:": "scelte:",
|
||||
"generated-value": "valore generato",
|
||||
"Not enough non-option arguments: got %s, need at least %s": "Numero insufficiente di argomenti non opzione: inseriti %s, richiesti almeno %s",
|
||||
"Too many non-option arguments: got %s, maximum of %s": "Troppi argomenti non opzione: inseriti %s, massimo possibile %s",
|
||||
"Missing argument value: %s": {
|
||||
"one": "Argomento mancante: %s",
|
||||
"other": "Argomenti mancanti: %s"
|
||||
},
|
||||
"Missing required argument: %s": {
|
||||
"one": "Argomento richiesto mancante: %s",
|
||||
"other": "Argomenti richiesti mancanti: %s"
|
||||
},
|
||||
"Unknown argument: %s": {
|
||||
"one": "Argomento sconosciuto: %s",
|
||||
"other": "Argomenti sconosciuti: %s"
|
||||
},
|
||||
"Invalid values:": "Valori non validi:",
|
||||
"Argument: %s, Given: %s, Choices: %s": "Argomento: %s, Richiesto: %s, Scelte: %s",
|
||||
"Argument check failed: %s": "Controllo dell'argomento fallito: %s",
|
||||
"Implications failed:": "Argomenti impliciti non soddisfatti:",
|
||||
"Not enough arguments following: %s": "Argomenti insufficienti dopo: %s",
|
||||
"Invalid JSON config file: %s": "File di configurazione JSON non valido: %s",
|
||||
"Path to JSON config file": "Percorso del file di configurazione JSON",
|
||||
"Show help": "Mostra la schermata di aiuto",
|
||||
"Show version number": "Mostra il numero di versione"
|
||||
}
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"Commands:": "コマンド:",
|
||||
"Options:": "オプション:",
|
||||
"Examples:": "例:",
|
||||
"boolean": "真偽",
|
||||
"count": "カウント",
|
||||
"string": "文字列",
|
||||
"number": "数値",
|
||||
"array": "配列",
|
||||
"required": "必須",
|
||||
"default:": "デフォルト:",
|
||||
"choices:": "選択してください:",
|
||||
"generated-value": "生成された値",
|
||||
"Not enough non-option arguments: got %s, need at least %s": "オプションではない引数が %s 個では不足しています。少なくとも %s 個の引数が必要です:",
|
||||
"Too many non-option arguments: got %s, maximum of %s": "オプションではない引数が %s 個では多すぎます。最大で %s 個までです:",
|
||||
"Missing argument value: %s": {
|
||||
"one": "引数が見つかりません: %s",
|
||||
"other": "引数が見つかりません: %s"
|
||||
},
|
||||
"Missing required argument: %s": {
|
||||
"one": "必須の引数が見つかりません: %s",
|
||||
"other": "必須の引数が見つかりません: %s"
|
||||
},
|
||||
"Unknown argument: %s": {
|
||||
"one": "未知の引数です: %s",
|
||||
"other": "未知の引数です: %s"
|
||||
},
|
||||
"Invalid values:": "不正な値です:",
|
||||
"Argument: %s, Given: %s, Choices: %s": "引数は %s です。指定できるのは %s つです。選択してください: %s",
|
||||
"Argument check failed: %s": "引数のチェックに失敗しました: %s",
|
||||
"Implications failed:": "オプションの組み合わせで不正が生じました:",
|
||||
"Not enough arguments following: %s": "次の引数が不足しています。: %s",
|
||||
"Invalid JSON config file: %s": "JSONの設定ファイルが不正です: %s",
|
||||
"Path to JSON config file": "JSONの設定ファイルまでのpath",
|
||||
"Show help": "ヘルプを表示",
|
||||
"Show version number": "バージョンを表示"
|
||||
}
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"Commands:": "명령:",
|
||||
"Options:": "옵션:",
|
||||
"Examples:": "예시:",
|
||||
"boolean": "여부",
|
||||
"count": "개수",
|
||||
"string": "문자열",
|
||||
"number": "숫자",
|
||||
"array": "배열",
|
||||
"required": "필수",
|
||||
"default:": "기본:",
|
||||
"choices:": "선택:",
|
||||
"generated-value": "생성된 값",
|
||||
"Not enough non-option arguments: got %s, need at least %s": "옵션이 아닌 인자가 충분치 않습니다: %s개를 받았지만, 적어도 %s개는 필요합니다",
|
||||
"Too many non-option arguments: got %s, maximum of %s": "옵션이 아닌 인자가 너무 많습니다: %s개를 받았지만, %s개 이하여야 합니다",
|
||||
"Missing argument value: %s": {
|
||||
"one": "인자값을 받지 못했습니다: %s",
|
||||
"other": "인자값들을 받지 못했습니다: %s"
|
||||
},
|
||||
"Missing required argument: %s": {
|
||||
"one": "필수 인자를 받지 못했습니다: %s",
|
||||
"other": "필수 인자들을 받지 못했습니다: %s"
|
||||
},
|
||||
"Unknown argument: %s": {
|
||||
"one": "알 수 없는 인자입니다: %s",
|
||||
"other": "알 수 없는 인자들입니다: %s"
|
||||
},
|
||||
"Invalid values:": "잘못된 값입니다:",
|
||||
"Argument: %s, Given: %s, Choices: %s": "인자: %s, 입력받은 값: %s, 선택지: %s",
|
||||
"Argument check failed: %s": "유효하지 않은 인자입니다: %s",
|
||||
"Implications failed:": "옵션의 조합이 잘못되었습니다:",
|
||||
"Not enough arguments following: %s": "인자가 충분하게 주어지지 않았습니다: %s",
|
||||
"Invalid JSON config file: %s": "유효하지 않은 JSON 설정파일입니다: %s",
|
||||
"Path to JSON config file": "JSON 설정파일 경로",
|
||||
"Show help": "도움말을 보여줍니다",
|
||||
"Show version number": "버전 넘버를 보여줍니다"
|
||||
}
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"Commands:": "Kommandoer:",
|
||||
"Options:": "Alternativer:",
|
||||
"Examples:": "Eksempler:",
|
||||
"boolean": "boolsk",
|
||||
"count": "antall",
|
||||
"string": "streng",
|
||||
"number": "nummer",
|
||||
"array": "matrise",
|
||||
"required": "obligatorisk",
|
||||
"default:": "standard:",
|
||||
"choices:": "valg:",
|
||||
"generated-value": "generert-verdi",
|
||||
"Not enough non-option arguments: got %s, need at least %s": "Ikke nok ikke-alternativ argumenter: fikk %s, trenger minst %s",
|
||||
"Too many non-option arguments: got %s, maximum of %s": "For mange ikke-alternativ argumenter: fikk %s, maksimum %s",
|
||||
"Missing argument value: %s": {
|
||||
"one": "Mangler argument verdi: %s",
|
||||
"other": "Mangler argument verdier: %s"
|
||||
},
|
||||
"Missing required argument: %s": {
|
||||
"one": "Mangler obligatorisk argument: %s",
|
||||
"other": "Mangler obligatoriske argumenter: %s"
|
||||
},
|
||||
"Unknown argument: %s": {
|
||||
"one": "Ukjent argument: %s",
|
||||
"other": "Ukjente argumenter: %s"
|
||||
},
|
||||
"Invalid values:": "Ugyldige verdier:",
|
||||
"Argument: %s, Given: %s, Choices: %s": "Argument: %s, Gitt: %s, Valg: %s",
|
||||
"Argument check failed: %s": "Argument sjekk mislyktes: %s",
|
||||
"Implications failed:": "Konsekvensene mislyktes:",
|
||||
"Not enough arguments following: %s": "Ikke nok følgende argumenter: %s",
|
||||
"Invalid JSON config file: %s": "Ugyldig JSON konfigurasjonsfil: %s",
|
||||
"Path to JSON config file": "Bane til JSON konfigurasjonsfil",
|
||||
"Show help": "Vis hjelp",
|
||||
"Show version number": "Vis versjonsnummer"
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"Commands:": "Choose yer command:",
|
||||
"Options:": "Options for me hearties!",
|
||||
"Examples:": "Ex. marks the spot:",
|
||||
"required": "requi-yar-ed",
|
||||
"Missing required argument: %s": {
|
||||
"one": "Ye be havin' to set the followin' argument land lubber: %s",
|
||||
"other": "Ye be havin' to set the followin' arguments land lubber: %s"
|
||||
},
|
||||
"Show help": "Parlay this here code of conduct",
|
||||
"Show version number": "'Tis the version ye be askin' fer"
|
||||
}
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"Commands:": "Polecenia:",
|
||||
"Options:": "Opcje:",
|
||||
"Examples:": "Przykłady:",
|
||||
"boolean": "boolean",
|
||||
"count": "ilość",
|
||||
"string": "ciąg znaków",
|
||||
"number": "liczba",
|
||||
"array": "tablica",
|
||||
"required": "wymagany",
|
||||
"default:": "domyślny:",
|
||||
"choices:": "dostępne:",
|
||||
"generated-value": "wygenerowana-wartość",
|
||||
"Not enough non-option arguments: got %s, need at least %s": "Niewystarczająca ilość argumentów: otrzymano %s, wymagane co najmniej %s",
|
||||
"Too many non-option arguments: got %s, maximum of %s": "Zbyt duża ilość argumentów: otrzymano %s, wymagane co najwyżej %s",
|
||||
"Missing argument value: %s": {
|
||||
"one": "Brak wartości dla argumentu: %s",
|
||||
"other": "Brak wartości dla argumentów: %s"
|
||||
},
|
||||
"Missing required argument: %s": {
|
||||
"one": "Brak wymaganego argumentu: %s",
|
||||
"other": "Brak wymaganych argumentów: %s"
|
||||
},
|
||||
"Unknown argument: %s": {
|
||||
"one": "Nieznany argument: %s",
|
||||
"other": "Nieznane argumenty: %s"
|
||||
},
|
||||
"Invalid values:": "Nieprawidłowe wartości:",
|
||||
"Argument: %s, Given: %s, Choices: %s": "Argument: %s, Otrzymano: %s, Dostępne: %s",
|
||||
"Argument check failed: %s": "Weryfikacja argumentów nie powiodła się: %s",
|
||||
"Implications failed:": "Założenia nie zostały spełnione:",
|
||||
"Not enough arguments following: %s": "Niewystarczająca ilość argumentów następujących po: %s",
|
||||
"Invalid JSON config file: %s": "Nieprawidłowy plik konfiguracyjny JSON: %s",
|
||||
"Path to JSON config file": "Ścieżka do pliku konfiguracyjnego JSON",
|
||||
"Show help": "Pokaż pomoc",
|
||||
"Show version number": "Pokaż numer wersji"
|
||||
}
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"Commands:": "Comandos:",
|
||||
"Options:": "Opções:",
|
||||
"Examples:": "Exemplos:",
|
||||
"boolean": "boolean",
|
||||
"count": "contagem",
|
||||
"string": "cadeia de caracteres",
|
||||
"number": "número",
|
||||
"array": "arranjo",
|
||||
"required": "requerido",
|
||||
"default:": "padrão:",
|
||||
"choices:": "escolhas:",
|
||||
"generated-value": "valor-gerado",
|
||||
"Not enough non-option arguments: got %s, need at least %s": "Argumentos insuficientes não opcionais: Argumento %s, necessário pelo menos %s",
|
||||
"Too many non-option arguments: got %s, maximum of %s": "Excesso de argumentos não opcionais: recebido %s, máximo de %s",
|
||||
"Missing argument value: %s": {
|
||||
"one": "Falta valor de argumento: %s",
|
||||
"other": "Falta valores de argumento: %s"
|
||||
},
|
||||
"Missing required argument: %s": {
|
||||
"one": "Falta argumento obrigatório: %s",
|
||||
"other": "Faltando argumentos obrigatórios: %s"
|
||||
},
|
||||
"Unknown argument: %s": {
|
||||
"one": "Argumento desconhecido: %s",
|
||||
"other": "Argumentos desconhecidos: %s"
|
||||
},
|
||||
"Invalid values:": "Valores inválidos:",
|
||||
"Argument: %s, Given: %s, Choices: %s": "Argumento: %s, Dado: %s, Escolhas: %s",
|
||||
"Argument check failed: %s": "Verificação de argumento falhou: %s",
|
||||
"Implications failed:": "Implicações falharam:",
|
||||
"Not enough arguments following: %s": "Insuficientes argumentos a seguir: %s",
|
||||
"Invalid JSON config file: %s": "Arquivo de configuração em JSON esta inválido: %s",
|
||||
"Path to JSON config file": "Caminho para o arquivo de configuração em JSON",
|
||||
"Show help": "Mostra ajuda",
|
||||
"Show version number": "Mostra número de versão"
|
||||
}
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"Commands:": "Comandos:",
|
||||
"Options:": "Opções:",
|
||||
"Examples:": "Exemplos:",
|
||||
"boolean": "boolean",
|
||||
"count": "contagem",
|
||||
"string": "string",
|
||||
"number": "número",
|
||||
"array": "array",
|
||||
"required": "obrigatório",
|
||||
"default:": "padrão:",
|
||||
"choices:": "opções:",
|
||||
"generated-value": "valor-gerado",
|
||||
"Not enough non-option arguments: got %s, need at least %s": "Argumentos insuficientes: Argumento %s, necessário pelo menos %s",
|
||||
"Too many non-option arguments: got %s, maximum of %s": "Excesso de argumentos: recebido %s, máximo de %s",
|
||||
"Missing argument value: %s": {
|
||||
"one": "Falta valor de argumento: %s",
|
||||
"other": "Falta valores de argumento: %s"
|
||||
},
|
||||
"Missing required argument: %s": {
|
||||
"one": "Falta argumento obrigatório: %s",
|
||||
"other": "Faltando argumentos obrigatórios: %s"
|
||||
},
|
||||
"Unknown argument: %s": {
|
||||
"one": "Argumento desconhecido: %s",
|
||||
"other": "Argumentos desconhecidos: %s"
|
||||
},
|
||||
"Invalid values:": "Valores inválidos:",
|
||||
"Argument: %s, Given: %s, Choices: %s": "Argumento: %s, Dado: %s, Opções: %s",
|
||||
"Argument check failed: %s": "Verificação de argumento falhou: %s",
|
||||
"Implications failed:": "Implicações falharam:",
|
||||
"Not enough arguments following: %s": "Argumentos insuficientes a seguir: %s",
|
||||
"Invalid JSON config file: %s": "Arquivo JSON de configuração inválido: %s",
|
||||
"Path to JSON config file": "Caminho para o arquivo JSON de configuração",
|
||||
"Show help": "Exibe ajuda",
|
||||
"Show version number": "Exibe a versão"
|
||||
}
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"Commands:": "Komutlar:",
|
||||
"Options:": "Seçenekler:",
|
||||
"Examples:": "Örnekler:",
|
||||
"boolean": "boolean",
|
||||
"count": "sayı",
|
||||
"string": "string",
|
||||
"number": "numara",
|
||||
"array": "array",
|
||||
"required": "zorunlu",
|
||||
"default:": "varsayılan:",
|
||||
"choices:": "seçimler:",
|
||||
"generated-value": "oluşturulan-değer",
|
||||
"Not enough non-option arguments: got %s, need at least %s": "Seçenek dışı argümanlar yetersiz: %s bulundu, %s gerekli",
|
||||
"Too many non-option arguments: got %s, maximum of %s": "Seçenek dışı argümanlar gereğinden fazla: %s bulundu, azami %s",
|
||||
"Missing argument value: %s": {
|
||||
"one": "Eksik argüman değeri: %s",
|
||||
"other": "Eksik argüman değerleri: %s"
|
||||
},
|
||||
"Missing required argument: %s": {
|
||||
"one": "Eksik zorunlu argüman: %s",
|
||||
"other": "Eksik zorunlu argümanlar: %s"
|
||||
},
|
||||
"Unknown argument: %s": {
|
||||
"one": "Bilinmeyen argüman: %s",
|
||||
"other": "Bilinmeyen argümanlar: %s"
|
||||
},
|
||||
"Invalid values:": "Geçersiz değerler:",
|
||||
"Argument: %s, Given: %s, Choices: %s": "Argüman: %s, Verilen: %s, Seçimler: %s",
|
||||
"Argument check failed: %s": "Argüman kontrolü başarısız oldu: %s",
|
||||
"Implications failed:": "Sonuçlar başarısız oldu:",
|
||||
"Not enough arguments following: %s": "%s için yeterli argüman bulunamadı",
|
||||
"Invalid JSON config file: %s": "Geçersiz JSON yapılandırma dosyası: %s",
|
||||
"Path to JSON config file": "JSON yapılandırma dosya konumu",
|
||||
"Show help": "Yardım detaylarını göster",
|
||||
"Show version number": "Versiyon detaylarını göster"
|
||||
}
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"Commands:": "命令:",
|
||||
"Options:": "选项:",
|
||||
"Examples:": "示例:",
|
||||
"boolean": "布尔",
|
||||
"count": "计数",
|
||||
"string": "字符串",
|
||||
"number": "数字",
|
||||
"array": "数组",
|
||||
"required": "必需",
|
||||
"default:": "默认值:",
|
||||
"choices:": "可选值:",
|
||||
"generated-value": "生成的值",
|
||||
"Not enough non-option arguments: got %s, need at least %s": "缺少 non-option 参数:传入了 %s 个, 至少需要 %s 个",
|
||||
"Too many non-option arguments: got %s, maximum of %s": "non-option 参数过多:传入了 %s 个, 最大允许 %s 个",
|
||||
"Missing argument value: %s": {
|
||||
"one": "没有给此选项指定值:%s",
|
||||
"other": "没有给这些选项指定值:%s"
|
||||
},
|
||||
"Missing required argument: %s": {
|
||||
"one": "缺少必须的选项:%s",
|
||||
"other": "缺少这些必须的选项:%s"
|
||||
},
|
||||
"Unknown argument: %s": {
|
||||
"one": "无法识别的选项:%s",
|
||||
"other": "无法识别这些选项:%s"
|
||||
},
|
||||
"Invalid values:": "无效的选项值:",
|
||||
"Argument: %s, Given: %s, Choices: %s": "选项名称: %s, 传入的值: %s, 可选的值:%s",
|
||||
"Argument check failed: %s": "选项值验证失败:%s",
|
||||
"Implications failed:": "缺少依赖的选项:",
|
||||
"Not enough arguments following: %s": "没有提供足够的值给此选项:%s",
|
||||
"Invalid JSON config file: %s": "无效的 JSON 配置文件:%s",
|
||||
"Path to JSON config file": "JSON 配置文件的路径",
|
||||
"Show help": "显示帮助信息",
|
||||
"Show version number": "显示版本号"
|
||||
}
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"Commands:": "命令:",
|
||||
"Options:": "选项:",
|
||||
"Examples:": "示例:",
|
||||
"boolean": "布尔",
|
||||
"count": "计数",
|
||||
"string": "字符串",
|
||||
"number": "数字",
|
||||
"array": "数组",
|
||||
"required": "必需",
|
||||
"default:": "默认值:",
|
||||
"choices:": "可选值:",
|
||||
"generated-value": "生成的值",
|
||||
"Not enough non-option arguments: got %s, need at least %s": "缺少 non-option 参数:传入了 %s 个, 至少需要 %s 个",
|
||||
"Too many non-option arguments: got %s, maximum of %s": "non-option 参数过多:传入了 %s 个, 最大允许 %s 个",
|
||||
"Missing argument value: %s": {
|
||||
"one": "没有给此选项指定值:%s",
|
||||
"other": "没有给这些选项指定值:%s"
|
||||
},
|
||||
"Missing required argument: %s": {
|
||||
"one": "缺少必须的选项:%s",
|
||||
"other": "缺少这些必须的选项:%s"
|
||||
},
|
||||
"Unknown argument: %s": {
|
||||
"one": "无法识别的选项:%s",
|
||||
"other": "无法识别这些选项:%s"
|
||||
},
|
||||
"Invalid values:": "无效的选项值:",
|
||||
"Argument: %s, Given: %s, Choices: %s": "选项名称: %s, 传入的值: %s, 可选的值:%s",
|
||||
"Argument check failed: %s": "选项值验证失败:%s",
|
||||
"Implications failed:": "缺少依赖的选项:",
|
||||
"Not enough arguments following: %s": "没有提供足够的值给此选项:%s",
|
||||
"Invalid JSON config file: %s": "无效的 JSON 配置文件:%s",
|
||||
"Path to JSON config file": "JSON 配置文件的路径",
|
||||
"Show help": "显示帮助信息",
|
||||
"Show version number": "显示版本号"
|
||||
}
|
||||
+149
@@ -0,0 +1,149 @@
|
||||
{
|
||||
"_args": [
|
||||
[
|
||||
{
|
||||
"raw": "yargs@^4.7.1",
|
||||
"scope": null,
|
||||
"escapedName": "yargs",
|
||||
"name": "yargs",
|
||||
"rawSpec": "^4.7.1",
|
||||
"spec": ">=4.7.1 <5.0.0",
|
||||
"type": "range"
|
||||
},
|
||||
"/mnt/Data/bach/Sites/clameurs.org/sites/all/themes/figureslibres/inifig/node_modules/sass-graph"
|
||||
]
|
||||
],
|
||||
"_from": "yargs@>=4.7.1 <5.0.0",
|
||||
"_id": "yargs@4.8.1",
|
||||
"_inCache": true,
|
||||
"_location": "/yargs",
|
||||
"_nodeVersion": "5.1.0",
|
||||
"_npmOperationalInternal": {
|
||||
"host": "packages-12-west.internal.npmjs.com",
|
||||
"tmp": "tmp/yargs-4.8.1.tgz_1468774517925_0.6020703467074782"
|
||||
},
|
||||
"_npmUser": {
|
||||
"name": "bcoe",
|
||||
"email": "ben@npmjs.com"
|
||||
},
|
||||
"_npmVersion": "3.3.12",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"raw": "yargs@^4.7.1",
|
||||
"scope": null,
|
||||
"escapedName": "yargs",
|
||||
"name": "yargs",
|
||||
"rawSpec": "^4.7.1",
|
||||
"spec": ">=4.7.1 <5.0.0",
|
||||
"type": "range"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/sass-graph"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz",
|
||||
"_shasum": "c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0",
|
||||
"_shrinkwrap": null,
|
||||
"_spec": "yargs@^4.7.1",
|
||||
"_where": "/mnt/Data/bach/Sites/clameurs.org/sites/all/themes/figureslibres/inifig/node_modules/sass-graph",
|
||||
"bugs": {
|
||||
"url": "https://github.com/yargs/yargs/issues"
|
||||
},
|
||||
"dependencies": {
|
||||
"cliui": "^3.2.0",
|
||||
"decamelize": "^1.1.1",
|
||||
"get-caller-file": "^1.0.1",
|
||||
"lodash.assign": "^4.0.3",
|
||||
"os-locale": "^1.4.0",
|
||||
"read-pkg-up": "^1.0.1",
|
||||
"require-directory": "^2.1.1",
|
||||
"require-main-filename": "^1.0.1",
|
||||
"set-blocking": "^2.0.0",
|
||||
"string-width": "^1.0.1",
|
||||
"which-module": "^1.0.0",
|
||||
"window-size": "^0.2.0",
|
||||
"y18n": "^3.2.1",
|
||||
"yargs-parser": "^2.4.1"
|
||||
},
|
||||
"description": "yargs the modern, pirate-themed, successor to optimist.",
|
||||
"devDependencies": {
|
||||
"chai": "^3.4.1",
|
||||
"chalk": "^1.1.3",
|
||||
"coveralls": "^2.11.11",
|
||||
"cpr": "^1.0.0",
|
||||
"cross-spawn": "^4.0.0",
|
||||
"es6-promise": "^3.0.2",
|
||||
"hashish": "0.0.4",
|
||||
"mocha": "^2.5.2",
|
||||
"nyc": "^7.0.0",
|
||||
"rimraf": "^2.5.0",
|
||||
"standard": "^7.0.0",
|
||||
"standard-version": "^2.2.1",
|
||||
"which": "^1.2.9"
|
||||
},
|
||||
"directories": {},
|
||||
"dist": {
|
||||
"shasum": "c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0",
|
||||
"tarball": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz"
|
||||
},
|
||||
"engine": {
|
||||
"node": ">=0.10"
|
||||
},
|
||||
"files": [
|
||||
"index.js",
|
||||
"yargs.js",
|
||||
"lib",
|
||||
"locales",
|
||||
"completion.sh.hbs",
|
||||
"LICENSE"
|
||||
],
|
||||
"gitHead": "6adbe5574885c6ac7f7d42e80010b9f325c1bac3",
|
||||
"homepage": "http://yargs.js.org/",
|
||||
"keywords": [
|
||||
"argument",
|
||||
"args",
|
||||
"option",
|
||||
"parser",
|
||||
"parsing",
|
||||
"cli",
|
||||
"command"
|
||||
],
|
||||
"license": "MIT",
|
||||
"main": "./index.js",
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "bcoe",
|
||||
"email": "ben@npmjs.com"
|
||||
},
|
||||
{
|
||||
"name": "chevex",
|
||||
"email": "alex.ford@codetunnel.com"
|
||||
},
|
||||
{
|
||||
"name": "nexdrew",
|
||||
"email": "andrew@npmjs.com"
|
||||
},
|
||||
{
|
||||
"name": "nylen",
|
||||
"email": "jnylen@gmail.com"
|
||||
}
|
||||
],
|
||||
"name": "yargs",
|
||||
"optionalDependencies": {},
|
||||
"readme": "ERROR: No README data found!",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+ssh://git@github.com/yargs/yargs.git"
|
||||
},
|
||||
"scripts": {
|
||||
"coverage": "nyc report --reporter=text-lcov | coveralls",
|
||||
"pretest": "standard",
|
||||
"test": "nyc --cache mocha --require ./test/before.js --timeout=8000 --check-leaks",
|
||||
"version": "standard-version"
|
||||
},
|
||||
"standard": {
|
||||
"ignore": [
|
||||
"**/example/**"
|
||||
]
|
||||
},
|
||||
"version": "4.8.1"
|
||||
}
|
||||
+778
@@ -0,0 +1,778 @@
|
||||
const assert = require('assert')
|
||||
const assign = require('lodash.assign')
|
||||
const Command = require('./lib/command')
|
||||
const Completion = require('./lib/completion')
|
||||
const Parser = require('yargs-parser')
|
||||
const path = require('path')
|
||||
const Usage = require('./lib/usage')
|
||||
const Validation = require('./lib/validation')
|
||||
const Y18n = require('y18n')
|
||||
const requireMainFilename = require('require-main-filename')
|
||||
const objFilter = require('./lib/obj-filter')
|
||||
const setBlocking = require('set-blocking')
|
||||
|
||||
var exports = module.exports = Yargs
|
||||
function Yargs (processArgs, cwd, parentRequire) {
|
||||
processArgs = processArgs || [] // handle calling yargs().
|
||||
|
||||
const self = {}
|
||||
var command = null
|
||||
var completion = null
|
||||
var groups = {}
|
||||
var preservedGroups = {}
|
||||
var usage = null
|
||||
var validation = null
|
||||
|
||||
const y18n = Y18n({
|
||||
directory: path.resolve(__dirname, './locales'),
|
||||
updateFiles: false
|
||||
})
|
||||
|
||||
if (!cwd) cwd = process.cwd()
|
||||
|
||||
self.$0 = process.argv
|
||||
.slice(0, 2)
|
||||
.map(function (x, i) {
|
||||
// ignore the node bin, specify this in your
|
||||
// bin file with #!/usr/bin/env node
|
||||
if (i === 0 && /\b(node|iojs)(\.exe)?$/.test(x)) return
|
||||
var b = rebase(cwd, x)
|
||||
return x.match(/^(\/|([a-zA-Z]:)?\\)/) && b.length < x.length ? b : x
|
||||
})
|
||||
.join(' ').trim()
|
||||
|
||||
if (process.env._ !== undefined && process.argv[1] === process.env._) {
|
||||
self.$0 = process.env._.replace(
|
||||
path.dirname(process.execPath) + '/', ''
|
||||
)
|
||||
}
|
||||
|
||||
// use context object to keep track of resets, subcommand execution, etc
|
||||
// submodules should modify and check the state of context as necessary
|
||||
const context = { resets: -1, commands: [], files: [] }
|
||||
self.getContext = function () {
|
||||
return context
|
||||
}
|
||||
|
||||
// puts yargs back into an initial state. any keys
|
||||
// that have been set to "global" will not be reset
|
||||
// by this action.
|
||||
var options
|
||||
self.resetOptions = self.reset = function (aliases) {
|
||||
context.resets++
|
||||
aliases = aliases || {}
|
||||
options = options || {}
|
||||
// put yargs back into an initial state, this
|
||||
// logic is used to build a nested command
|
||||
// hierarchy.
|
||||
var tmpOptions = {}
|
||||
tmpOptions.global = options.global ? options.global : []
|
||||
|
||||
// if a key has been set as a global, we
|
||||
// do not want to reset it or its aliases.
|
||||
var globalLookup = {}
|
||||
tmpOptions.global.forEach(function (g) {
|
||||
globalLookup[g] = true
|
||||
;(aliases[g] || []).forEach(function (a) {
|
||||
globalLookup[a] = true
|
||||
})
|
||||
})
|
||||
|
||||
// preserve groups containing global keys
|
||||
preservedGroups = Object.keys(groups).reduce(function (acc, groupName) {
|
||||
var keys = groups[groupName].filter(function (key) {
|
||||
return key in globalLookup
|
||||
})
|
||||
if (keys.length > 0) {
|
||||
acc[groupName] = keys
|
||||
}
|
||||
return acc
|
||||
}, {})
|
||||
// groups can now be reset
|
||||
groups = {}
|
||||
|
||||
var arrayOptions = [
|
||||
'array', 'boolean', 'string', 'requiresArg', 'skipValidation',
|
||||
'count', 'normalize', 'number'
|
||||
]
|
||||
|
||||
var objectOptions = [
|
||||
'narg', 'key', 'alias', 'default', 'defaultDescription',
|
||||
'config', 'choices', 'demanded'
|
||||
]
|
||||
|
||||
arrayOptions.forEach(function (k) {
|
||||
tmpOptions[k] = (options[k] || []).filter(function (k) {
|
||||
return globalLookup[k]
|
||||
})
|
||||
})
|
||||
|
||||
objectOptions.forEach(function (k) {
|
||||
tmpOptions[k] = objFilter(options[k], function (k, v) {
|
||||
return globalLookup[k]
|
||||
})
|
||||
})
|
||||
|
||||
tmpOptions.envPrefix = undefined
|
||||
options = tmpOptions
|
||||
|
||||
// if this is the first time being executed, create
|
||||
// instances of all our helpers -- otherwise just reset.
|
||||
usage = usage ? usage.reset(globalLookup) : Usage(self, y18n)
|
||||
validation = validation ? validation.reset(globalLookup) : Validation(self, usage, y18n)
|
||||
command = command ? command.reset() : Command(self, usage, validation)
|
||||
if (!completion) completion = Completion(self, usage, command)
|
||||
|
||||
exitProcess = true
|
||||
strict = false
|
||||
completionCommand = null
|
||||
self.parsed = false
|
||||
|
||||
return self
|
||||
}
|
||||
self.resetOptions()
|
||||
|
||||
self.boolean = function (bools) {
|
||||
options.boolean.push.apply(options.boolean, [].concat(bools))
|
||||
return self
|
||||
}
|
||||
|
||||
self.array = function (arrays) {
|
||||
options.array.push.apply(options.array, [].concat(arrays))
|
||||
return self
|
||||
}
|
||||
|
||||
self.nargs = function (key, n) {
|
||||
if (typeof key === 'object') {
|
||||
Object.keys(key).forEach(function (k) {
|
||||
self.nargs(k, key[k])
|
||||
})
|
||||
} else {
|
||||
options.narg[key] = n
|
||||
}
|
||||
return self
|
||||
}
|
||||
|
||||
self.number = function (numbers) {
|
||||
options.number.push.apply(options.number, [].concat(numbers))
|
||||
return self
|
||||
}
|
||||
|
||||
self.choices = function (key, values) {
|
||||
if (typeof key === 'object') {
|
||||
Object.keys(key).forEach(function (k) {
|
||||
self.choices(k, key[k])
|
||||
})
|
||||
} else {
|
||||
options.choices[key] = (options.choices[key] || []).concat(values)
|
||||
}
|
||||
return self
|
||||
}
|
||||
|
||||
self.normalize = function (strings) {
|
||||
options.normalize.push.apply(options.normalize, [].concat(strings))
|
||||
return self
|
||||
}
|
||||
|
||||
self.config = function (key, msg, parseFn) {
|
||||
// allow to pass a configuration object
|
||||
if (typeof key === 'object') {
|
||||
options.configObjects = (options.configObjects || []).concat(key)
|
||||
return self
|
||||
}
|
||||
|
||||
// allow to provide a parsing function
|
||||
if (typeof msg === 'function') {
|
||||
parseFn = msg
|
||||
msg = null
|
||||
}
|
||||
|
||||
key = key || 'config'
|
||||
self.describe(key, msg || usage.deferY18nLookup('Path to JSON config file'))
|
||||
;(Array.isArray(key) ? key : [key]).forEach(function (k) {
|
||||
options.config[k] = parseFn || true
|
||||
})
|
||||
return self
|
||||
}
|
||||
|
||||
self.example = function (cmd, description) {
|
||||
usage.example(cmd, description)
|
||||
return self
|
||||
}
|
||||
|
||||
self.command = function (cmd, description, builder, handler) {
|
||||
command.addHandler(cmd, description, builder, handler)
|
||||
return self
|
||||
}
|
||||
|
||||
self.commandDir = function (dir, opts) {
|
||||
const req = parentRequire || require
|
||||
command.addDirectory(dir, self.getContext(), req, require('get-caller-file')(), opts)
|
||||
return self
|
||||
}
|
||||
|
||||
self.string = function (strings) {
|
||||
options.string.push.apply(options.string, [].concat(strings))
|
||||
return self
|
||||
}
|
||||
|
||||
// The 'defaults' alias is deprecated. It will be removed in the next major version.
|
||||
self.default = self.defaults = function (key, value, defaultDescription) {
|
||||
if (typeof key === 'object') {
|
||||
Object.keys(key).forEach(function (k) {
|
||||
self.default(k, key[k])
|
||||
})
|
||||
} else {
|
||||
if (defaultDescription) options.defaultDescription[key] = defaultDescription
|
||||
if (typeof value === 'function') {
|
||||
if (!options.defaultDescription[key]) options.defaultDescription[key] = usage.functionDescription(value)
|
||||
value = value.call()
|
||||
}
|
||||
options.default[key] = value
|
||||
}
|
||||
return self
|
||||
}
|
||||
|
||||
self.alias = function (x, y) {
|
||||
if (typeof x === 'object') {
|
||||
Object.keys(x).forEach(function (key) {
|
||||
self.alias(key, x[key])
|
||||
})
|
||||
} else {
|
||||
options.alias[x] = (options.alias[x] || []).concat(y)
|
||||
}
|
||||
return self
|
||||
}
|
||||
|
||||
self.count = function (counts) {
|
||||
options.count.push.apply(options.count, [].concat(counts))
|
||||
return self
|
||||
}
|
||||
|
||||
self.demand = self.required = self.require = function (keys, max, msg) {
|
||||
// you can optionally provide a 'max' key,
|
||||
// which will raise an exception if too many '_'
|
||||
// options are provided.
|
||||
|
||||
if (Array.isArray(max)) {
|
||||
max.forEach(function (key) {
|
||||
self.demand(key, msg)
|
||||
})
|
||||
max = Infinity
|
||||
} else if (typeof max !== 'number') {
|
||||
msg = max
|
||||
max = Infinity
|
||||
}
|
||||
|
||||
if (typeof keys === 'number') {
|
||||
if (!options.demanded._) options.demanded._ = { count: 0, msg: null, max: max }
|
||||
options.demanded._.count = keys
|
||||
options.demanded._.msg = msg
|
||||
} else if (Array.isArray(keys)) {
|
||||
keys.forEach(function (key) {
|
||||
self.demand(key, msg)
|
||||
})
|
||||
} else {
|
||||
if (typeof msg === 'string') {
|
||||
options.demanded[keys] = { msg: msg }
|
||||
} else if (msg === true || typeof msg === 'undefined') {
|
||||
options.demanded[keys] = { msg: undefined }
|
||||
}
|
||||
}
|
||||
|
||||
return self
|
||||
}
|
||||
|
||||
self.getDemanded = function () {
|
||||
return options.demanded
|
||||
}
|
||||
|
||||
self.requiresArg = function (requiresArgs) {
|
||||
options.requiresArg.push.apply(options.requiresArg, [].concat(requiresArgs))
|
||||
return self
|
||||
}
|
||||
|
||||
self.skipValidation = function (skipValidations) {
|
||||
options.skipValidation.push.apply(options.skipValidation, [].concat(skipValidations))
|
||||
return self
|
||||
}
|
||||
|
||||
self.implies = function (key, value) {
|
||||
validation.implies(key, value)
|
||||
return self
|
||||
}
|
||||
|
||||
self.usage = function (msg, opts) {
|
||||
if (!opts && typeof msg === 'object') {
|
||||
opts = msg
|
||||
msg = null
|
||||
}
|
||||
|
||||
usage.usage(msg)
|
||||
|
||||
if (opts) self.options(opts)
|
||||
|
||||
return self
|
||||
}
|
||||
|
||||
self.epilogue = self.epilog = function (msg) {
|
||||
usage.epilog(msg)
|
||||
return self
|
||||
}
|
||||
|
||||
self.fail = function (f) {
|
||||
usage.failFn(f)
|
||||
return self
|
||||
}
|
||||
|
||||
self.check = function (f) {
|
||||
validation.check(f)
|
||||
return self
|
||||
}
|
||||
|
||||
self.describe = function (key, desc) {
|
||||
options.key[key] = true
|
||||
usage.describe(key, desc)
|
||||
return self
|
||||
}
|
||||
|
||||
self.global = function (globals) {
|
||||
options.global.push.apply(options.global, [].concat(globals))
|
||||
return self
|
||||
}
|
||||
|
||||
self.pkgConf = function (key, path) {
|
||||
var conf = null
|
||||
|
||||
var obj = pkgUp(path)
|
||||
|
||||
// If an object exists in the key, add it to options.configObjects
|
||||
if (obj[key] && typeof obj[key] === 'object') {
|
||||
conf = obj[key]
|
||||
options.configObjects = (options.configObjects || []).concat(conf)
|
||||
}
|
||||
|
||||
return self
|
||||
}
|
||||
|
||||
var pkgs = {}
|
||||
function pkgUp (path) {
|
||||
var npath = path || '*'
|
||||
if (pkgs[npath]) return pkgs[npath]
|
||||
const readPkgUp = require('read-pkg-up')
|
||||
|
||||
var obj = {}
|
||||
try {
|
||||
obj = readPkgUp.sync({
|
||||
cwd: path || requireMainFilename(parentRequire || require)
|
||||
})
|
||||
} catch (noop) {}
|
||||
|
||||
pkgs[npath] = obj.pkg || {}
|
||||
return pkgs[npath]
|
||||
}
|
||||
|
||||
self.parse = function (args, shortCircuit) {
|
||||
if (!shortCircuit) processArgs = args
|
||||
return parseArgs(args, shortCircuit)
|
||||
}
|
||||
|
||||
self.option = self.options = function (key, opt) {
|
||||
if (typeof key === 'object') {
|
||||
Object.keys(key).forEach(function (k) {
|
||||
self.options(k, key[k])
|
||||
})
|
||||
} else {
|
||||
assert(typeof opt === 'object', 'second argument to option must be an object')
|
||||
|
||||
options.key[key] = true // track manually set keys.
|
||||
|
||||
if (opt.alias) self.alias(key, opt.alias)
|
||||
|
||||
var demand = opt.demand || opt.required || opt.require
|
||||
|
||||
if (demand) {
|
||||
self.demand(key, demand)
|
||||
} if ('config' in opt) {
|
||||
self.config(key, opt.configParser)
|
||||
} if ('default' in opt) {
|
||||
self.default(key, opt.default)
|
||||
} if ('nargs' in opt) {
|
||||
self.nargs(key, opt.nargs)
|
||||
} if ('normalize' in opt) {
|
||||
self.normalize(key)
|
||||
} if ('choices' in opt) {
|
||||
self.choices(key, opt.choices)
|
||||
} if ('group' in opt) {
|
||||
self.group(key, opt.group)
|
||||
} if (opt.global) {
|
||||
self.global(key)
|
||||
} if (opt.boolean || opt.type === 'boolean') {
|
||||
self.boolean(key)
|
||||
if (opt.alias) self.boolean(opt.alias)
|
||||
} if (opt.array || opt.type === 'array') {
|
||||
self.array(key)
|
||||
if (opt.alias) self.array(opt.alias)
|
||||
} if (opt.number || opt.type === 'number') {
|
||||
self.number(key)
|
||||
if (opt.alias) self.number(opt.alias)
|
||||
} if (opt.string || opt.type === 'string') {
|
||||
self.string(key)
|
||||
if (opt.alias) self.string(opt.alias)
|
||||
} if (opt.count || opt.type === 'count') {
|
||||
self.count(key)
|
||||
} if (opt.defaultDescription) {
|
||||
options.defaultDescription[key] = opt.defaultDescription
|
||||
} if (opt.skipValidation) {
|
||||
self.skipValidation(key)
|
||||
}
|
||||
|
||||
var desc = opt.describe || opt.description || opt.desc
|
||||
if (desc) {
|
||||
self.describe(key, desc)
|
||||
}
|
||||
|
||||
if (opt.requiresArg) {
|
||||
self.requiresArg(key)
|
||||
}
|
||||
}
|
||||
|
||||
return self
|
||||
}
|
||||
self.getOptions = function () {
|
||||
return options
|
||||
}
|
||||
|
||||
self.group = function (opts, groupName) {
|
||||
var existing = preservedGroups[groupName] || groups[groupName]
|
||||
if (preservedGroups[groupName]) {
|
||||
// the preserved group will be moved to the set of explicitly declared
|
||||
// groups
|
||||
delete preservedGroups[groupName]
|
||||
}
|
||||
|
||||
var seen = {}
|
||||
groups[groupName] = (existing || []).concat(opts).filter(function (key) {
|
||||
if (seen[key]) return false
|
||||
return (seen[key] = true)
|
||||
})
|
||||
return self
|
||||
}
|
||||
self.getGroups = function () {
|
||||
// combine explicit and preserved groups. explicit groups should be first
|
||||
return assign({}, groups, preservedGroups)
|
||||
}
|
||||
|
||||
// as long as options.envPrefix is not undefined,
|
||||
// parser will apply env vars matching prefix to argv
|
||||
self.env = function (prefix) {
|
||||
if (prefix === false) options.envPrefix = undefined
|
||||
else options.envPrefix = prefix || ''
|
||||
return self
|
||||
}
|
||||
|
||||
self.wrap = function (cols) {
|
||||
usage.wrap(cols)
|
||||
return self
|
||||
}
|
||||
|
||||
var strict = false
|
||||
self.strict = function () {
|
||||
strict = true
|
||||
return self
|
||||
}
|
||||
self.getStrict = function () {
|
||||
return strict
|
||||
}
|
||||
|
||||
self.showHelp = function (level) {
|
||||
if (!self.parsed) parseArgs(processArgs) // run parser, if it has not already been executed.
|
||||
usage.showHelp(level)
|
||||
return self
|
||||
}
|
||||
|
||||
var versionOpt = null
|
||||
self.version = function (opt, msg, ver) {
|
||||
if (arguments.length === 0) {
|
||||
ver = guessVersion()
|
||||
opt = 'version'
|
||||
} else if (arguments.length === 1) {
|
||||
ver = opt
|
||||
opt = 'version'
|
||||
} else if (arguments.length === 2) {
|
||||
ver = msg
|
||||
}
|
||||
|
||||
versionOpt = opt
|
||||
msg = msg || usage.deferY18nLookup('Show version number')
|
||||
|
||||
usage.version(ver || undefined)
|
||||
self.boolean(versionOpt)
|
||||
self.global(versionOpt)
|
||||
self.describe(versionOpt, msg)
|
||||
return self
|
||||
}
|
||||
|
||||
function guessVersion () {
|
||||
var obj = pkgUp()
|
||||
|
||||
return obj.version || 'unknown'
|
||||
}
|
||||
|
||||
var helpOpt = null
|
||||
self.addHelpOpt = self.help = function (opt, msg) {
|
||||
opt = opt || 'help'
|
||||
helpOpt = opt
|
||||
self.boolean(opt)
|
||||
self.global(opt)
|
||||
self.describe(opt, msg || usage.deferY18nLookup('Show help'))
|
||||
return self
|
||||
}
|
||||
|
||||
self.showHelpOnFail = function (enabled, message) {
|
||||
usage.showHelpOnFail(enabled, message)
|
||||
return self
|
||||
}
|
||||
|
||||
var exitProcess = true
|
||||
self.exitProcess = function (enabled) {
|
||||
if (typeof enabled !== 'boolean') {
|
||||
enabled = true
|
||||
}
|
||||
exitProcess = enabled
|
||||
return self
|
||||
}
|
||||
self.getExitProcess = function () {
|
||||
return exitProcess
|
||||
}
|
||||
|
||||
var completionCommand = null
|
||||
self.completion = function (cmd, desc, fn) {
|
||||
// a function to execute when generating
|
||||
// completions can be provided as the second
|
||||
// or third argument to completion.
|
||||
if (typeof desc === 'function') {
|
||||
fn = desc
|
||||
desc = null
|
||||
}
|
||||
|
||||
// register the completion command.
|
||||
completionCommand = cmd || 'completion'
|
||||
if (!desc && desc !== false) {
|
||||
desc = 'generate bash completion script'
|
||||
}
|
||||
self.command(completionCommand, desc)
|
||||
|
||||
// a function can be provided
|
||||
if (fn) completion.registerFunction(fn)
|
||||
|
||||
return self
|
||||
}
|
||||
|
||||
self.showCompletionScript = function ($0) {
|
||||
$0 = $0 || self.$0
|
||||
console.log(completion.generateCompletionScript($0))
|
||||
return self
|
||||
}
|
||||
|
||||
self.getCompletion = function (args, done) {
|
||||
completion.getCompletion(args, done)
|
||||
}
|
||||
|
||||
self.locale = function (locale) {
|
||||
if (arguments.length === 0) {
|
||||
guessLocale()
|
||||
return y18n.getLocale()
|
||||
}
|
||||
detectLocale = false
|
||||
y18n.setLocale(locale)
|
||||
return self
|
||||
}
|
||||
|
||||
self.updateStrings = self.updateLocale = function (obj) {
|
||||
detectLocale = false
|
||||
y18n.updateLocale(obj)
|
||||
return self
|
||||
}
|
||||
|
||||
var detectLocale = true
|
||||
self.detectLocale = function (detect) {
|
||||
detectLocale = detect
|
||||
return self
|
||||
}
|
||||
self.getDetectLocale = function () {
|
||||
return detectLocale
|
||||
}
|
||||
|
||||
self.getUsageInstance = function () {
|
||||
return usage
|
||||
}
|
||||
|
||||
self.getValidationInstance = function () {
|
||||
return validation
|
||||
}
|
||||
|
||||
self.getCommandInstance = function () {
|
||||
return command
|
||||
}
|
||||
|
||||
self.terminalWidth = function () {
|
||||
return require('window-size').width
|
||||
}
|
||||
|
||||
Object.defineProperty(self, 'argv', {
|
||||
get: function () {
|
||||
var args = null
|
||||
|
||||
try {
|
||||
args = parseArgs(processArgs)
|
||||
} catch (err) {
|
||||
usage.fail(err.message, err)
|
||||
}
|
||||
|
||||
return args
|
||||
},
|
||||
enumerable: true
|
||||
})
|
||||
|
||||
function parseArgs (args, shortCircuit) {
|
||||
options.__ = y18n.__
|
||||
options.configuration = pkgUp(cwd)['yargs'] || {}
|
||||
const parsed = Parser.detailed(args, options)
|
||||
const argv = parsed.argv
|
||||
var aliases = parsed.aliases
|
||||
|
||||
argv.$0 = self.$0
|
||||
self.parsed = parsed
|
||||
|
||||
guessLocale() // guess locale lazily, so that it can be turned off in chain.
|
||||
|
||||
// while building up the argv object, there
|
||||
// are two passes through the parser. If completion
|
||||
// is being performed short-circuit on the first pass.
|
||||
if (shortCircuit) {
|
||||
return argv
|
||||
}
|
||||
|
||||
// if there's a handler associated with a
|
||||
// command defer processing to it.
|
||||
var handlerKeys = command.getCommands()
|
||||
for (var i = 0, cmd; (cmd = argv._[i]) !== undefined; i++) {
|
||||
if (~handlerKeys.indexOf(cmd) && cmd !== completionCommand) {
|
||||
setPlaceholderKeys(argv)
|
||||
return command.runCommand(cmd, self, parsed)
|
||||
}
|
||||
}
|
||||
|
||||
// generate a completion script for adding to ~/.bashrc.
|
||||
if (completionCommand && ~argv._.indexOf(completionCommand) && !argv[completion.completionKey]) {
|
||||
if (exitProcess) setBlocking(true)
|
||||
self.showCompletionScript()
|
||||
if (exitProcess) {
|
||||
process.exit(0)
|
||||
}
|
||||
}
|
||||
|
||||
// we must run completions first, a user might
|
||||
// want to complete the --help or --version option.
|
||||
if (completion.completionKey in argv) {
|
||||
if (exitProcess) setBlocking(true)
|
||||
|
||||
// we allow for asynchronous completions,
|
||||
// e.g., loading in a list of commands from an API.
|
||||
var completionArgs = args.slice(args.indexOf('--' + completion.completionKey) + 1)
|
||||
completion.getCompletion(completionArgs, function (completions) {
|
||||
;(completions || []).forEach(function (completion) {
|
||||
console.log(completion)
|
||||
})
|
||||
|
||||
if (exitProcess) {
|
||||
process.exit(0)
|
||||
}
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
var skipValidation = false
|
||||
|
||||
// Handle 'help' and 'version' options
|
||||
Object.keys(argv).forEach(function (key) {
|
||||
if (key === helpOpt && argv[key]) {
|
||||
if (exitProcess) setBlocking(true)
|
||||
|
||||
skipValidation = true
|
||||
self.showHelp('log')
|
||||
if (exitProcess) {
|
||||
process.exit(0)
|
||||
}
|
||||
} else if (key === versionOpt && argv[key]) {
|
||||
if (exitProcess) setBlocking(true)
|
||||
|
||||
skipValidation = true
|
||||
usage.showVersion()
|
||||
if (exitProcess) {
|
||||
process.exit(0)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
// Check if any of the options to skip validation were provided
|
||||
if (!skipValidation && options.skipValidation.length > 0) {
|
||||
skipValidation = Object.keys(argv).some(function (key) {
|
||||
return options.skipValidation.indexOf(key) >= 0
|
||||
})
|
||||
}
|
||||
|
||||
// If the help or version options where used and exitProcess is false,
|
||||
// or if explicitly skipped, we won't run validations
|
||||
if (!skipValidation) {
|
||||
if (parsed.error) throw parsed.error
|
||||
|
||||
// if we're executed via bash completion, don't
|
||||
// bother with validation.
|
||||
if (!argv[completion.completionKey]) {
|
||||
validation.nonOptionCount(argv)
|
||||
validation.missingArgumentValue(argv)
|
||||
validation.requiredArguments(argv)
|
||||
if (strict) validation.unknownArguments(argv, aliases)
|
||||
validation.customChecks(argv, aliases)
|
||||
validation.limitedChoices(argv)
|
||||
validation.implications(argv)
|
||||
}
|
||||
}
|
||||
|
||||
setPlaceholderKeys(argv)
|
||||
|
||||
return argv
|
||||
}
|
||||
|
||||
function guessLocale () {
|
||||
if (!detectLocale) return
|
||||
|
||||
try {
|
||||
const osLocale = require('os-locale')
|
||||
self.locale(osLocale.sync({ spawn: false }))
|
||||
} catch (err) {
|
||||
// if we explode looking up locale just noop
|
||||
// we'll keep using the default language 'en'.
|
||||
}
|
||||
}
|
||||
|
||||
function setPlaceholderKeys (argv) {
|
||||
Object.keys(options.key).forEach(function (key) {
|
||||
// don't set placeholder keys for dot
|
||||
// notation options 'foo.bar'.
|
||||
if (~key.indexOf('.')) return
|
||||
if (typeof argv[key] === 'undefined') argv[key] = undefined
|
||||
})
|
||||
}
|
||||
|
||||
return self
|
||||
}
|
||||
|
||||
// rebase an absolute path to a relative one with respect to a base directory
|
||||
// exported for tests
|
||||
exports.rebase = rebase
|
||||
function rebase (base, dir) {
|
||||
return path.relative(base, dir)
|
||||
}
|
||||
Reference in New Issue
Block a user