Chromium Code Reviews| Index: pkg/fasta/lib/src/translate_uri.dart |
| diff --git a/pkg/fasta/lib/src/translate_uri.dart b/pkg/fasta/lib/src/translate_uri.dart |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..a770abdc7c13cbb6b400fa26f38d9e303a3d2ba6 |
| --- /dev/null |
| +++ b/pkg/fasta/lib/src/translate_uri.dart |
| @@ -0,0 +1,85 @@ |
| +// Copyright (c) 2016, 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 fasta.translate_uri; |
| + |
| +import 'dart:async' show |
| + Future; |
| + |
| +import 'dart:io' show |
| + File; |
| + |
| +import 'package:package_config/packages_file.dart' as packages_file |
| + show parse; |
| + |
| +class TranslateUri { |
| + final Map<String, Uri> packages; |
| + |
| + TranslateUri(this.packages); |
| + |
| + Uri translate(Uri uri) { |
| + if (uri.scheme == "dart") return translateDartUri(uri); |
| + if (uri.scheme == "package") return translatePackageUri(uri); |
| + return null; |
| + } |
| + |
| + Uri translateDartUri(Uri uri) { |
| + String path = uriTranslation["$uri"]; |
| + return path == null ? null : Uri.base.resolve(path); |
| + } |
| + |
| + Uri translatePackageUri(Uri uri) { |
| + int index = uri.path.indexOf("/"); |
| + if (index == -1) return null; |
| + String name = uri.path.substring(0, index); |
| + String path = uri.path.substring(index + 1); |
| + Uri root = packages[name]; |
| + if (root == null) return null; |
| + return root.resolve(path); |
| + } |
| + |
| + static Future<TranslateUri> parse([Uri uri]) async { |
| + uri ??= Uri.base.resolve(".packages"); |
| + File file = new File.fromUri(uri); |
| + List<int> bytes = await file.readAsBytes(); |
| + Map<String, Uri> packages = packages_file.parse(bytes, uri); |
| + return new TranslateUri(packages); |
| + } |
| +} |
| + |
| +// TODO(ahe): This is a quick hack to avoid hooking up SDK library resolution. |
| +const Map<String, String> uriTranslation = const <String, String>{ |
| + "dart:async": "dart-sdk/sdk/lib/async/async.dart", |
| + "dart:_chrome": "dart-sdk/sdk/lib/_chrome/dart2js/chrome_dart2js.dart", |
| + "dart:collection": "dart-sdk/sdk/lib/collection/collection.dart", |
| + "dart:convert": "dart-sdk/sdk/lib/convert/convert.dart", |
| + "dart:core": "dart-sdk/sdk/lib/core/core.dart", |
| + "dart:developer": "dart-sdk/sdk/lib/developer/developer.dart", |
| + "dart:html": "dart-sdk/sdk/lib/html/dart2js/html_dart2js.dart", |
| + "dart:html_common": "dart-sdk/sdk/lib/html/html_common/html_common_dart2js.dart", |
|
Johnni Winther
2017/01/16 09:47:46
Long lines
ahe
2017/01/16 12:07:04
Removed, not used anymore.
|
| + "dart:indexed_db": "dart-sdk/sdk/lib/indexed_db/dart2js/indexed_db_dart2js.dart", |
| + "dart:io": "dart-sdk/sdk/lib/io/io.dart", |
| + "dart:isolate": "dart-sdk/sdk/lib/isolate/isolate.dart", |
| + "dart:js": "dart-sdk/sdk/lib/js/dart2js/js_dart2js.dart", |
| + "dart:js_util": "dart-sdk/sdk/lib/js_util/dart2js/js_util_dart2js.dart", |
| + "dart:math": "dart-sdk/sdk/lib/math/math.dart", |
| + "dart:mirrors": "dart-sdk/sdk/lib/mirrors/mirrors.dart", |
| + "dart:typed_data": "dart-sdk/sdk/lib/typed_data/typed_data.dart", |
| + "dart:_native_typed_data": "dart-sdk/sdk/lib/_internal/js_runtime/lib/native_typed_data.dart", |
| + "dart:svg": "dart-sdk/sdk/lib/svg/dart2js/svg_dart2js.dart", |
| + "dart:web_audio": "dart-sdk/sdk/lib/web_audio/dart2js/web_audio_dart2js.dart", |
| + "dart:web_gl": "dart-sdk/sdk/lib/web_gl/dart2js/web_gl_dart2js.dart", |
| + "dart:web_sql": "dart-sdk/sdk/lib/web_sql/dart2js/web_sql_dart2js.dart", |
| + "dart:_internal": "dart-sdk/sdk/lib/internal/internal.dart", |
| + "dart:_js_helper": "dart-sdk/sdk/lib/_internal/js_runtime/lib/js_helper.dart", |
| + "dart:_interceptors": "dart-sdk/sdk/lib/_internal/js_runtime/lib/interceptors.dart", |
| + "dart:_foreign_helper": "dart-sdk/sdk/lib/_internal/js_runtime/lib/foreign_helper.dart", |
| + "dart:_isolate_helper": "dart-sdk/sdk/lib/_internal/js_runtime/lib/isolate_helper.dart", |
| + "dart:_js_mirrors": "dart-sdk/sdk/lib/_internal/js_runtime/lib/js_mirrors.dart", |
| + "dart:_js_names": "dart-sdk/sdk/lib/_internal/js_runtime/lib/js_names.dart", |
| + "dart:_js_primitives": "dart-sdk/sdk/lib/_internal/js_runtime/lib/js_primitives.dart", |
| + "dart:_js_embedded_names": "dart-sdk/sdk/lib/_internal/js_runtime/lib/shared/embedded_names.dart", |
| + "dart:_async_await_error_codes": "dart-sdk/sdk/lib/_internal/js_runtime/lib/shared/async_await_error_codes.dart", |
| + "dart:_metadata": "dart-sdk/sdk/lib/html/html_common/metadata.dart", |
| +}; |