nativescript
Version:
Command-line interface for building NativeScript projects
119 lines • 5.09 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.BasePackageManager = void 0;
const helpers_1 = require("./common/helpers");
class BasePackageManager {
constructor($childProcess, $fs, $hostInfo, $pacoteService, packageManager) {
this.$childProcess = $childProcess;
this.$fs = $fs;
this.$hostInfo = $hostInfo;
this.$pacoteService = $pacoteService;
this.packageManager = packageManager;
}
async isRegistered(packageName) {
if (this.isURL(packageName) ||
this.$fs.exists(packageName) ||
this.isTgz(packageName)) {
return false;
}
try {
const viewResult = await this.view(packageName, { name: true });
// `npm view nonExistingPackageName` will return `nativescript`
// if executed in the root dir of the CLI (npm 6.4.1)
const packageNameRegex = new RegExp(packageName, "i");
const isProperResult = packageNameRegex.test(viewResult);
return isProperResult;
}
catch (e) {
return false;
}
}
async getPackageNameParts(fullPackageName) {
// support <reserved_name>@<version> syntax, for example typescript@1.0.0
// support <scoped_package_name>@<version> syntax, for example @nativescript/vue-template@1.0.0
const lastIndexOfAtSign = fullPackageName.lastIndexOf("@");
let version = "";
let templateName = "";
if (lastIndexOfAtSign > 0) {
templateName = fullPackageName.substr(0, lastIndexOfAtSign).toLowerCase();
version = fullPackageName.substr(lastIndexOfAtSign + 1);
}
return {
name: templateName || fullPackageName,
version: version,
};
}
async getPackageFullName(packageNameParts) {
return packageNameParts.version
? `${packageNameParts.name}@${packageNameParts.version}`
: packageNameParts.name;
}
getPackageManagerExecutableName() {
let npmExecutableName = this.packageManager;
if (this.$hostInfo.isWindows) {
npmExecutableName += ".cmd";
}
return npmExecutableName;
}
async processPackageManagerInstall(packageName, params, opts) {
const npmExecutable = this.getPackageManagerExecutableName();
const stdioValue = (0, helpers_1.isInteractive)() ? "inherit" : "pipe";
await this.$childProcess.spawnFromEvent(npmExecutable, params, "close", {
cwd: opts.cwd,
stdio: stdioValue,
shell: this.$hostInfo.isWindows,
});
// Whenever calling "npm install" or "yarn add" without any arguments (hence installing all dependencies) no output is emitted on stdout
// Luckily, whenever you call "npm install" or "yarn add" to install all dependencies chances are you won't need the name/version of the package you're installing because there is none.
const { isInstallingAllDependencies } = opts;
if (isInstallingAllDependencies) {
return null;
}
const packageMetadata = await this.$pacoteService.manifest(packageName);
return {
name: packageMetadata.name,
version: packageMetadata.version,
};
}
getFlagsString(config, asArray) {
const array = [];
for (const flag in config) {
if (flag === "global" &&
this.packageManager !== "yarn" &&
this.packageManager !== "yarn2") {
array.push(`--${flag}`);
array.push(`${config[flag]}`);
}
else if (config[flag]) {
if (flag === "dist-tags" ||
flag === "versions" ||
flag === "name" ||
flag === "gradle" ||
flag === "version_info") {
if (this.packageManager === "yarn2") {
array.push(`--fields ${flag}`);
}
else {
array.push(` ${flag}`);
}
continue;
}
array.push(`--${flag}`);
}
}
if (asArray) {
return array;
}
return array.join(" ");
}
isTgz(packageName) {
return packageName.indexOf(".tgz") >= 0;
}
isURL(str) {
const urlRegex = "^(?!mailto:)(?:(?:http|https|ftp)://)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$";
const url = new RegExp(urlRegex, "i");
return str.length < 2083 && url.test(str);
}
}
exports.BasePackageManager = BasePackageManager;
//# sourceMappingURL=base-package-manager.js.map
;