| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library pubspec; | 5 library pubspec; |
| 6 | 6 |
| 7 import '../../pkg/yaml/lib/yaml.dart'; | 7 import '../../pkg/yaml/lib/yaml.dart'; |
| 8 import '../../pkg/path/lib/path.dart' as path; | 8 import '../../pkg/path/lib/path.dart' as path; |
| 9 | 9 |
| 10 import 'io.dart'; | 10 import 'io.dart'; |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 125 // the server: | 125 // the server: |
| 126 // TODO(rnystrom): We should split this validation into separate layers: | 126 // TODO(rnystrom): We should split this validation into separate layers: |
| 127 // 1. Stuff that is required in any pubspec to perform any command. Things | 127 // 1. Stuff that is required in any pubspec to perform any command. Things |
| 128 // like "must have a name". That should go here. | 128 // like "must have a name". That should go here. |
| 129 // 2. Stuff that is required to upload a package. Things like "homepage | 129 // 2. Stuff that is required to upload a package. Things like "homepage |
| 130 // must use a valid scheme". That should go elsewhere. pub upload should | 130 // must use a valid scheme". That should go elsewhere. pub upload should |
| 131 // call it, and we should provide a separate command to show the user, | 131 // call it, and we should provide a separate command to show the user, |
| 132 // and also expose it to the editor in some way. | 132 // and also expose it to the editor in some way. |
| 133 | 133 |
| 134 if (parsedPubspec.containsKey('homepage')) { | 134 if (parsedPubspec.containsKey('homepage')) { |
| 135 var homepage = parsedPubspec['homepage']; | 135 _validateFieldUrl(parsedPubspec['homepage'], 'homepage'); |
| 136 | 136 } |
| 137 if (homepage is! String) { | 137 if (parsedPubspec.containsKey('documentation')) { |
| 138 throw new FormatException( | 138 _validateFieldUrl(parsedPubspec['documentation'], 'documentation'); |
| 139 'The "homepage" field should be a string, but was "$homepage".'); | |
| 140 } | |
| 141 | |
| 142 var goodScheme = new RegExp(r'^https?:'); | |
| 143 if (!goodScheme.hasMatch(homepage)) { | |
| 144 throw new FormatException( | |
| 145 'The "homepage" field should be an "http:" or "https:" URL, but ' | |
| 146 'was "$homepage".'); | |
| 147 } | |
| 148 } | 139 } |
| 149 | 140 |
| 150 if (parsedPubspec.containsKey('author') && | 141 if (parsedPubspec.containsKey('author') && |
| 151 parsedPubspec['author'] is! String) { | 142 parsedPubspec['author'] is! String) { |
| 152 throw new FormatException( | 143 throw new FormatException( |
| 153 'The "author" field should be a string, but was ' | 144 'The "author" field should be a string, but was ' |
| 154 '${parsedPubspec["author"]}.'); | 145 '${parsedPubspec["author"]}.'); |
| 155 } | 146 } |
| 156 | 147 |
| 157 if (parsedPubspec.containsKey('authors')) { | 148 if (parsedPubspec.containsKey('authors')) { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 170 if (parsedPubspec.containsKey('author')) { | 161 if (parsedPubspec.containsKey('author')) { |
| 171 throw new FormatException('A pubspec should not have both an "author" ' | 162 throw new FormatException('A pubspec should not have both an "author" ' |
| 172 'and an "authors" field.'); | 163 'and an "authors" field.'); |
| 173 } | 164 } |
| 174 } | 165 } |
| 175 | 166 |
| 176 return new Pubspec(name, version, dependencies, environment, parsedPubspec); | 167 return new Pubspec(name, version, dependencies, environment, parsedPubspec); |
| 177 } | 168 } |
| 178 } | 169 } |
| 179 | 170 |
| 171 /** |
| 172 * Evaluates whether the given [url] for [field] is valid. |
| 173 * |
| 174 * Throws [FormatException] on an invalid url. |
| 175 */ |
| 176 void _validateFieldUrl(url, String field) { |
| 177 if (url is! String) { |
| 178 throw new FormatException( |
| 179 'The "$field" field should be a string, but was "$url".'); |
| 180 } |
| 181 |
| 182 var goodScheme = new RegExp(r'^https?:'); |
| 183 if (!goodScheme.hasMatch(url)) { |
| 184 throw new FormatException( |
| 185 'The "$field" field should be an "http:" or "https:" URL, but ' |
| 186 'was "$url".'); |
| 187 } |
| 188 } |
| 189 |
| 180 List<PackageRef> _parseDependencies(SourceRegistry sources, yaml) { | 190 List<PackageRef> _parseDependencies(SourceRegistry sources, yaml) { |
| 181 var dependencies = <PackageRef>[]; | 191 var dependencies = <PackageRef>[]; |
| 182 | 192 |
| 183 // Allow an empty dependencies key. | 193 // Allow an empty dependencies key. |
| 184 if (yaml == null) return dependencies; | 194 if (yaml == null) return dependencies; |
| 185 | 195 |
| 186 if (yaml is! Map || yaml.keys.any((e) => e is! String)) { | 196 if (yaml is! Map || yaml.keys.any((e) => e is! String)) { |
| 187 throw new FormatException( | 197 throw new FormatException( |
| 188 'The pubspec dependencies should be a map of package names, but ' | 198 'The pubspec dependencies should be a map of package names, but ' |
| 189 'was ${yaml}.'); | 199 'was ${yaml}.'); |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 235 /// The environment-related metadata in the pubspec. Corresponds to the data | 245 /// The environment-related metadata in the pubspec. Corresponds to the data |
| 236 /// under the "environment:" key in the pubspec. | 246 /// under the "environment:" key in the pubspec. |
| 237 class PubspecEnvironment { | 247 class PubspecEnvironment { |
| 238 /// The version constraint specifying which SDK versions this package works | 248 /// The version constraint specifying which SDK versions this package works |
| 239 /// with. | 249 /// with. |
| 240 final VersionConstraint sdkVersion; | 250 final VersionConstraint sdkVersion; |
| 241 | 251 |
| 242 PubspecEnvironment([VersionConstraint sdk]) | 252 PubspecEnvironment([VersionConstraint sdk]) |
| 243 : sdkVersion = sdk != null ? sdk : VersionConstraint.any; | 253 : sdkVersion = sdk != null ? sdk : VersionConstraint.any; |
| 244 } | 254 } |
| OLD | NEW |