@serpent/common-cli
Version:
通用的 cli 相关的函数
406 lines (398 loc) • 15.3 kB
JavaScript
'use strict';
var context = require('./context-e98d804e.cjs');
var Dir = require('./Dir-a1286a2f.cjs');
require('module');
var path = require('path');
require('assert');
var readJsonFile = require('./readJsonFile-f1989956.cjs');
require('fs');
var tslib_es6 = require('./tslib.es6-8ea38f41.cjs');
var run = require('./run.cjs');
require('./_commonjsHelpers-ed042b00.cjs');
require('./exists-4a19b288.cjs');
require('os');
require('node:buffer');
require('node:path');
require('node:child_process');
require('node:process');
require('child_process');
require('node:url');
require('node:os');
require('./index-94e9b39b.cjs');
require('events');
require('buffer');
require('stream');
require('util');
require('url');
require('./info-08047f0f.cjs');
require('./warn-8730a30c.cjs');
require('./supportColor-07ee281e.cjs');
require('./helper-a8839c0a.cjs');
require('crypto');
var PackageManager = /** @class */ (function () {
function PackageManager() {
var root = context.findupPackageRoot();
this.root = root;
}
Object.defineProperty(PackageManager.prototype, "lockfilePath", {
get: function () {
return path.join(this.root, this.lockfile);
},
enumerable: false,
configurable: true
});
Object.defineProperty(PackageManager.prototype, "packagePath", {
/** package.json 文件路径 */
get: function () {
return path.join(this.root, 'package.json');
},
enumerable: false,
configurable: true
});
PackageManager.prototype.isLockFileExists = function () {
return context.existsFile(this.lockfilePath);
};
/** 获取当前项目的 registry 配置 */
PackageManager.prototype.registry = function () {
return tslib_es6.__awaiter(this, void 0, void 0, function () {
var _a;
return tslib_es6.__generator(this, function (_b) {
switch (_b.label) {
case 0:
_a = run.silentRunOutput;
return [4 /*yield*/, this.registryArgs()];
case 1: return [2 /*return*/, _a.apply(void 0, [_b.sent()])];
}
});
});
};
PackageManager.prototype.tagVersionPrefix = function () {
return tslib_es6.__awaiter(this, void 0, void 0, function () {
var _a;
return tslib_es6.__generator(this, function (_b) {
switch (_b.label) {
case 0:
_a = run.silentRunOutput;
return [4 /*yield*/, this.tagVersionPrefixArgs()];
case 1: return [2 /*return*/, _a.apply(void 0, [_b.sent()])];
}
});
});
};
/** 初始化安装依赖 */
PackageManager.prototype.initInstall = function (options) {
return tslib_es6.__awaiter(this, void 0, void 0, function () {
var _a;
return tslib_es6.__generator(this, function (_b) {
switch (_b.label) {
case 0:
_a = ((options === null || options === void 0 ? void 0 : options.silent) ? run.silentRun : run.run);
return [4 /*yield*/, this.initInstallArgs()];
case 1: return [4 /*yield*/, _a.apply(void 0, [_b.sent()])];
case 2:
_b.sent();
return [2 /*return*/];
}
});
});
};
/** ci 安装依赖 */
PackageManager.prototype.ciInstall = function (options) {
return tslib_es6.__awaiter(this, void 0, void 0, function () {
var _a;
return tslib_es6.__generator(this, function (_b) {
switch (_b.label) {
case 0:
_a = ((options === null || options === void 0 ? void 0 : options.silent) ? run.silentRun : run.run);
return [4 /*yield*/, this.initInstallArgs()];
case 1: return [4 /*yield*/, _a.apply(void 0, [_b.sent()])];
case 2:
_b.sent();
return [2 /*return*/];
}
});
});
};
/** 运行 package.json 中的 scripts 脚本 */
PackageManager.prototype.runScript = function (name, options) {
return tslib_es6.__awaiter(this, void 0, void 0, function () {
var _a;
return tslib_es6.__generator(this, function (_b) {
switch (_b.label) {
case 0:
_a = ((options === null || options === void 0 ? void 0 : options.silent) ? run.silentRun : run.run);
return [4 /*yield*/, this.runScriptArgs(name)];
case 1: return [4 /*yield*/, _a.apply(void 0, [_b.sent()])];
case 2:
_b.sent();
return [2 /*return*/];
}
});
});
};
/**
* 更新 package.json 中的版本号(如果对应的 lock 文件有需要的话,也会同步更新)
*/
PackageManager.prototype.updateVersion = function (version) {
return tslib_es6.__awaiter(this, void 0, void 0, function () {
var jf;
return tslib_es6.__generator(this, function (_a) {
jf = new Dir.JsonFile(path.join(this.root, 'package.json'));
jf.set('version', version);
jf.save();
return [2 /*return*/];
});
});
};
return PackageManager;
}());
var Npm = /** @class */ (function (_super) {
tslib_es6.__extends(Npm, _super);
function Npm() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.name = 'npm';
_this.lockfile = 'package-lock.json';
return _this;
}
/** 获取当前系统安装的 npm 版本号 */
Npm.prototype.version = function () {
return run.silentRunOutput('npm --version');
};
/** 获取 registry 的命令 */
Npm.prototype.registryArgs = function () {
return tslib_es6.__awaiter(this, void 0, void 0, function () {
return tslib_es6.__generator(this, function (_a) {
return [2 /*return*/, ['npm', 'config', 'get', 'registry']];
});
});
};
/** 获取读取 tag 的前缀配置的命令 */
Npm.prototype.tagVersionPrefixArgs = function () {
return tslib_es6.__awaiter(this, void 0, void 0, function () {
return tslib_es6.__generator(this, function (_a) {
return [2 /*return*/, ['npm', 'config', 'get', 'tag-version-prefix']];
});
});
};
/** 获取初始化安装依赖的命令 */
Npm.prototype.initInstallArgs = function () {
return tslib_es6.__awaiter(this, void 0, void 0, function () {
return tslib_es6.__generator(this, function (_a) {
return [2 /*return*/, ['npm', 'install']];
});
});
};
/** 获取 ci 中安装依赖的命令 */
Npm.prototype.ciInstallArgs = function () {
return tslib_es6.__awaiter(this, void 0, void 0, function () {
return tslib_es6.__generator(this, function (_a) {
if (this.isLockFileExists()) {
return [2 /*return*/, ['npm', 'ci', '--engine-strict']];
}
else {
return [2 /*return*/, ['npm', 'install', '--no-package-lock', '--no-production', '--engine-strict']];
}
});
});
};
/** 运行运行 scripts 中脚本的命令 */
Npm.prototype.runScriptArgs = function (name) {
return tslib_es6.__awaiter(this, void 0, void 0, function () {
return tslib_es6.__generator(this, function (_a) {
return [2 /*return*/, ['npm', 'run', name]];
});
});
};
/**
* 更新版本号
*/
Npm.prototype.updateVersion = function (version) {
return tslib_es6.__awaiter(this, void 0, void 0, function () {
var jf;
return tslib_es6.__generator(this, function (_a) {
_super.prototype.updateVersion.call(this, version);
// 更新 lock 文件中的版本号
if (this.isLockFileExists()) {
jf = new Dir.JsonFile(this.lockfilePath);
if (jf.has('version')) {
jf.set('version', version);
}
if (jf.has('packages..version')) {
jf.set('packages..version', version);
}
jf.save();
}
return [2 /*return*/];
});
});
};
return Npm;
}(PackageManager));
var Pnpm = /** @class */ (function (_super) {
tslib_es6.__extends(Pnpm, _super);
function Pnpm() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.name = 'pnpm';
_this.lockfile = 'pnpm-lock.yaml';
return _this;
}
/** 获取当前系统安装的 pnpm 版本号 */
Pnpm.prototype.version = function () {
return run.silentRunOutput('pnpm --version');
};
/** 获取 registry 的命令 */
Pnpm.prototype.registryArgs = function () {
return tslib_es6.__awaiter(this, void 0, void 0, function () {
return tslib_es6.__generator(this, function (_a) {
return [2 /*return*/, ['pnpm', 'config', 'get', 'registry']];
});
});
};
/** 获取读取 tag 的前缀配置的命令 */
Pnpm.prototype.tagVersionPrefixArgs = function () {
return tslib_es6.__awaiter(this, void 0, void 0, function () {
return tslib_es6.__generator(this, function (_a) {
return [2 /*return*/, ['pnpm', 'config', 'get', 'tag-version-prefix']];
});
});
};
/** 获取初始化安装依赖的命令 */
Pnpm.prototype.initInstallArgs = function () {
return tslib_es6.__awaiter(this, void 0, void 0, function () {
return tslib_es6.__generator(this, function (_a) {
return [2 /*return*/, ['pnpm', 'install']];
});
});
};
/** 获取 ci 中安装依赖的命令 */
Pnpm.prototype.ciInstallArgs = function () {
return tslib_es6.__awaiter(this, void 0, void 0, function () {
return tslib_es6.__generator(this, function (_a) {
if (this.isLockFileExists()) {
return [2 /*return*/, ['pnpm', 'install', '--frozen-lockfile']];
}
else {
return [2 /*return*/, ['pnpm', 'install', '--no-lockfile']];
}
});
});
};
/** 运行运行 scripts 中脚本的命令 */
Pnpm.prototype.runScriptArgs = function (name) {
return tslib_es6.__awaiter(this, void 0, void 0, function () {
return tslib_es6.__generator(this, function (_a) {
return [2 /*return*/, ['pnpm', 'run', name]];
});
});
};
return Pnpm;
}(PackageManager));
var Yarn = /** @class */ (function (_super) {
tslib_es6.__extends(Yarn, _super);
function Yarn() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.name = 'yarn';
_this.lockfile = 'yarn.lock';
return _this;
}
/** 获取当前系统安装的 yarn 版本号 */
Yarn.prototype.version = function () {
return run.silentRunOutput('yarn --version');
};
/** 获取 registry 的命令 */
Yarn.prototype.registryArgs = function () {
return tslib_es6.__awaiter(this, void 0, void 0, function () {
return tslib_es6.__generator(this, function (_a) {
return [2 /*return*/, ['yarn', 'config', 'get', 'registry']];
});
});
};
/** 获取读取 tag 的前缀配置的命令 */
Yarn.prototype.tagVersionPrefixArgs = function () {
return tslib_es6.__awaiter(this, void 0, void 0, function () {
return tslib_es6.__generator(this, function (_a) {
return [2 /*return*/, ['yarn', 'config', 'get', 'version-tag-prefix']];
});
});
};
/** 获取初始化安装依赖的命令 */
Yarn.prototype.initInstallArgs = function () {
return tslib_es6.__awaiter(this, void 0, void 0, function () {
return tslib_es6.__generator(this, function (_a) {
return [2 /*return*/, ['yarn', 'install']];
});
});
};
/** 获取 ci 中安装依赖的命令 */
Yarn.prototype.ciInstallArgs = function () {
return tslib_es6.__awaiter(this, void 0, void 0, function () {
return tslib_es6.__generator(this, function (_a) {
return [2 /*return*/, ['yarn', 'install', '--frozen-lockfile', '--production=false']];
});
});
};
/** 运行运行 scripts 中脚本的命令 */
Yarn.prototype.runScriptArgs = function (name) {
return tslib_es6.__awaiter(this, void 0, void 0, function () {
return tslib_es6.__generator(this, function (_a) {
return [2 /*return*/, ['yarn', name]];
});
});
};
return Yarn;
}(PackageManager));
var CLIENT_KEY_MAP = {};
var CLIENT_INSTANCE_MAP = {};
function getPackageManager(npmClientKey) {
var key = npmClientKey || tryGetNpmClient();
if (CLIENT_INSTANCE_MAP[key])
return CLIENT_INSTANCE_MAP[key];
var instance;
if (key === 'npm') {
instance = new Npm();
}
else if (key === 'pnpm') {
instance = new Pnpm();
}
else if (key === 'yarn') {
instance = new Yarn();
}
else {
throw new Error("".concat(key, " is not a valid package manager name"));
}
CLIENT_INSTANCE_MAP[key] = instance;
return instance;
}
function tryGetNpmClient(workDirectory, defaultClient) {
var _a;
if (defaultClient === void 0) { defaultClient = 'npm'; }
var refFile = workDirectory || process.cwd();
if (CLIENT_KEY_MAP[refFile])
return CLIENT_KEY_MAP[refFile];
var returnClient = defaultClient;
var root = context.findupPackageRoot(refFile);
var pkg = readJsonFile.readJsonFile(path.join(root, 'package.json'));
var configClient = (_a = pkg.durka) === null || _a === void 0 ? void 0 : _a.npmClient;
if (configClient) {
returnClient = configClient;
}
else {
var lockFiles = [
['yarn', 'yarn.lock'],
['pnpm', 'pnpm-lock.yaml'],
['npm', 'package-lock.json'],
];
for (var _i = 0, lockFiles_1 = lockFiles; _i < lockFiles_1.length; _i++) {
var _b = lockFiles_1[_i], client = _b[0], filename = _b[1];
if (context.existsFile(path.join(root, filename))) {
returnClient = client;
break;
}
}
}
CLIENT_KEY_MAP[refFile] = returnClient;
return returnClient;
}
exports.PackageManager = PackageManager;
exports.getPackageManager = getPackageManager;
exports.tryGetNpmClient = tryGetNpmClient;