3
3
// BSD-style license that can be found in the LICENSE file.
4
4
5
5
import 'dart:async' ;
6
- import 'dart:io' ;
7
6
8
7
import 'package:file/file.dart' ;
9
8
import 'package:file/local.dart' ;
10
9
import 'package:path/path.dart' as p;
11
10
11
+ import 'sdk_layout.dart' ;
12
+
12
13
class InvalidSdkConfigurationException implements Exception {
13
14
final String ? message;
14
15
@@ -32,164 +33,36 @@ abstract class SdkConfigurationProvider {
32
33
Future <SdkConfiguration > get configuration;
33
34
}
34
35
35
- /// Sdk layout.
36
- ///
37
- /// Contains definition of the default SDK layout.
38
- /// We keep all the path constants in one place for ease of update.
39
- class SdkLayout {
40
- static final sdkDir = p.dirname (p.dirname (Platform .resolvedExecutable));
41
- static final defaultSdkLayout = createDefault (sdkDir);
42
-
43
- static SdkLayout createDefault (String sdkDirectory) {
44
- final sdkJsWeakFileName = 'dart_sdk.js' ;
45
- final sdkJsMapWeakFileName = 'dart_sdk.js.map' ;
46
- final sdkJsSoundFileName = 'dart_sdk_sound.js' ;
47
- final sdkJsMapSoundFileName = 'dart_sdk_sound.js.map' ;
48
- final sdkSummarySoundFileName = 'ddc_outline.dill' ;
49
- final sdkSummaryWeakFileName = 'ddc_outline_unsound.dill' ;
50
- final sdkFullDillSoundFileName = 'ddc_platform.dill' ;
51
- final sdkFullDillWeakFileName = 'ddc_platform_unsound.dill' ;
52
-
53
- final sdkSummaryDirectory = p.join (sdkDirectory, 'lib' , '_internal' );
54
- final sdkJsDirectory =
55
- p.join (sdkDirectory, 'lib' , 'dev_compiler' , 'kernel' , 'amd' );
56
-
57
- final soundSummaryPath =
58
- p.join (sdkSummaryDirectory, sdkSummarySoundFileName);
59
- final soundFullDillPath =
60
- p.join (sdkSummaryDirectory, sdkFullDillSoundFileName);
61
- final soundJsPath = p.join (sdkJsDirectory, sdkJsSoundFileName);
62
- final soundJsMapPath = p.join (sdkJsDirectory, sdkJsMapSoundFileName);
63
-
64
- final weakSummaryPath = p.join (sdkSummaryDirectory, sdkSummaryWeakFileName);
65
- final weakFullDillPath =
66
- p.join (sdkSummaryDirectory, sdkFullDillWeakFileName);
67
- final weakJsPath = p.join (sdkJsDirectory, sdkJsWeakFileName);
68
- final weakJsMapPath = p.join (sdkJsDirectory, sdkJsMapWeakFileName);
69
-
70
- final librariesPath = p.join (sdkDirectory, 'lib' , 'libraries.json' );
71
- final dartdevcSnapshotPath =
72
- p.join (sdkDirectory, 'bin' , 'snapshots' , 'dartdevc.dart.snapshot' );
73
- final kernelWorkerSnapshotPath =
74
- p.join (sdkDirectory, 'bin' , 'snapshots' , 'kernel_worker.dart.snapshot' );
75
-
76
- return SdkLayout (
77
- sdkJsWeakFileName: sdkJsWeakFileName,
78
- sdkJsMapWeakFileName: sdkJsMapWeakFileName,
79
- sdkJsSoundFileName: sdkJsSoundFileName,
80
- sdkJsMapSoundFileName: sdkJsMapSoundFileName,
81
- sdkSummarySoundFileName: sdkSummarySoundFileName,
82
- sdkSummaryWeakFileName: sdkSummaryWeakFileName,
83
- sdkFullDillSoundFileName: sdkFullDillSoundFileName,
84
- sdkFullDillWeakFileName: sdkFullDillWeakFileName,
85
- sdkDirectory: sdkDirectory,
86
- soundSummaryPath: soundSummaryPath,
87
- soundFullDillPath: soundFullDillPath,
88
- soundJsPath: soundJsPath,
89
- soundJsMapPath: soundJsMapPath,
90
- weakSummaryPath: weakSummaryPath,
91
- weakFullDillPath: weakFullDillPath,
92
- weakJsPath: weakJsPath,
93
- weakJsMapPath: weakJsMapPath,
94
- librariesPath: librariesPath,
95
- dartdevcSnapshotPath: dartdevcSnapshotPath,
96
- kernelWorkerSnapshotPath: kernelWorkerSnapshotPath,
97
- );
98
- }
99
-
100
- final String sdkJsWeakFileName;
101
- final String sdkJsMapWeakFileName;
102
- final String sdkJsSoundFileName;
103
- final String sdkJsMapSoundFileName;
104
- final String sdkSummarySoundFileName;
105
- final String sdkSummaryWeakFileName;
106
- final String sdkFullDillSoundFileName;
107
- final String sdkFullDillWeakFileName;
108
-
109
- final String sdkDirectory;
110
-
111
- final String soundSummaryPath;
112
- final String soundFullDillPath;
113
- final String soundJsPath;
114
- final String soundJsMapPath;
115
-
116
- final String weakSummaryPath;
117
- final String weakFullDillPath;
118
- final String weakJsPath;
119
- final String weakJsMapPath;
120
-
121
- final String librariesPath;
122
-
123
- final String dartdevcSnapshotPath;
124
- final String kernelWorkerSnapshotPath;
125
-
126
- SdkLayout ({
127
- required this .sdkJsWeakFileName,
128
- required this .sdkJsMapWeakFileName,
129
- required this .sdkJsSoundFileName,
130
- required this .sdkJsMapSoundFileName,
131
- required this .sdkSummarySoundFileName,
132
- required this .sdkSummaryWeakFileName,
133
- required this .sdkFullDillSoundFileName,
134
- required this .sdkFullDillWeakFileName,
135
- required this .sdkDirectory,
136
- required this .soundSummaryPath,
137
- required this .soundFullDillPath,
138
- required this .soundJsPath,
139
- required this .soundJsMapPath,
140
- required this .weakSummaryPath,
141
- required this .weakFullDillPath,
142
- required this .weakJsPath,
143
- required this .weakJsMapPath,
144
- required this .librariesPath,
145
- required this .dartdevcSnapshotPath,
146
- required this .kernelWorkerSnapshotPath,
147
- });
148
- }
149
-
150
- /// Data class describing the SDK layout.
36
+ /// SDK configuration.
151
37
///
152
38
/// Provides helpers to convert paths to uris that work on all platforms.
153
39
///
154
40
/// Call [validate] method to make sure the files in the configuration
155
41
/// layout exist before reading the files.
156
42
class SdkConfiguration {
157
43
static final defaultSdkLayout = SdkLayout .defaultSdkLayout;
158
- static final defaultConfiguration =
159
- SdkConfiguration .fromSdkLayout (defaultSdkLayout);
44
+ static final defaultConfiguration = SdkConfiguration (defaultSdkLayout);
160
45
161
- String ? sdkDirectory;
162
- String ? weakSdkSummaryPath;
163
- String ? soundSdkSummaryPath;
164
- String ? librariesPath;
165
- String ? compilerWorkerPath;
46
+ SdkLayout ? sdkLayout;
166
47
167
- SdkConfiguration ({
168
- this .sdkDirectory,
169
- this .weakSdkSummaryPath,
170
- this .soundSdkSummaryPath,
171
- this .librariesPath,
172
- this .compilerWorkerPath,
173
- });
48
+ SdkConfiguration (this .sdkLayout);
174
49
175
- SdkConfiguration .empty () : this ();
176
-
177
- SdkConfiguration .fromSdkLayout (SdkLayout sdkLayout)
178
- : this (
179
- sdkDirectory: sdkLayout.sdkDirectory,
180
- weakSdkSummaryPath: sdkLayout.weakSummaryPath,
181
- soundSdkSummaryPath: sdkLayout.soundSummaryPath,
182
- librariesPath: sdkLayout.librariesPath,
183
- compilerWorkerPath: sdkLayout.dartdevcSnapshotPath,
184
- );
50
+ SdkConfiguration .empty () : this (null );
185
51
186
52
static Uri ? _toUri (String ? path) => path == null ? null : p.toUri (path);
187
53
static Uri ? _toAbsoluteUri (String ? path) =>
188
54
path == null ? null : p.toUri (p.absolute (path));
189
55
56
+ String get dartPath => sdkLayout! .dartPath;
57
+ String ? get sdkDirectory => sdkLayout? .sdkDirectory;
58
+ String ? get soundSummaryPath => sdkLayout? .soundSummaryPath;
59
+ String ? get weakSummaryPath => sdkLayout? .weakSummaryPath;
60
+ String ? get librariesPath => sdkLayout? .librariesPath;
61
+ String ? get compilerWorkerPath => sdkLayout? .dartdevcSnapshotPath;
62
+
190
63
Uri ? get sdkDirectoryUri => _toUri (sdkDirectory);
191
- Uri ? get soundSdkSummaryUri => _toUri (soundSdkSummaryPath );
192
- Uri ? get weakSdkSummaryUri => _toUri (weakSdkSummaryPath );
64
+ Uri ? get soundSummaryUri => _toUri (soundSummaryPath );
65
+ Uri ? get weakSummaryUri => _toUri (weakSummaryPath );
193
66
Uri ? get librariesUri => _toUri (librariesPath);
194
67
195
68
/// Note: has to be ///file: Uri to run in an isolate.
@@ -199,6 +72,7 @@ class SdkConfiguration {
199
72
/// exist on disk.
200
73
void validate ({FileSystem fileSystem = const LocalFileSystem ()}) {
201
74
validateSdkDir (fileSystem: fileSystem);
75
+ validateDartExecutable (fileSystem: fileSystem);
202
76
validateSummaries (fileSystem: fileSystem);
203
77
validateLibrariesSpec (fileSystem: fileSystem);
204
78
validateCompilerWorker (fileSystem: fileSystem);
@@ -214,26 +88,36 @@ class SdkConfiguration {
214
88
}
215
89
}
216
90
91
+ /// Throws [InvalidSdkConfigurationException] if SDK root does not
92
+ /// exist on the disk.
93
+ void validateDartExecutable (
94
+ {FileSystem fileSystem = const LocalFileSystem ()}) {
95
+ if (! fileSystem.file (dartPath).existsSync ()) {
96
+ throw InvalidSdkConfigurationException (
97
+ 'Dart executable $dartPath does not exist' );
98
+ }
99
+ }
100
+
217
101
void validateSummaries ({FileSystem fileSystem = const LocalFileSystem ()}) {
218
102
validateSoundSummaries (fileSystem: fileSystem);
219
103
validateWeakSummaries (fileSystem: fileSystem);
220
104
}
221
105
222
106
void validateWeakSummaries (
223
107
{FileSystem fileSystem = const LocalFileSystem ()}) {
224
- if (weakSdkSummaryPath == null ||
225
- ! fileSystem.file (weakSdkSummaryPath ).existsSync ()) {
108
+ if (weakSummaryPath == null ||
109
+ ! fileSystem.file (weakSummaryPath ).existsSync ()) {
226
110
throw InvalidSdkConfigurationException (
227
- 'Sdk summary $weakSdkSummaryPath does not exist' );
111
+ 'Sdk summary $weakSummaryPath does not exist' );
228
112
}
229
113
}
230
114
231
115
void validateSoundSummaries (
232
116
{FileSystem fileSystem = const LocalFileSystem ()}) {
233
- if ((soundSdkSummaryPath == null ||
234
- ! fileSystem.file (soundSdkSummaryPath ).existsSync ())) {
117
+ if ((soundSummaryPath == null ||
118
+ ! fileSystem.file (soundSummaryPath ).existsSync ())) {
235
119
throw InvalidSdkConfigurationException (
236
- 'Sdk summary $soundSdkSummaryPath does not exist' );
120
+ 'Sdk summary $soundSummaryPath does not exist' );
237
121
}
238
122
}
239
123
0 commit comments