Index: sdk/lib/_internal/pub_generated/lib/src/command/build.dart |
diff --git a/sdk/lib/_internal/pub_generated/lib/src/command/build.dart b/sdk/lib/_internal/pub_generated/lib/src/command/build.dart |
deleted file mode 100644 |
index 80060c86f9d68ce43b5ac3cd50fa68bcc9246b00..0000000000000000000000000000000000000000 |
--- a/sdk/lib/_internal/pub_generated/lib/src/command/build.dart |
+++ /dev/null |
@@ -1,275 +0,0 @@ |
-// 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.command.build; |
- |
-import 'dart:async'; |
- |
-import 'package:barback/barback.dart'; |
-import 'package:path/path.dart' as path; |
- |
-import '../barback/asset_environment.dart'; |
-import '../exit_codes.dart' as exit_codes; |
-import '../io.dart'; |
-import '../log.dart' as log; |
-import '../utils.dart'; |
-import 'barback.dart'; |
- |
-final _arrow = getSpecial('\u2192', '=>'); |
- |
-/// Handles the `build` pub command. |
-class BuildCommand extends BarbackCommand { |
- String get name => "build"; |
- String get description => "Apply transformers to build a package."; |
- String get invocation => "pub build [options] [directories...]"; |
- String get docUrl => "http://dartlang.org/tools/pub/cmd/pub-build.html"; |
- List<String> get aliases => const ["deploy", "settle-up"]; |
- |
- /// The path to the application's build output directory. |
- String get outputDirectory => argResults["output"]; |
- |
- List<String> get defaultSourceDirectories => ["web"]; |
- |
- /// The number of files that have been built and written to disc so far. |
- int builtFiles = 0; |
- |
- BuildCommand() { |
- argParser.addOption( |
- "format", |
- help: "How output should be displayed.", |
- allowed: ["text", "json"], |
- defaultsTo: "text"); |
- |
- argParser.addOption( |
- "output", |
- abbr: "o", |
- help: "Directory to write build outputs to.", |
- defaultsTo: "build"); |
- } |
- |
- Future onRunTransformerCommand() { |
- final completer0 = new Completer(); |
- scheduleMicrotask(() { |
- try { |
- cleanDir(outputDirectory); |
- var errorsJson = []; |
- var logJson = []; |
- completer0.complete( |
- AssetEnvironment.create( |
- entrypoint, |
- mode, |
- useDart2JS: true).then(((environment) { |
- environment.barback.errors.listen((error) { |
- log.error(log.red("Build error:\n$error")); |
- if (log.json.enabled) { |
- errorsJson.add({ |
- "error": error.toString() |
- }); |
- } |
- }); |
- if (log.json.enabled) { |
- environment.barback.log.listen( |
- (entry) => logJson.add(_logEntryToJson(entry))); |
- } |
- return log.progress("Building ${entrypoint.root.name}", () { |
- return Future.wait( |
- sourceDirectories.map((dir) => environment.serveDirectory(dir))).then((_) { |
- return environment.barback.getAllAssets(); |
- }); |
- }).then((assets) { |
- var dart2JSEntrypoints = assets.where( |
- (asset) => asset.id.path.endsWith(".dart.js")).map((asset) => asset.id); |
- return Future.wait(assets.map(_writeAsset)).then((_) { |
- builtFiles += _copyBrowserJsFiles(dart2JSEntrypoints); |
- log.message( |
- 'Built $builtFiles ${pluralize('file', builtFiles)} ' 'to "$outputDirectory".'); |
- log.json.message({ |
- "buildResult": "success", |
- "outputDirectory": outputDirectory, |
- "numFiles": builtFiles, |
- "log": logJson |
- }); |
- }); |
- }); |
- })).catchError(((error) { |
- if (error is! BarbackException) throw error; |
- log.error(log.red("Build failed.")); |
- log.json.message({ |
- "buildResult": "failure", |
- "errors": errorsJson, |
- "log": logJson |
- }); |
- return flushThenExit(exit_codes.DATA); |
- }))); |
- } catch (e, s) { |
- completer0.completeError(e, s); |
- } |
- }); |
- return completer0.future; |
- } |
- |
- /// Writes [asset] to the appropriate build directory. |
- /// |
- /// If [asset] is in the special "packages" directory, writes it to every |
- /// build directory. |
- Future _writeAsset(Asset asset) { |
- final completer0 = new Completer(); |
- scheduleMicrotask(() { |
- try { |
- join0() { |
- var destPath = _idToPath(asset.id); |
- join1() { |
- completer0.complete(_writeOutputFile(asset, destPath)); |
- } |
- if (path.isWithin("packages", destPath)) { |
- completer0.complete(Future.wait(sourceDirectories.map(((buildDir) { |
- return _writeOutputFile(asset, path.join(buildDir, destPath)); |
- })))); |
- } else { |
- join1(); |
- } |
- } |
- if (mode == BarbackMode.RELEASE && asset.id.extension == ".dart") { |
- completer0.complete(null); |
- } else { |
- join0(); |
- } |
- } catch (e, s) { |
- completer0.completeError(e, s); |
- } |
- }); |
- return completer0.future; |
- } |
- |
- /// Converts [id] to a relative path in the output directory for that asset. |
- /// |
- /// This corresponds to the URL that could be used to request that asset from |
- /// pub serve. |
- /// |
- /// Examples (where entrypoint is "myapp"): |
- /// |
- /// myapp|web/index.html -> web/index.html |
- /// myapp|lib/lib.dart -> packages/myapp/lib.dart |
- /// foo|lib/foo.dart -> packages/foo/foo.dart |
- /// myapp|test/main.dart -> test/main.dart |
- /// foo|test/main.dart -> ERROR |
- /// |
- /// Throws a [FormatException] if [id] is not a valid public asset. |
- String _idToPath(AssetId id) { |
- var parts = path.split(path.fromUri(id.path)); |
- |
- if (parts.length < 2) { |
- throw new FormatException( |
- "Can not build assets from top-level directory."); |
- } |
- |
- // Map "lib" to the "packages" directory. |
- if (parts[0] == "lib") { |
- return path.join("packages", id.package, path.joinAll(parts.skip(1))); |
- } |
- |
- // Shouldn't be trying to access non-public directories of other packages. |
- assert(id.package == entrypoint.root.name); |
- |
- // Allow any path in the entrypoint package. |
- return path.joinAll(parts); |
- } |
- |
- /// Writes the contents of [asset] to [relativePath] within the build |
- /// directory. |
- Future _writeOutputFile(Asset asset, String relativePath) { |
- builtFiles++; |
- var destPath = path.join(outputDirectory, relativePath); |
- ensureDir(path.dirname(destPath)); |
- return createFileFromStream(asset.read(), destPath); |
- } |
- |
- /// If this package depends directly on the `browser` package, this ensures |
- /// that the JavaScript bootstrap files are copied into `packages/browser/` |
- /// directories next to each entrypoint in [entrypoints]. |
- /// |
- /// Returns the number of files it copied. |
- int _copyBrowserJsFiles(Iterable<AssetId> entrypoints) { |
- // Must depend on the browser package. |
- if (!entrypoint.root.immediateDependencies.any( |
- (dep) => dep.name == 'browser' && dep.source == 'hosted')) { |
- return 0; |
- } |
- |
- // Get all of the subdirectories that contain Dart entrypoints. |
- var entrypointDirs = |
- entrypoints// Convert the asset path to a native-separated one and get the |
- // directory containing the entrypoint. |
- .map( |
- (id) => |
- path.dirname( |
- path.fromUri( |
- id.path)))// Don't copy files to the top levels of the build directories since |
- // the normal lib asset copying will take care of that. |
- .where((dir) => path.split(dir).length > 1).toSet(); |
- |
- for (var dir in entrypointDirs) { |
- // TODO(nweiz): we should put browser JS files next to any HTML file |
- // rather than any entrypoint. An HTML file could import an entrypoint |
- // that's not adjacent. |
- _addBrowserJs(dir, "dart"); |
- _addBrowserJs(dir, "interop"); |
- } |
- |
- return entrypointDirs.length * 2; |
- } |
- |
- // TODO(nweiz): do something more principled when issue 6101 is fixed. |
- /// Ensures that the [name].js file is copied into [directory] in [target], |
- /// under `packages/browser/`. |
- void _addBrowserJs(String directory, String name) { |
- var jsPath = entrypoint.root.path( |
- outputDirectory, |
- directory, |
- 'packages', |
- 'browser', |
- '$name.js'); |
- ensureDir(path.dirname(jsPath)); |
- |
- // TODO(rnystrom): This won't work if we get rid of symlinks and the top |
- // level "packages" directory. Will need to copy from the browser |
- // directory. |
- copyFile(path.join(entrypoint.packagesDir, 'browser', '$name.js'), jsPath); |
- } |
- |
- /// Converts [entry] to a JSON object for use with JSON-formatted output. |
- Map _logEntryToJson(LogEntry entry) { |
- var data = { |
- "level": entry.level.name, |
- "transformer": { |
- "name": entry.transform.transformer.toString(), |
- "primaryInput": { |
- "package": entry.transform.primaryId.package, |
- "path": entry.transform.primaryId.path |
- }, |
- }, |
- "assetId": { |
- "package": entry.assetId.package, |
- "path": entry.assetId.path |
- }, |
- "message": entry.message |
- }; |
- |
- if (entry.span != null) { |
- data["span"] = { |
- "url": entry.span.sourceUrl, |
- "start": { |
- "line": entry.span.start.line, |
- "column": entry.span.start.column |
- }, |
- "end": { |
- "line": entry.span.end.line, |
- "column": entry.span.end.column |
- }, |
- }; |
- } |
- |
- return data; |
- } |
-} |