11import * as path from "path" ;
2+ import * as semver from "semver" ;
23import * as constants from "../constants" ;
34import { performanceLog } from "../common/decorators" ;
45import {
@@ -9,6 +10,7 @@ import {
910import {
1011 IPackageInstallationManager ,
1112 INodePackageManager ,
13+ IStaticConfig ,
1214} from "../declarations" ;
1315import {
1416 IFileSystem ,
@@ -26,7 +28,8 @@ export class ProjectTemplatesService implements IProjectTemplatesService {
2628 private $logger : ILogger ,
2729 private $packageInstallationManager : IPackageInstallationManager ,
2830 private $pacoteService : IPacoteService ,
29- private $packageManager : INodePackageManager
31+ private $packageManager : INodePackageManager ,
32+ private $staticConfig : IStaticConfig
3033 ) { }
3134
3235 @performanceLog ( )
@@ -45,11 +48,11 @@ export class ProjectTemplatesService implements IProjectTemplatesService {
4548 constants . RESERVED_TEMPLATE_NAMES [ templateNameParts . name ] ||
4649 templateNameParts . name ;
4750
48- const version =
49- templateNameParts . version ||
50- ( await this . $packageInstallationManager . getLatestCompatibleVersionSafe (
51- templateValue
52- ) ) ;
51+ const version = await this . getDesiredVersion (
52+ templateValue ,
53+ templateNameParts . version
54+ ) ;
55+
5356 const fullTemplateName = await this . $packageManager . getPackageFullName ( {
5457 name : templateValue ,
5558 version : version ,
@@ -116,5 +119,25 @@ export class ProjectTemplatesService implements IProjectTemplatesService {
116119 ) ;
117120 }
118121 }
122+
123+ private async getDesiredVersion (
124+ templateName : string ,
125+ defaultVersion ?: string
126+ ) {
127+ if ( defaultVersion ) {
128+ return defaultVersion ;
129+ }
130+
131+ try {
132+ const cliMajorVersion = semver . parse (
133+ semver . coerce ( this . $staticConfig . version )
134+ ) . major ;
135+ return `^${ cliMajorVersion } .0.0` ;
136+ } catch ( err ) {
137+ return this . $packageInstallationManager . getLatestCompatibleVersionSafe (
138+ templateName
139+ ) ;
140+ }
141+ }
119142}
120143injector . register ( "projectTemplatesService" , ProjectTemplatesService ) ;
0 commit comments