nativescript
Version:
Command-line interface for building NativeScript projects
100 lines • 4.73 kB
JavaScript
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ProjectTemplatesService = void 0;
const path = require("path");
const semver = require("semver");
const constants = require("../constants");
const decorators_1 = require("../common/decorators");
const yok_1 = require("../common/yok");
class ProjectTemplatesService {
constructor($analyticsService, $fs, $logger, $packageInstallationManager, $pacoteService, $packageManager, $staticConfig) {
this.$analyticsService = $analyticsService;
this.$fs = $fs;
this.$logger = $logger;
this.$packageInstallationManager = $packageInstallationManager;
this.$pacoteService = $pacoteService;
this.$packageManager = $packageManager;
this.$staticConfig = $staticConfig;
this.templatePackageContents = {};
}
async prepareTemplate(templateValue, projectDir) {
if (!templateValue) {
templateValue = constants.RESERVED_TEMPLATE_NAMES["default"];
}
const templateNameParts = await this.$packageManager.getPackageNameParts(templateValue);
templateValue =
constants.RESERVED_TEMPLATE_NAMES[templateNameParts.name] ||
templateNameParts.name;
const version = await this.getDesiredVersion(templateValue, templateNameParts.version);
const fullTemplateName = await this.$packageManager.getPackageFullName({
name: templateValue,
version: version,
});
const templatePackageJsonContent = await this.getTemplatePackageJsonContent(fullTemplateName);
const templateNameToBeTracked = this.getTemplateNameToBeTracked(templateValue, templatePackageJsonContent);
if (templateNameToBeTracked) {
await this.$analyticsService.trackEventActionInGoogleAnalytics({
action: "Create project" /* constants.TrackActionNames.CreateProject */,
isForDevice: null,
additionalData: templateNameToBeTracked,
});
await this.$analyticsService.trackEventActionInGoogleAnalytics({
action: "Using Template" /* constants.TrackActionNames.UsingTemplate */,
additionalData: templateNameToBeTracked,
});
}
return {
templateName: templateValue,
templatePackageJsonContent,
version,
};
}
async getTemplatePackageJsonContent(templateName) {
if (!this.templatePackageContents[templateName]) {
this.templatePackageContents[templateName] = await this.$pacoteService.manifest(templateName, {
fullMetadata: true,
});
}
return this.templatePackageContents[templateName];
}
getTemplateNameToBeTracked(templateName, packageJsonContent) {
try {
if (this.$fs.exists(templateName)) {
const templateNameToBeTracked = (packageJsonContent && packageJsonContent.name) ||
path.basename(templateName);
return `${constants.ANALYTICS_LOCAL_TEMPLATE_PREFIX}${templateNameToBeTracked}`;
}
return templateName;
}
catch (err) {
this.$logger.trace(`Unable to get template name to be tracked, error is: ${err}`);
}
}
async getDesiredVersion(templateName, defaultVersion) {
if (defaultVersion) {
return defaultVersion;
}
if (this.$fs.exists(templateName)) {
return "";
}
try {
const cliMajorVersion = semver.parse(semver.coerce(this.$staticConfig.version)).major;
return `^${cliMajorVersion}.0.0`;
}
catch (err) {
return this.$packageInstallationManager.getLatestCompatibleVersionSafe(templateName);
}
}
}
exports.ProjectTemplatesService = ProjectTemplatesService;
__decorate([
(0, decorators_1.performanceLog)()
], ProjectTemplatesService.prototype, "prepareTemplate", null);
yok_1.injector.register("projectTemplatesService", ProjectTemplatesService);
//# sourceMappingURL=project-templates-service.js.map