@vivo-minigame/cli
Version:
Command line interface for rapid Vivo minigame development
4 lines • 2.34 kB
JavaScript
;var _Object$defineProperty=require("@babel/runtime-corejs2/core-js/object/define-property"),_interopRequireDefault=require("@babel/runtime-corejs2/helpers/interopRequireDefault");_Object$defineProperty(exports,"__esModule",{value:!0}),exports.getCommand=getCommand,exports.getMetadata=getMetadata,exports.getRegistry=getRegistry,exports.getVersion=getVersion;var _keys=_interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys")),_isArray=_interopRequireDefault(require("@babel/runtime-corejs2/core-js/array/is-array")),_lruCache=_interopRequireDefault(require("lru-cache")),_cliSharedUtils=require("@vivo-minigame/cli-shared-utils");function getCommand(cwd){return cwd?(0,_cliSharedUtils.hasProjectYarn)(cwd)?"yarn":(0,_cliSharedUtils.hasProjectPnpm)(cwd)?"pnpm":"npm":(0,_cliSharedUtils.hasYarn)()?"yarn":(0,_cliSharedUtils.hasPnpm3OrLater)()?"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;packageManager||(packageManager=getCommand(cwd));const{stdout}=await(0,_cliSharedUtils.execa)(packageManager,["config","get","registry"]);return stdout}const metadataCache=new _lruCache.default({max:200,maxAge:1800000// 30 min.
});async function getMetadata(packageName,{field="",packageManager,cwd}={}){packageManager||(packageManager=getCommand(cwd));const registry=await getRegistry({cwd,packageManager}),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]);return metadata=JSON.parse(stdout),"yarn"===packageManager&&(metadata=metadata.data),metadataCache.set(metadataKey,metadata),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)}