Chromium Code Reviews

Unified Diff: sdk/lib/_internal/pub/lib/src/pubspec.dart

Issue 23522029: Support passing configuration data to a transformer plugin. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Code review changes. Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Index: sdk/lib/_internal/pub/lib/src/pubspec.dart
diff --git a/sdk/lib/_internal/pub/lib/src/pubspec.dart b/sdk/lib/_internal/pub/lib/src/pubspec.dart
index d5b162edd02f86946d235b4fb628f120867bdf09..0813315facd062dd45b52f0130ea45d3aac712d2 100644
--- a/sdk/lib/_internal/pub/lib/src/pubspec.dart
+++ b/sdk/lib/_internal/pub/lib/src/pubspec.dart
@@ -30,9 +30,8 @@ class Pubspec {
/// The packages this package depends on when it is the root package.
final List<PackageDep> devDependencies;
- /// The ids of the libraries containing the transformers to use for this
- /// package.
- final List<Set<AssetId>> transformers;
+ /// The ids of the transformers to use for this package.
+ final List<Set<TransformerId>> transformers;
/// The environment-related metadata.
final PubspecEnvironment environment;
@@ -74,7 +73,7 @@ class Pubspec {
dependencies = <PackageDep>[],
devDependencies = <PackageDep>[],
environment = new PubspecEnvironment(),
- transformers = <Set<AssetId>>[],
+ transformers = <Set<TransformerId>>[],
fields = {};
/// Whether or not the pubspec has no contents.
@@ -190,19 +189,36 @@ Pubspec _parseMap(String filePath, Map map, SourceRegistry sources) {
transformers = transformers.map((phase) {
if (phase is! List) phase = [phase];
return phase.map((transformer) {
- if (transformer is! String) {
+ if (transformer is! String && transformer is! Map) {
throw new FormatException(
- 'Transformer "$transformer" must be a string.');
+ 'Transformer "$transformer" must be a string or map.');
+ }
+
+ var id;
+ var configuration;
+ if (transformer is String) {
+ id = libraryIdentifierToId(transformer);
+ } else {
+ if (transformer.length != 1) {
+ throw new FormatException('Transformer map "$transformer" must '
+ 'have a single key: the library identifier.');
+ }
+
+ id = libraryIdentifierToId(transformer.keys.single);
+ configuration = transformer.values.single;
+ if (configuration is! Map) {
+ throw new FormatException('Configuration for transformer "$id" '
+ 'must be a map, but was "$configuration".');
+ }
}
- var id = libraryIdentifierToId(transformer);
if (id.package != name &&
!dependencies.any((ref) => ref.name == id.package)) {
throw new FormatException('Could not find package for transformer '
'"$transformer".');
}
- return id;
+ return new TransformerId(id, configuration);
}).toSet();
}).toList();
} else {
« no previous file with comments | « sdk/lib/_internal/pub/lib/src/barback/load_transformers.dart ('k') | sdk/lib/_internal/pub/test/pubspec_test.dart » ('j') | no next file with comments »

Powered by Google App Engine