UNPKG

@vivo-minigame/cli

Version:

Command line interface for rapid Vivo minigame development

78 lines (65 loc) 2.84 kB
"use strict";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); }