[6a3a178] | 1 | /**
|
---|
| 2 | * @fileoverview Main entrypoint for libraries using yargs-parser in Node.js
|
---|
| 3 | * CJS and ESM environments.
|
---|
| 4 | *
|
---|
| 5 | * @license
|
---|
| 6 | * Copyright (c) 2016, Contributors
|
---|
| 7 | * SPDX-License-Identifier: ISC
|
---|
| 8 | */
|
---|
| 9 | import { format } from 'util';
|
---|
| 10 | import { readFileSync } from 'fs';
|
---|
| 11 | import { normalize, resolve } from 'path';
|
---|
| 12 | import { camelCase, decamelize, looksLikeNumber } from './string-utils.js';
|
---|
| 13 | import { YargsParser } from './yargs-parser.js';
|
---|
| 14 | // See https://github.com/yargs/yargs-parser#supported-nodejs-versions for our
|
---|
| 15 | // version support policy. The YARGS_MIN_NODE_VERSION is used for testing only.
|
---|
| 16 | const minNodeVersion = (process && process.env && process.env.YARGS_MIN_NODE_VERSION)
|
---|
| 17 | ? Number(process.env.YARGS_MIN_NODE_VERSION)
|
---|
| 18 | : 10;
|
---|
| 19 | if (process && process.version) {
|
---|
| 20 | const major = Number(process.version.match(/v([^.]+)/)[1]);
|
---|
| 21 | if (major < minNodeVersion) {
|
---|
| 22 | throw Error(`yargs parser supports a minimum Node.js version of ${minNodeVersion}. Read our version support policy: https://github.com/yargs/yargs-parser#supported-nodejs-versions`);
|
---|
| 23 | }
|
---|
| 24 | }
|
---|
| 25 | // Creates a yargs-parser instance using Node.js standard libraries:
|
---|
| 26 | const env = process ? process.env : {};
|
---|
| 27 | const parser = new YargsParser({
|
---|
| 28 | cwd: process.cwd,
|
---|
| 29 | env: () => {
|
---|
| 30 | return env;
|
---|
| 31 | },
|
---|
| 32 | format,
|
---|
| 33 | normalize,
|
---|
| 34 | resolve,
|
---|
| 35 | // TODO: figure out a way to combine ESM and CJS coverage, such that
|
---|
| 36 | // we can exercise all the lines below:
|
---|
| 37 | require: (path) => {
|
---|
| 38 | if (typeof require !== 'undefined') {
|
---|
| 39 | return require(path);
|
---|
| 40 | }
|
---|
| 41 | else if (path.match(/\.json$/)) {
|
---|
| 42 | return readFileSync(path, 'utf8');
|
---|
| 43 | }
|
---|
| 44 | else {
|
---|
| 45 | throw Error('only .json config files are supported in ESM');
|
---|
| 46 | }
|
---|
| 47 | }
|
---|
| 48 | });
|
---|
| 49 | const yargsParser = function Parser(args, opts) {
|
---|
| 50 | const result = parser.parse(args.slice(), opts);
|
---|
| 51 | return result.argv;
|
---|
| 52 | };
|
---|
| 53 | yargsParser.detailed = function (args, opts) {
|
---|
| 54 | return parser.parse(args.slice(), opts);
|
---|
| 55 | };
|
---|
| 56 | yargsParser.camelCase = camelCase;
|
---|
| 57 | yargsParser.decamelize = decamelize;
|
---|
| 58 | yargsParser.looksLikeNumber = looksLikeNumber;
|
---|
| 59 | export default yargsParser;
|
---|