| Index: sdk/lib/_internal/pub/lib/src/barback/transformer_id.dart
|
| diff --git a/sdk/lib/_internal/pub/lib/src/barback/transformer_id.dart b/sdk/lib/_internal/pub/lib/src/barback/transformer_id.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..71bdd9c8cd4aef917b353110c21e054d708d1086
|
| --- /dev/null
|
| +++ b/sdk/lib/_internal/pub/lib/src/barback/transformer_id.dart
|
| @@ -0,0 +1,100 @@
|
| +// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
|
| +// for details. All rights reserved. Use of this source code is governed by a
|
| +// BSD-style license that can be found in the LICENSE file.
|
| +
|
| +library pub.barback.transformer_id;
|
| +
|
| +import 'dart:async';
|
| +
|
| +import 'package:barback/barback.dart';
|
| +import 'package:path/path.dart' as p;
|
| +
|
| +import '../io.dart';
|
| +import '../utils.dart';
|
| +
|
| +/// A list of the names of all built-in transformers that pub exposes.
|
| +const _BUILT_IN_TRANSFORMERS = const ['\$dart2js'];
|
| +
|
| +/// An identifier that indicates the library that contains a transformer.
|
| +///
|
| +/// It's possible that the library identified by [this] defines multiple
|
| +/// transformers. If so, they're all always loaded in the same phase.
|
| +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;
|
| +
|
| + /// Whether this ID points to a built-in transformer exposed by pub.
|
| + bool get isBuiltInTransformer => package.startsWith('\$');
|
| +
|
| + /// 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) {
|
| + if (identifier.isEmpty) {
|
| + throw new FormatException('Invalid library identifier: "".');
|
| + }
|
| +
|
| + var parts = split1(identifier, "/");
|
| + if (parts.length == 1) {
|
| + return new TransformerId(parts.single, null);
|
| + }
|
| +
|
| + return new TransformerId(parts.first, parts.last);
|
| + }
|
| +
|
| + TransformerId(this.package, this.path) {
|
| + 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;
|
| +
|
| + int get hashCode => package.hashCode ^ path.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. Unlike
|
| + /// [getAssetId], this doesn't take generated assets into account; it's used
|
| + /// to determine transformers' dependencies, which requires looking at files
|
| + /// on disk.
|
| + 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.
|
| + 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');
|
| + }
|
| +}
|
|
|