summaryrefslogtreecommitdiff
path: root/node_modules/yargs/index.cjs
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/yargs/index.cjs')
-rw-r--r--node_modules/yargs/index.cjs53
1 files changed, 53 insertions, 0 deletions
diff --git a/node_modules/yargs/index.cjs b/node_modules/yargs/index.cjs
new file mode 100644
index 0000000..d1eee82
--- /dev/null
+++ b/node_modules/yargs/index.cjs
@@ -0,0 +1,53 @@
+'use strict';
+// classic singleton yargs API, to use yargs
+// without running as a singleton do:
+// require('yargs/yargs')(process.argv.slice(2))
+const {Yargs, processArgv} = require('./build/index.cjs');
+
+Argv(processArgv.hideBin(process.argv));
+
+module.exports = Argv;
+
+function Argv(processArgs, cwd) {
+ const argv = Yargs(processArgs, cwd, require);
+ singletonify(argv);
+ // TODO(bcoe): warn if argv.parse() or argv.argv is used directly.
+ return argv;
+}
+
+function defineGetter(obj, key, getter) {
+ Object.defineProperty(obj, key, {
+ configurable: true,
+ enumerable: true,
+ get: getter,
+ });
+}
+function lookupGetter(obj, key) {
+ const desc = Object.getOwnPropertyDescriptor(obj, key);
+ if (typeof desc !== 'undefined') {
+ return desc.get;
+ }
+}
+
+/* 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),
+ ...Object.getOwnPropertyNames(inst.constructor.prototype),
+ ].forEach(key => {
+ if (key === 'argv') {
+ defineGetter(Argv, key, lookupGetter(inst, key));
+ } else if (typeof inst[key] === 'function') {
+ Argv[key] = inst[key].bind(inst);
+ } else {
+ defineGetter(Argv, '$0', () => inst.$0);
+ defineGetter(Argv, 'parsed', () => inst.parsed);
+ }
+ });
+}