Index: pkg/stub_core_library/bin/stub_core_library.dart |
diff --git a/pkg/stub_core_library/bin/stub_core_library.dart b/pkg/stub_core_library/bin/stub_core_library.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9bf638c677fc6f00f37113436865a9542064a845 |
--- /dev/null |
+++ b/pkg/stub_core_library/bin/stub_core_library.dart |
@@ -0,0 +1,101 @@ |
+// Copyright (c) 2014, 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 stub_core_library.bin; |
+ |
+import 'dart:io'; |
+ |
+import 'package:args/args.dart'; |
+import 'package:path/path.dart' as p; |
+ |
+import 'package:stub_core_library/src/utils.dart'; |
+import 'package:stub_core_library/stub_core_library.dart'; |
+ |
+/// A map from Dart core library sources to the filenames into which they should |
+/// be generated. |
+/// |
+/// The source paths are URL-formatted and relative to the Dart SDK root. |
+const CORE_LIBRARIES = const { |
+ 'lib/io/io.dart': 'dart_io.dart', |
+ 'lib/html/html_common/html_common.dart': 'dart_html_common.dart', |
+ 'lib/html/html_common/metadata.dart': 'metadata.dart', |
+ 'lib/html/dartium/html_dartium.dart': 'dart_html.dart', |
+ 'lib/indexed_db/dartium/indexed_db_dartium.dart': 'dart_indexed_db.dart', |
+ 'lib/js/dartium/js_dartium.dart': 'dart_js.dart', |
+ 'lib/svg/dartium/svg_dartium.dart': 'dart_svg.dart', |
+ 'lib/web_audio/dartium/web_audio_dartium.dart': 'dart_web_audio.dart', |
+ 'lib/web_gl/dartium/web_gl_dartium.dart': 'dart_web_gl.dart', |
+ 'lib/web_sql/dartium/web_sql_dartium.dart': 'dart_web_sql.dart' |
+}; |
+ |
+/// A map from stubbable "dart:" URLs to the names of the stub files they should |
+/// be replaced with. |
+const IMPORT_REPLACEMENTS = const { |
+ 'dart:io': 'dart_io.dart', |
+ 'dart:html_common': 'dart_html_common.dart', |
+ 'dart:html': 'dart_html.dart', |
+ 'dart:indexed_db': 'dart_indexed_db.dart', |
+ 'dart:js': 'dart_js.dart', |
+ 'dart:svg': 'dart_svg.dart', |
+ 'dart:web_audio': 'dart_web_audio.dart', |
+ 'dart:web_gl': 'dart_web_gl.dart', |
+ 'dart:web_sql': 'dart_web_sql.dart' |
+}; |
+ |
+/// The exit code for a usage error. |
+const USAGE_ERROR = 64; |
+ |
+/// The root directory of the SDK. |
+String get sdkRoot => p.join( |
+ p.dirname(p.fromUri(Platform.script)), '..', '..', '..', 'sdk'); |
+ |
+/// The argument parser. |
+final argParser = new ArgParser() |
+ ..addFlag('help', abbr: 'h', help: 'Print this usage information.'); |
+ |
+/// The usage string. |
+String get usage => """ |
+Generate Dart core library stubs. |
+ |
+Usage: stub_core_libraries.dart <directory> |
+ |
+${argParser.getUsage()}"""; |
+ |
+void main(List<String> arguments) { |
+ var options; |
+ try { |
+ options = argParser.parse(arguments); |
+ } on FormatException catch (e) { |
+ stderr.writeln(e.message); |
+ stderr.writeln(usage); |
+ exitCode = USAGE_ERROR; |
+ return; |
+ } |
+ |
+ if (options['help']) { |
+ print(usage); |
+ return; |
+ } |
+ |
+ var destination = options.rest.isEmpty ? p.current : options.rest.first; |
+ |
+ // Don't allow extra arguments. |
+ if (options.rest.length > 1) { |
+ var unexpected = options.rest.skip(1).map((arg) => '"$arg"'); |
+ var arguments = pluralize("argument", unexpected.length); |
+ stderr.writeln("Unexpected $arguments ${toSentence(unexpected)}."); |
+ stderr.writeln(usage); |
+ exitCode = USAGE_ERROR; |
+ return; |
+ } |
+ |
+ new Directory(destination).createSync(recursive: true); |
+ |
+ // TODO(nweiz): Tree-shake these libraries when issue 19896 is fixed. |
+ CORE_LIBRARIES.forEach((path, output) { |
+ path = p.join(sdkRoot, p.fromUri(path)); |
+ new File(p.join(destination, output)) |
+ .writeAsStringSync(stubFile(path, IMPORT_REPLACEMENTS)); |
+ }); |
+} |