1
1
import * as path from "path" ;
2
+ import * as semver from "semver" ;
2
3
import * as constants from "../constants" ;
3
4
import { performanceLog } from "../common/decorators" ;
4
5
import {
@@ -9,6 +10,7 @@ import {
9
10
import {
10
11
IPackageInstallationManager ,
11
12
INodePackageManager ,
13
+ IStaticConfig ,
12
14
} from "../declarations" ;
13
15
import {
14
16
IFileSystem ,
@@ -26,7 +28,8 @@ export class ProjectTemplatesService implements IProjectTemplatesService {
26
28
private $logger : ILogger ,
27
29
private $packageInstallationManager : IPackageInstallationManager ,
28
30
private $pacoteService : IPacoteService ,
29
- private $packageManager : INodePackageManager
31
+ private $packageManager : INodePackageManager ,
32
+ private $staticConfig : IStaticConfig
30
33
) { }
31
34
32
35
@performanceLog ( )
@@ -45,11 +48,11 @@ export class ProjectTemplatesService implements IProjectTemplatesService {
45
48
constants . RESERVED_TEMPLATE_NAMES [ templateNameParts . name ] ||
46
49
templateNameParts . name ;
47
50
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
+
53
56
const fullTemplateName = await this . $packageManager . getPackageFullName ( {
54
57
name : templateValue ,
55
58
version : version ,
@@ -116,5 +119,25 @@ export class ProjectTemplatesService implements IProjectTemplatesService {
116
119
) ;
117
120
}
118
121
}
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
+ }
119
142
}
120
143
injector . register ( "projectTemplatesService" , ProjectTemplatesService ) ;
0 commit comments