@vivo-minigame/cli
Version:
Command line interface for rapid Vivo minigame development
78 lines (65 loc) • 2.84 kB
JavaScript
;var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");_Object$defineProperty(exports, "__esModule", { value: true });exports.getCommand = getCommand;exports.getMetadata = getMetadata;exports.getRegistry = getRegistry;exports.getVersion = getVersion;var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));var _isArray = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/array/is-array"));var _lruCache = _interopRequireDefault(require("lru-cache"));
var _cliSharedUtils = require("@vivo-minigame/cli-shared-utils");
function getCommand(cwd) {
if (!cwd) {
return (0, _cliSharedUtils.hasYarn)() ? 'yarn' : (0, _cliSharedUtils.hasPnpm3OrLater)() ? 'pnpm' : 'npm';
}
return (0, _cliSharedUtils.hasProjectYarn)(cwd) ? 'yarn' : (0, _cliSharedUtils.hasProjectPnpm)(cwd) ? 'pnpm' : 'npm';
}
// Any command that implemented registry-related feature should support
// `-r` / `--registry` option
async function getRegistry({ cwd, packageManager } = {}) {
const args = (0, _cliSharedUtils.minimist)(process.argv, {
alias: {
r: 'registry'
}
});
if (args.registry) {
return args.registry;
}
if (!packageManager) {
packageManager = getCommand(cwd);
}
const { stdout } = await (0, _cliSharedUtils.execa)(packageManager, ['config', 'get', 'registry']);
return stdout;
}
const metadataCache = new _lruCache.default({
max: 200,
maxAge: 1000 * 60 * 30 // 30 min.
});
async function getMetadata(packageName, { field = '', packageManager, cwd } = {}) {
if (!packageManager) {
packageManager = getCommand(cwd);
}
const registry = await getRegistry({ cwd, packageManager });
const metadataKey = `${packageManager}-${registry}-${packageName}`;
let metadata = metadataCache.get(metadataKey);
if (metadata) {
return metadata;
}
const { stdout } = await (0, _cliSharedUtils.execa)(
packageManager,
[
'info',
packageName,
field,
'--json',
'--registry',
registry]
);
metadata = JSON.parse(stdout);
if (packageManager === 'yarn') {
// `yarn info` outputs messages in the form of `{"type": "inspect", data: {}}`
metadata = metadata.data;
}
metadataCache.set(metadataKey, metadata);
return metadata;
}
async function getVersion(packageName, versionRange, cwd) {
const metadata = await getMetadata(packageName, { cwd });
if ((0, _keys.default)(metadata['dist-tags']).includes(versionRange)) {
return metadata['dist-tags'][versionRange];
}
const versions = (0, _isArray.default)(metadata.versions) ? metadata.versions : (0, _keys.default)(metadata.versions);
return _cliSharedUtils.semver.maxSatisfying(versions, versionRange);
}