You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
2.1 KiB
60 lines
2.1 KiB
3 years ago
|
/**
|
||
|
* @fileoverview Main entrypoint for libraries using yargs-parser in Node.js
|
||
|
* CJS and ESM environments.
|
||
|
*
|
||
|
* @license
|
||
|
* Copyright (c) 2016, Contributors
|
||
|
* SPDX-License-Identifier: ISC
|
||
|
*/
|
||
|
import { format } from 'util';
|
||
|
import { readFileSync } from 'fs';
|
||
|
import { normalize, resolve } from 'path';
|
||
|
import { camelCase, decamelize, looksLikeNumber } from './string-utils.js';
|
||
|
import { YargsParser } from './yargs-parser.js';
|
||
|
// See https://github.com/yargs/yargs-parser#supported-nodejs-versions for our
|
||
|
// version support policy. The YARGS_MIN_NODE_VERSION is used for testing only.
|
||
|
const minNodeVersion = (process && process.env && process.env.YARGS_MIN_NODE_VERSION)
|
||
|
? Number(process.env.YARGS_MIN_NODE_VERSION)
|
||
|
: 10;
|
||
|
if (process && process.version) {
|
||
|
const major = Number(process.version.match(/v([^.]+)/)[1]);
|
||
|
if (major < minNodeVersion) {
|
||
|
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`);
|
||
|
}
|
||
|
}
|
||
|
// Creates a yargs-parser instance using Node.js standard libraries:
|
||
|
const env = process ? process.env : {};
|
||
|
const parser = new YargsParser({
|
||
|
cwd: process.cwd,
|
||
|
env: () => {
|
||
|
return env;
|
||
|
},
|
||
|
format,
|
||
|
normalize,
|
||
|
resolve,
|
||
|
// TODO: figure out a way to combine ESM and CJS coverage, such that
|
||
|
// we can exercise all the lines below:
|
||
|
require: (path) => {
|
||
|
if (typeof require !== 'undefined') {
|
||
|
return require(path);
|
||
|
}
|
||
|
else if (path.match(/\.json$/)) {
|
||
|
return readFileSync(path, 'utf8');
|
||
|
}
|
||
|
else {
|
||
|
throw Error('only .json config files are supported in ESM');
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
const yargsParser = function Parser(args, opts) {
|
||
|
const result = parser.parse(args.slice(), opts);
|
||
|
return result.argv;
|
||
|
};
|
||
|
yargsParser.detailed = function (args, opts) {
|
||
|
return parser.parse(args.slice(), opts);
|
||
|
};
|
||
|
yargsParser.camelCase = camelCase;
|
||
|
yargsParser.decamelize = decamelize;
|
||
|
yargsParser.looksLikeNumber = looksLikeNumber;
|
||
|
export default yargsParser;
|