1
- import 'dart:io' ;
2
-
3
1
import 'package:pub_semver/pub_semver.dart' ;
4
- import 'package:pubspec_parse/pubspec_parse.dart' ;
5
2
import 'package:serverpod_cli/src/analyzer/code_analysis_collector.dart' ;
6
- import 'package:serverpod_cli/src/util/pubspec_helpers.dart' ;
7
- import 'package:yaml/yaml.dart' ;
3
+ import 'package:serverpod_cli/src/util/pubspec_plus.dart' ;
8
4
5
+ /// Warnings for when the package version does not match the version of the
6
+ /// Serverpod's CLI.
9
7
class ServerpodPackagesVersionCheckWarnings {
10
8
static const incompatibleVersion =
11
9
'The package version does not match the version of the Serverpod\' s '
@@ -17,112 +15,40 @@ class ServerpodPackagesVersionCheckWarnings {
17
15
'the Serverpod packages.' ;
18
16
}
19
17
20
- List <SourceSpanSeverityException > performServerpodPackagesAndCliVersionCheck (
21
- Version cliVersion,
22
- Directory directory,
23
- ) {
24
- List <SourceSpanSeverityException > accumulatedWarnings = [];
25
-
26
- var pubspecFiles = findPubspecsFiles (
27
- directory,
28
- ignorePaths: ['vendor' , 'serverpod' ],
29
- );
30
- if (pubspecFiles.isEmpty) {
31
- return accumulatedWarnings;
32
- }
33
-
34
- for (var pubspecFile in pubspecFiles) {
35
- try {
36
- var file = pubspecFile.readAsStringSync ();
37
- var pubspec = Pubspec .parse (file);
38
- var yaml = loadYaml (file, sourceUrl: pubspecFile.uri) as YamlMap ;
39
- var warnings =
40
- _validateServerpodPackagesVersion (cliVersion, pubspec, yaml);
41
-
42
- accumulatedWarnings.addAll (warnings);
43
- } catch (e) {
44
- // TODO: Log to debug output
45
- // Failed to open or parse pubspec file
46
- }
47
- }
48
-
49
- return accumulatedWarnings;
18
+ extension on PubspecPlus {
19
+ Iterable <HostedDep > get serverpodDeps =>
20
+ deps.whereType <HostedDep >().where ((d) => d.name.startsWith ('serverpod' ));
50
21
}
51
22
52
- List <SourceSpanSeverityException > _validateServerpodPackagesVersion (
23
+ List <SourceSpanSeverityException > validateServerpodPackagesVersion (
53
24
Version version,
54
- Pubspec pubspec,
55
- YamlMap yamlPubspec,
25
+ PubspecPlus pubspecPlus,
56
26
) {
57
- List <SourceSpanSeverityException > warnings = [];
58
-
59
- var serverpodDependencies =
60
- _getHostedServerpodDependencies (pubspec.dependencies);
61
- if (serverpodDependencies.isNotEmpty) {
62
- warnings.addAll (_validatePackageCompatibilities (
63
- serverpodDependencies, version, yamlPubspec['dependencies' ]));
64
- }
65
-
66
- var serverpodDevDependencies =
67
- _getHostedServerpodDependencies (pubspec.devDependencies);
68
- if (serverpodDevDependencies.isNotEmpty) {
69
- warnings.addAll (_validatePackageCompatibilities (
70
- serverpodDependencies, version, yamlPubspec['devDependencies' ]));
71
- }
72
-
73
- return warnings;
74
- }
75
-
76
- List <MapEntry <String , HostedDependency >> _getHostedServerpodDependencies (
77
- Map <String , Dependency > dependencies,
78
- ) {
79
- return dependencies.entries.fold ([], (hostedDependencies, dependency) {
80
- if (! dependency.key.startsWith ('serverpod' ) ||
81
- dependency.value is ! HostedDependency ) {
82
- return hostedDependencies;
83
- }
84
-
85
- // Cast dependencies to HostedDependency type
86
- return [
87
- ...hostedDependencies,
88
- MapEntry (dependency.key, dependency.value as HostedDependency )
89
- ];
90
- });
27
+ return [
28
+ for (var dep in pubspecPlus.serverpodDeps)
29
+ ..._validatePackageCompatibilities (dep, version)
30
+ ];
91
31
}
92
32
93
33
List <SourceSpanSeverityException > _validatePackageCompatibilities (
94
- List < MapEntry < String , HostedDependency >> serverpodPackages ,
34
+ HostedDep serverpodDep ,
95
35
Version cliVersion,
96
- YamlMap packagesYaml,
97
36
) {
98
37
List <SourceSpanSeverityException > packageWarnings = [];
99
38
100
- for (var element in serverpodPackages) {
101
- var packageName = element.key;
102
- var package = element.value;
103
- var packageYamlNode = packagesYaml.nodes[packageName];
104
-
105
- if (packageYamlNode == null ) {
106
- throw SourceSpanSeverityException (
107
- 'Could not find package "$packageName " in pubspec file.' ,
108
- packagesYaml.span,
109
- severity: SourceSpanSeverity .warning);
110
- }
111
-
112
- var packageVersion = package.version;
113
- if (! packageVersion.allowsAny (cliVersion)) {
114
- packageWarnings.add (SourceSpanSeverityException (
115
- ServerpodPackagesVersionCheckWarnings .incompatibleVersion,
116
- packageYamlNode.span,
117
- severity: SourceSpanSeverity .warning));
118
- }
39
+ var span = serverpodDep.span;
40
+ var version = serverpodDep.dependency.version;
41
+ if (! version.allowsAny (cliVersion)) {
42
+ packageWarnings.add (SourceSpanSeverityException (
43
+ ServerpodPackagesVersionCheckWarnings .incompatibleVersion, span,
44
+ severity: SourceSpanSeverity .warning));
45
+ }
119
46
120
- if (packageVersion is ! Version ) {
121
- packageWarnings.add (SourceSpanSeverityException (
122
- ServerpodPackagesVersionCheckWarnings .approximateVersion (cliVersion),
123
- packageYamlNode.span,
124
- severity: SourceSpanSeverity .warning));
125
- }
47
+ if (version is ! Version ) {
48
+ packageWarnings.add (SourceSpanSeverityException (
49
+ ServerpodPackagesVersionCheckWarnings .approximateVersion (cliVersion),
50
+ span,
51
+ severity: SourceSpanSeverity .warning));
126
52
}
127
53
128
54
return packageWarnings;
0 commit comments