Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | |
| 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. | |
| 4 | |
| 5 library package_config.packages_impl; | |
| 6 | |
| 7 import "dart:collection" show UnmodifiableMapView; | |
| 8 import "dart:io" show Directory; | |
| 9 import "package:path/path.dart" as path; | |
| 10 import "../packages.dart"; | |
| 11 import "util.dart" show checkValidPackageUri; | |
| 12 | |
| 13 /// A [Packages] null-object. | |
| 14 class NoPackages implements Packages { | |
| 15 const NoPackages(); | |
| 16 | |
| 17 Uri resolve(Uri packageUri, {Uri notFound(Uri packageUri)}) { | |
| 18 String packageName = checkValidPackageUri(packageUri); | |
| 19 if (notFound != null) return notFound(packageUri); | |
| 20 throw new ArgumentError.value(packageUri, "packageUri", | |
| 21 'No package named "$packageName"'); | |
| 22 } | |
| 23 | |
| 24 Iterable<String> get packages { | |
| 25 return new Iterable<String>.empty(); | |
| 26 } | |
|
pquitslund
2015/05/21 18:14:22
Maybe:
Iterable<String> get packages => new Itera
Lasse Reichstein Nielsen
2015/05/21 18:30:21
I think it fits on a line, so yes.
| |
| 27 | |
| 28 Map<String, Uri> asMap() => const<String,Uri>{}; | |
| 29 } | |
| 30 | |
| 31 abstract class PackagesBase implements Packages { | |
|
pquitslund
2015/05/21 18:14:23
Nit: class level comment for PackageBase?
Lasse Reichstein Nielsen
2015/05/21 18:30:22
Acknowledged.
| |
| 32 Uri resolve(Uri packageUri, {Uri notFound(Uri packageUri)}) { | |
| 33 packageUri = packageUri.normalizePath(); | |
| 34 String packageName = checkValidPackageUri(packageUri); | |
| 35 Uri packageBase = _getBase(packageName); | |
| 36 if (packageBase == null) { | |
| 37 if (notFound != null) return notFound(packageUri); | |
| 38 throw new ArgumentError.value(packageUri, "packageUri", | |
| 39 'No package named "$packageName"'); | |
| 40 } | |
| 41 String packagePath = packageUri.path.substring(packageName.length + 1); | |
| 42 return packageBase.resolve(packagePath); | |
| 43 } | |
| 44 Uri _getBase(String packageName); | |
| 45 } | |
| 46 | |
| 47 /// A [Packages] implementation based on an existing map. | |
| 48 class MapPackages extends PackagesBase { | |
| 49 final Map<String, Uri> _mapping; | |
| 50 MapPackages(this._mapping); | |
| 51 | |
| 52 Uri _getBase(String packageName) => _mapping[packageName]; | |
| 53 | |
| 54 Iterable<String> get packages => _mapping.keys; | |
| 55 | |
| 56 Map<String, Uri> asMap() => new UnmodifiableMapView<String, Uri>(_mapping); | |
| 57 } | |
| 58 | |
| 59 /// A [Packages] implementation based on a local directory. | |
| 60 class FilePackagesDirectoryPackages extends PackagesBase { | |
| 61 final Directory _packageDir; | |
| 62 FilePackagesDirectoryPackages(this._packageDir); | |
| 63 | |
| 64 Uri _getBase(String packageName) => | |
| 65 new Uri.directory(path.join(packageName,'')); | |
| 66 | |
| 67 Iterable<String> _listPackageNames() { | |
| 68 return _packageDir.listSync() | |
| 69 .where((e) => e is Directory) | |
| 70 .map((e) => path.basename(e.path)); | |
| 71 } | |
| 72 | |
| 73 Iterable<String> get packages { | |
| 74 return _listPackageNames(); | |
| 75 } | |
|
pquitslund
2015/05/21 18:14:22
Maybe:
Iterable<String> get packages => _listPack
Lasse Reichstein Nielsen
2015/05/21 18:30:21
Acknowledged.
| |
| 76 | |
| 77 Map<String, Uri> asMap() { | |
| 78 var result = <String, Uri>{}; | |
| 79 for (var packageName in _listPackageNames()) { | |
| 80 result[packageName] = _getBase(packageName); | |
| 81 } | |
| 82 return new UnmodifiableMapView<String, Uri>(result); | |
| 83 } | |
| 84 } | |
| 85 | |
| 86 /// A [Packages] implementation based on a remote (e.g., HTTP) directory. | |
| 87 /// | |
| 88 /// There is no way to detect which packages exist short of trying to use | |
| 89 /// them. You can't necessarily check whether a directory exists, | |
| 90 /// except by checking for a know file in the directory. | |
| 91 class NonFilePackagesDirectoryPackages extends PackagesBase { | |
| 92 final Uri _packageBase; | |
| 93 NonFilePackagesDirectoryPackages(this._packageBase); | |
| 94 | |
| 95 Uri _getBase(String packageName) => _packageBase.resolve("$packageName/"); | |
| 96 | |
| 97 Error _failListingPackages() { | |
| 98 return new UnsupportedError( | |
| 99 "Cannot list packages for a ${_packageBase.scheme}: " | |
| 100 "based package root"); | |
| 101 } | |
| 102 | |
| 103 Iterable<String> get packages { | |
| 104 throw _failListingPackages(); | |
| 105 } | |
| 106 | |
| 107 Map<String, Uri> asMap() { | |
| 108 throw _failListingPackages(); | |
| 109 } | |
| 110 } | |
| OLD | NEW |