Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1028)

Unified Diff: sdk/lib/_internal/pub/lib/src/barback/barback_server.dart

Issue 1165473002: Start pulling pub from its own repo. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Code review changes Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: sdk/lib/_internal/pub/lib/src/barback/barback_server.dart
diff --git a/sdk/lib/_internal/pub/lib/src/barback/barback_server.dart b/sdk/lib/_internal/pub/lib/src/barback/barback_server.dart
deleted file mode 100644
index f825bd853240a1e4e746bbec31e7552d3fcee567..0000000000000000000000000000000000000000
--- a/sdk/lib/_internal/pub/lib/src/barback/barback_server.dart
+++ /dev/null
@@ -1,209 +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.barback.server;
-
-import 'dart:async';
-import 'dart:io';
-
-import 'package:barback/barback.dart';
-import 'package:mime/mime.dart';
-import 'package:path/path.dart' as path;
-import 'package:shelf/shelf.dart' as shelf;
-import 'package:stack_trace/stack_trace.dart';
-
-import '../barback.dart';
-import '../io.dart';
-import '../log.dart' as log;
-import '../utils.dart';
-import 'base_server.dart';
-import 'asset_environment.dart';
-
-/// Callback for determining if an asset with [id] should be served or not.
-typedef bool AllowAsset(AssetId id);
-
-/// A server that serves assets transformed by barback.
-class BarbackServer extends BaseServer<BarbackServerResult> {
- /// The package whose assets are being served.
- final String package;
-
- /// The directory in the root which will serve as the root of this server as
- /// a native platform path.
- ///
- /// This may be `null` in which case no files in the root package can be
- /// served and only assets in "lib" directories are available.
- final String rootDirectory;
-
- /// Optional callback to determine if an asset should be served.
- ///
- /// This can be set to allow outside code to filter out assets. Pub serve
- /// uses this after plug-ins are loaded to avoid serving ".dart" files in
- /// release mode.
- ///
- /// If this is `null`, all assets may be served.
- AllowAsset allowAsset;
-
- /// Creates a new server and binds it to [port] of [host].
- ///
- /// This server serves assets from [barback], and uses [rootDirectory]
- /// (which is relative to the root directory of [package]) as the root
- /// directory. If [rootDirectory] is omitted, the bound server can only be
- /// used to serve assets from packages' lib directories (i.e. "packages/..."
- /// URLs). If [package] is omitted, it defaults to the entrypoint package.
- static Future<BarbackServer> bind(AssetEnvironment environment,
- String host, int port, {String package, String rootDirectory}) {
- if (package == null) package = environment.rootPackage.name;
- return bindServer(host, port).then((server) {
- if (rootDirectory == null) {
- log.fine('Serving packages on $host:$port.');
- } else {
- log.fine('Bound "$rootDirectory" to $host:$port.');
- }
- return new BarbackServer._(environment, server, package, rootDirectory);
- });
- }
-
- BarbackServer._(AssetEnvironment environment, HttpServer server,
- this.package, this.rootDirectory)
- : super(environment, server);
-
- /// Converts a [url] served by this server into an [AssetId] that can be
- /// requested from barback.
- AssetId urlToId(Uri url) {
- // See if it's a URL to a public directory in a dependency.
- var id = packagesUrlToId(url);
- if (id != null) return id;
-
- if (rootDirectory == null) {
- throw new FormatException(
- "This server cannot serve out of the root directory. Got $url.");
- }
-
- // Otherwise, it's a path in current package's [rootDirectory].
- var parts = path.url.split(url.path);
-
- // Strip the leading "/" from the URL.
- if (parts.isNotEmpty && parts.first == "/") parts = parts.skip(1);
-
- var relativePath = path.url.join(rootDirectory, path.url.joinAll(parts));
- return new AssetId(package, relativePath);
- }
-
- /// Handles an HTTP request.
- handleRequest(shelf.Request request) {
- if (request.method != "GET" && request.method != "HEAD") {
- return methodNotAllowed(request);
- }
-
- var id;
- try {
- id = urlToId(request.url);
- } on FormatException catch (ex) {
- // If we got here, we had a path like "/packages" which is a special
- // directory, but not a valid path since it lacks a following package
- // name.
- return notFound(request, error: ex.message);
- }
-
- // See if the asset should be blocked.
- if (allowAsset != null && !allowAsset(id)) {
- return notFound(request,
- error: "Asset $id is not available in this configuration.",
- asset: id);
- }
-
- return environment.barback.getAssetById(id).then((result) {
- return result;
- }).then((asset) => _serveAsset(request, asset)).catchError((error, trace) {
- if (error is! AssetNotFoundException) throw error;
- return environment.barback.getAssetById(id.addExtension("/index.html"))
- .then((asset) {
- if (request.url.path.endsWith('/')) return _serveAsset(request, asset);
-
- // We only want to serve index.html if the URL explicitly ends in a
- // slash. For other URLs, we redirect to one with the slash added to
- // implicitly support that too. This follows Apache's behavior.
- logRequest(request, "302 Redirect to ${request.url}/");
- return new shelf.Response.found('${request.url}/');
- }).catchError((newError, newTrace) {
- // If we find neither the original file or the index, we should report
- // the error about the original to the user.
- throw newError is AssetNotFoundException ? error : newError;
- });
- }).catchError((error, trace) {
- if (error is! AssetNotFoundException) {
- trace = new Chain.forTrace(trace);
- logRequest(request, "$error\n$trace");
-
- addError(error, trace);
- close();
- return new shelf.Response.internalServerError();
- }
-
- addResult(new BarbackServerResult._failure(request.url, id, error));
- return notFound(request, asset: id);
- }).then((response) {
- // Allow requests of any origin to access "pub serve". This is useful for
- // running "pub serve" in parallel with another development server. Since
- // "pub serve" is only used as a development server and doesn't require
- // any sort of credentials anyway, this is secure.
- return response.change(
- headers: const {"Access-Control-Allow-Origin": "*"});
- });
- }
-
- /// Returns the body of [asset] as a response to [request].
- Future<shelf.Response> _serveAsset(shelf.Request request, Asset asset) {
- return validateStream(asset.read()).then((stream) {
- addResult(new BarbackServerResult._success(request.url, asset.id));
- var headers = {};
- var mimeType = lookupMimeType(asset.id.path);
- if (mimeType != null) headers['Content-Type'] = mimeType;
- return new shelf.Response.ok(stream, headers: headers);
- }).catchError((error, trace) {
- addResult(new BarbackServerResult._failure(request.url, asset.id, error));
-
- // If we couldn't read the asset, handle the error gracefully.
- if (error is FileSystemException) {
- // Assume this means the asset was a file-backed source asset
- // and we couldn't read it, so treat it like a missing asset.
- return notFound(request, error: error.toString(), asset: asset.id);
- }
-
- trace = new Chain.forTrace(trace);
- logRequest(request, "$error\n$trace");
-
- // Otherwise, it's some internal error.
- return new shelf.Response.internalServerError(body: error.toString());
- });
- }
-}
-
-/// The result of the server handling a URL.
-///
-/// Only requests for which an asset was requested from barback will emit a
-/// result. Malformed requests will be handled internally.
-class BarbackServerResult {
- /// The requested url.
- final Uri url;
-
- /// The id that [url] identifies.
- final AssetId id;
-
- /// The error thrown by barback.
- ///
- /// If the request was served successfully, this will be null.
- final error;
-
- /// Whether the request was served successfully.
- bool get isSuccess => error == null;
-
- /// Whether the request was served unsuccessfully.
- bool get isFailure => !isSuccess;
-
- BarbackServerResult._success(this.url, this.id)
- : error = null;
-
- BarbackServerResult._failure(this.url, this.id, this.error);
-}
« no previous file with comments | « sdk/lib/_internal/pub/lib/src/barback/asset_environment.dart ('k') | sdk/lib/_internal/pub/lib/src/barback/base_server.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698