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 111b7689257095c526c9cc136a97891735915a74..7ad499f8306e2e88d30ad8157b2ced10028d353c 100644 |
--- a/sdk/lib/_internal/pub/lib/src/barback.dart |
+++ b/sdk/lib/_internal/pub/lib/src/barback.dart |
@@ -4,14 +4,9 @@ |
library pub.barback; |
-import 'dart:async'; |
- |
import 'package:barback/barback.dart'; |
-import 'package:collection/collection.dart'; |
import 'package:path/path.dart' as p; |
-import 'io.dart'; |
-import 'utils.dart'; |
import 'version.dart'; |
/// The currently supported versions of the Barback package that this version of |
@@ -38,199 +33,6 @@ import 'version.dart'; |
/// [compat]: https://gist.github.com/nex3/10942218 |
final supportedVersions = new VersionConstraint.parse(">=0.13.0 <0.14.2"); |
-/// A list of the names of all built-in transformers that pub exposes. |
-const _BUILT_IN_TRANSFORMERS = const ['\$dart2js']; |
- |
-/// An identifier for a transformer and the configuration that will be passed to |
-/// it. |
-/// |
-/// 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 package containing the library where the transformer is defined. |
- final String package; |
- |
- /// The `/`-separated path to the library that contains this 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. |
- /// |
- /// Any pub-specific configuration (i.e. keys starting with "$") will have |
- /// been stripped out of this and handled separately. This will be an empty |
- /// map if no configuration was provided. |
- final Map configuration; |
- |
- /// The primary input inclusions. |
- /// |
- /// Each inclusion is an asset path. If this set is non-empty, than *only* |
- /// matching assets are allowed as a primary input by this transformer. If |
- /// `null`, all assets are included. |
- /// |
- /// This is processed before [excludes]. If a transformer has both includes |
- /// and excludes, then the set of included assets is determined and assets |
- /// are excluded from that resulting set. |
- final Set<String> includes; |
- |
- /// The primary input exclusions. |
- /// |
- /// Any asset whose pach is in this is not allowed as a primary input by |
- /// this transformer. |
- /// |
- /// This is processed after [includes]. If a transformer has both includes |
- /// and excludes, then the set of included assets is determined and assets |
- /// are excluded from that resulting set. |
- final Set<String> excludes; |
- |
- /// Whether this ID points to a built-in transformer exposed by pub. |
- bool get isBuiltInTransformer => package.startsWith('\$'); |
- |
- /// Returns whether this id excludes certain asset ids from being processed. |
- bool get hasExclusions => includes != null || excludes != null; |
- |
- /// 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); |
- } |
- |
- factory TransformerId(String package, String path, Map configuration) { |
- parseField(key) { |
- if (!configuration.containsKey(key)) return null; |
- var field = configuration.remove(key); |
- |
- if (field is String) return new Set<String>.from([field]); |
- |
- if (field is List) { |
- var nonstrings = field |
- .where((element) => element is! String) |
- .map((element) => '"$element"'); |
- |
- if (nonstrings.isNotEmpty) { |
- throw new FormatException( |
- '"$key" list field may only contain strings, but contained ' |
- '${toSentence(nonstrings)}.'); |
- } |
- |
- return new Set<String>.from(field); |
- } else { |
- throw new FormatException( |
- '"$key" field must be a string or list, but was "$field".'); |
- } |
- } |
- |
- var includes = null; |
- var excludes = null; |
- |
- if (configuration == null) { |
- configuration = {}; |
- } else { |
- // Don't write to the immutable YAML map. |
- configuration = new Map.from(configuration); |
- |
- // Pull out the exclusions/inclusions. |
- includes = parseField("\$include"); |
- excludes = parseField("\$exclude"); |
- |
- // All other keys starting with "$" are unexpected. |
- var reservedKeys = configuration.keys |
- .where((key) => key is String && key.startsWith(r'$')) |
- .map((key) => '"$key"'); |
- |
- if (reservedKeys.isNotEmpty) { |
- throw new FormatException( |
- 'Unknown reserved ${pluralize('field', reservedKeys.length)} ' |
- '${toSentence(reservedKeys)}.'); |
- } |
- } |
- |
- return new TransformerId._(package, path, configuration, |
- includes, excludes); |
- } |
- |
- TransformerId._(this.package, this.path, this.configuration, |
- this.includes, this.excludes) { |
- if (!package.startsWith('\$')) return; |
- if (_BUILT_IN_TRANSFORMERS.contains(package)) return; |
- throw new FormatException('Unsupported built-in transformer $package.'); |
- } |
- |
- bool operator==(other) => other is TransformerId && |
- other.package == package && |
- other.path == path && |
- const DeepCollectionEquality().equals(other.configuration, configuration); |
- |
- int get hashCode => package.hashCode ^ path.hashCode ^ |
- const DeepCollectionEquality().hash(configuration); |
- |
- 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); |
- } |
- |
- /// Returns the path to the library identified by this transformer within |
- /// [packageDir], which should be the directory of [package]. |
- /// |
- /// If `path` is null, this will determine which library to load. Unlike |
- /// [getAssetId], this doesn't take generated assets into account; it's used |
- /// to determine transformers' dependencies, which requires looking at files |
- /// on disk. |
- String getFullPath(String packageDir) { |
- if (path != null) return p.join(packageDir, 'lib', p.fromUri('$path.dart')); |
- |
- var transformerPath = p.join(packageDir, 'lib', 'transformer.dart'); |
- if (fileExists(transformerPath)) return transformerPath; |
- return p.join(packageDir, 'lib', '$package.dart'); |
- } |
- |
- /// Returns whether the include/exclude rules allow the transformer to run on |
- /// [pathWithinPackage]. |
- /// |
- /// [pathWithinPackage] must be a URL-style path relative to the containing |
- /// package's root directory. |
- bool canTransform(String pathWithinPackage) { |
- // TODO(rnystrom): Support globs in addition to paths. See #17093. |
- if (excludes != null) { |
- // If there are any excludes, it must not match any of them. |
- if (excludes.contains(pathWithinPackage)) return false; |
- } |
- |
- // If there are any includes, it must match one of them. |
- return includes == null || includes.contains(pathWithinPackage); |
- } |
-} |
- |
/// Converts [id] to a "package:" URI. |
/// |
/// This will throw an [ArgumentError] if [id] doesn't represent a library in |