Chromium Code Reviews| Index: sdk/lib/_internal/pub/lib/src/barback.dart |
| diff --git a/sdk/lib/_internal/pub/lib/src/barback.dart b/sdk/lib/_internal/pub/lib/src/barback.dart |
| index 823833c3750842f99ab192584b60da45564a7711..a78f7b88afcb60aafa504927edaa1af19211da08 100644 |
| --- a/sdk/lib/_internal/pub/lib/src/barback.dart |
| +++ b/sdk/lib/_internal/pub/lib/src/barback.dart |
| @@ -20,18 +20,48 @@ import 'utils.dart'; |
| /// An identifier for a transformer and the configuration that will be passed to |
| /// it. |
| /// |
| -/// It's possible that [asset] defines multiple transformers. If so, |
| -/// [configuration] will be passed to all of them. |
| +/// It's possible that the library identified by [this] defines multiple |
| +/// transformers. If so, [configuration] will be passed to all of them. |
| class TransformerId { |
| - /// The asset containing the transformer. |
| - final AssetId asset; |
| + /// The package containing the library that this transformer identifies. |
|
Bob Nystrom
2013/10/28 17:24:25
"this transformer identifies" is confusing. How ab
nweiz
2013/10/28 23:58:06
Done.
|
| + final String package; |
| + |
| + /// The `/`-separated path identifying the library that contains this |
|
Bob Nystrom
2013/10/28 17:24:25
"identifying" -> "to"
nweiz
2013/10/28 23:58:06
Done.
|
| + /// transformer. |
| + /// |
| + /// This is relative to the `lib/` directory in [package], and doesn't end in |
| + /// `.dart`. |
| + /// |
| + /// This can be null; if so, it indicates that the transformer(s) should be |
| + /// loaded from `lib/transformer.dart` if that exists, and `lib/$package.dart` |
| + /// otherwise. |
| + final String path; |
| /// The configuration to pass to the transformer. |
| /// |
| /// This will be null if no configuration was provided. |
| final Map configuration; |
| - TransformerId(this.asset, this.configuration) { |
| + /// Parses a transformer identifier. |
| + /// |
| + /// A transformer identifier is a string of the form "package_name" or |
| + /// "package_name/path/to/library". It does not have a trailing extension. If |
| + /// it just has a package name, it expands to lib/transformer.dart if that |
| + /// exists, or lib/${package}.dart otherwise. Otherwise, it expands to |
| + /// lib/${path}.dart. In either case it's located in the given package. |
| + factory TransformerId.parse(String identifier, Map configuration) { |
| + if (identifier.isEmpty) { |
| + throw new FormatException('Invalid library identifier: "".'); |
| + } |
| + |
| + var parts = split1(identifier, "/"); |
| + if (parts.length == 1) { |
| + return new TransformerId(parts.single, null, configuration); |
| + } |
| + return new TransformerId(parts.first, parts.last, configuration); |
| + } |
| + |
| + TransformerId(this.package, this.path, this.configuration) { |
| if (configuration == null) return; |
| for (var reserved in ['include', 'exclude']) { |
| if (!configuration.containsKey(reserved)) continue; |
| @@ -42,10 +72,27 @@ class TransformerId { |
| // TODO(nweiz): support deep equality on [configuration] as well. |
| bool operator==(other) => other is TransformerId && |
| - other.asset == asset && |
| + other.package == package && |
| + other.path == path && |
| other.configuration == configuration; |
| - int get hashCode => asset.hashCode ^ configuration.hashCode; |
| + int get hashCode => package.hashCode ^ path.hashCode ^ configuration.hashCode; |
| + |
| + String toString() => path == null ? package : '$package/$path'; |
| + |
| + /// Returns the asset id for the library identified by this transformer id. |
| + /// |
| + /// If `path` is null, this will determine which library to load. |
| + Future<AssetId> getAssetId(Barback barback) { |
| + if (path != null) { |
| + return new Future.value(new AssetId(package, 'lib/$path.dart')); |
| + } |
| + |
| + var transformerAsset = new AssetId(package, 'lib/transformer.dart'); |
| + return barback.getAssetById(transformerAsset).then((_) => transformerAsset) |
| + .catchError((e) => new AssetId(package, 'lib/$package.dart'), |
| + test: (e) => e is AssetNotFoundException); |
| + } |
| } |
| /// Creates a [BarbackServer] serving on [host] and [port]. |
| @@ -97,47 +144,6 @@ Future<BarbackServer> createServer(String host, int port, PackageGraph graph, |
| }); |
| } |
| -/// Parses a library identifier to an asset id. |
| -/// |
| -/// A library identifier is a string of the form "package_name" or |
| -/// "package_name/path/to/library". It does not have a trailing extension. If it |
| -/// just has a package name, it expands to lib/${package}.dart in that package. |
| -/// Otherwise, it expands to lib/${path}.dart in that package. |
| -AssetId libraryIdentifierToId(String identifier) { |
| - if (identifier.isEmpty) { |
| - throw new FormatException('Invalid library identifier: "".'); |
| - } |
| - |
| - // Convert the concise asset name in the pubspec (of the form "package" |
| - // or "package/library") to an AssetId that points to an actual dart |
| - // file ("package/lib/package.dart" or "package/lib/library.dart", |
| - // respectively). |
| - var parts = split1(identifier, "/"); |
| - if (parts.length == 1) parts.add(parts.single); |
| - return new AssetId(parts.first, 'lib/' + parts.last + '.dart'); |
| -} |
| - |
| -final _libraryPathRegExp = new RegExp(r"^lib/(.*)\.dart$"); |
| - |
| -/// Converts [id] to a library identifier. |
| -/// |
| -/// A library identifier is a string of the form "package_name" or |
| -/// "package_name/path/to/library". It does not have a trailing extension. If it |
| -/// just has a package name, it expands to lib/${package}.dart in that package. |
| -/// Otherwise, it expands to lib/${path}.dart in that package. |
| -/// |
| -/// This will throw an [ArgumentError] if [id] doesn't represent a library in |
| -/// `lib/`. |
| -String idToLibraryIdentifier(AssetId id) { |
| - var match = _libraryPathRegExp.firstMatch(id.path); |
| - if (match == null) { |
| - throw new ArgumentError("Asset id $id doesn't identify a library."); |
| - } |
| - |
| - if (match[1] == id.package) return id.package; |
| - return '${id.package}/${match[1]}'; |
| -} |
| - |
| /// Converts [id] to a "package:" URI. |
| /// |
| /// This will throw an [ArgumentError] if [id] doesn't represent a library in |