Skip to content

Commit 0926207

Browse files
author
Dimitar Tachev
authored
Merge pull request #4088 from NativeScript/tachev/fix-template-versions-match
fix: install the latest compatible v2 templates in stead of the latest tag
2 parents 17fe362 + 9605c24 commit 0926207

2 files changed

Lines changed: 12 additions & 4 deletions

File tree

lib/services/project-templates-service.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ export class ProjectTemplatesService implements IProjectTemplatesService {
3030
}
3131

3232
const templateName = constants.RESERVED_TEMPLATE_NAMES[name.toLowerCase()] || name;
33+
if (!this.$fs.exists(templateName)) {
34+
version = version || await this.$npmInstallationManager.getLatestCompatibleVersion(templateName);
35+
}
36+
3337
const fullTemplateName = version ? `${templateName}@${version}` : templateName;
3438
const templatePackageJsonContent = await this.getTemplatePackageJsonContent(fullTemplateName);
3539
const templateVersion = await this.getTemplateVersion(fullTemplateName);

test/project-templates-service.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,14 @@ import { format } from "util";
88

99
let isDeleteDirectoryCalledForNodeModulesDir = false;
1010
const nativeScriptValidatedTemplatePath = "nsValidatedTemplatePath";
11+
const compatibleTemplateVersion = "1.2.3";
1112

1213
function createTestInjector(configuration: { shouldNpmInstallThrow?: boolean, packageJsonContent?: any } = {}): IInjector {
1314
const injector = new Yok();
1415
injector.register("errors", stubs.ErrorsStub);
1516
injector.register("logger", stubs.LoggerStub);
1617
injector.register("fs", {
17-
exists: (pathToCheck: string) => true,
18+
exists: (pathToCheck: string) => false,
1819

1920
readJson: (pathToFile: string) => configuration.packageJsonContent || {},
2021

@@ -42,6 +43,9 @@ function createTestInjector(configuration: { shouldNpmInstallThrow?: boolean, pa
4243
}
4344

4445
return Promise.resolve(nativeScriptValidatedTemplatePath);
46+
},
47+
getLatestCompatibleVersion: (packageName: string) => {
48+
return compatibleTemplateVersion;
4549
}
4650
});
4751

@@ -164,7 +168,7 @@ describe("project-templates-service", () => {
164168
const fs = testInjector.resolve<IFileSystem>("fs");
165169
fs.exists = (localPath: string): boolean => path.basename(localPath) !== constants.PACKAGE_JSON_FILE_NAME;
166170
const pacoteService = testInjector.resolve<IPacoteService>("pacoteService");
167-
pacoteService.manifest = () => Promise.resolve({ });
171+
pacoteService.manifest = () => Promise.resolve({});
168172
await projectTemplatesService.prepareTemplate(localTemplatePath, "tempFolder");
169173
assert.deepEqual(dataSentToGoogleAnalytics, [
170174
{
@@ -215,7 +219,7 @@ describe("project-templates-service", () => {
215219
const notSupportedVersionString = "not supported version";
216220
const testInjector = createTestInjector({ packageJsonContent: { nativescript: { templateVersion: notSupportedVersionString } } });
217221
const projectTemplatesService = testInjector.resolve<IProjectTemplatesService>("projectTemplatesService");
218-
const expectedError = format(constants.ProjectTemplateErrors.InvalidTemplateVersionStringFormat, 'tns-template-hello-world-ts', notSupportedVersionString);
222+
const expectedError = format(constants.ProjectTemplateErrors.InvalidTemplateVersionStringFormat, `tns-template-hello-world-ts@${compatibleTemplateVersion}`, notSupportedVersionString);
219223
await assert.isRejected(projectTemplatesService.prepareTemplate("typescript", "tempFolder"), expectedError);
220224
});
221225

@@ -238,7 +242,7 @@ describe("project-templates-service", () => {
238242
{
239243
name: "is correct when scoped package name without version is passed",
240244
templateName: "@nativescript/vue-template",
241-
expectedVersion: "",
245+
expectedVersion: compatibleTemplateVersion,
242246
expectedTemplateName: "@nativescript/vue-template"
243247
},
244248
{

0 commit comments

Comments
 (0)