drop package_resolver dependency and release 2.x version

### Breaking changes

* Dropped the dependency on `package_resolver`.
  * All `PackageResolver` apis now take a `Map<String, Uri>` of package name
    to the base uri for resolving `package:` uris for that package.
  * Named arguments have been renamed from `resolver` to `packageMap`.
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7789778..f156022 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,12 @@
+## 2.0.0
+
+### Breaking changes
+
+* Dropped the dependency on `package_resolver`.
+  * All `PackageResolver` apis now take a `Map<String, Uri>` of package name
+    to the base uri for resolving `package:` uris for that package.
+  * Named arguments have been renamed from `resolver` to `packageMap`.
+
 ## 1.0.4
 
 * Set max SDK version to `<3.0.0`, and adjust other dependencies.
diff --git a/lib/shelf_packages_handler.dart b/lib/shelf_packages_handler.dart
index 677db97..694dcb5 100644
--- a/lib/shelf_packages_handler.dart
+++ b/lib/shelf_packages_handler.dart
@@ -5,32 +5,22 @@
 library shelf_packages_handler;
 
 import 'package:shelf/shelf.dart';
-import 'package:shelf_static/shelf_static.dart';
-import 'package:package_resolver/package_resolver.dart';
-import 'package:path/path.dart' as p;
 
-import 'src/async_handler.dart';
 import 'src/dir_handler.dart';
 import 'src/package_config_handler.dart';
 
 /// A handler that serves the contents of a virtual packages directory.
 ///
 /// This effectively serves `package:${request.url}`. It locates packages using
-/// the package resolution logic defined by [resolver]. If [resolver] isn't
-/// passed, it defaults to the current isolate's package resolution logic.
+/// the mapping defined by [packageMap]. If [packageMap] isn't passed, it
+/// defaults to the current isolate's package resolution logic.
+///
+/// The [packageMap] maps package names to the base uri for resolving
+/// `package:` uris for that package.
 ///
 /// This can only serve assets from `file:` URIs.
-Handler packagesHandler({PackageResolver resolver}) {
-  resolver ??= PackageResolver.current;
-  return AsyncHandler(resolver.packageRoot.then((packageRoot) {
-    if (packageRoot != null) {
-      return createStaticHandler(p.fromUri(packageRoot),
-          serveFilesOutsidePath: true);
-    } else {
-      return PackageConfigHandler(resolver);
-    }
-  }));
-}
+Handler packagesHandler({Map<String, Uri> packageMap}) =>
+    PackageConfigHandler(packageMap: packageMap).handleRequest;
 
 /// A handler that serves virtual `packages/` directories wherever they're
 /// requested.
@@ -40,5 +30,5 @@
 ///
 /// This is useful for ensuring that `package:` imports work for all entrypoints
 /// in Dartium.
-Handler packagesDirHandler({PackageResolver resolver}) =>
-    DirHandler('packages', packagesHandler(resolver: resolver));
+Handler packagesDirHandler({Map<String, Uri> packageMap}) =>
+    DirHandler('packages', packagesHandler(packageMap: packageMap));
diff --git a/lib/src/async_handler.dart b/lib/src/async_handler.dart
deleted file mode 100644
index c221aea..0000000
--- a/lib/src/async_handler.dart
+++ /dev/null
@@ -1,26 +0,0 @@
-// 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.
-
-import 'dart:async';
-
-import 'package:async/async.dart';
-import 'package:shelf/shelf.dart';
-
-class AsyncHandler {
-  final ResultFuture<Handler> _future;
-
-  AsyncHandler(Future<Handler> future) : _future = ResultFuture(future);
-
-  FutureOr<Response> call(Request request) {
-    if (_future.result == null) {
-      return _future.then((handler) => handler(request));
-    }
-
-    if (_future.result.isError) {
-      return Future.error(_future.result.asError.error);
-    }
-
-    return _future.result.asValue.value(request);
-  }
-}
diff --git a/lib/src/package_config_handler.dart b/lib/src/package_config_handler.dart
index 563e66c..d984021 100644
--- a/lib/src/package_config_handler.dart
+++ b/lib/src/package_config_handler.dart
@@ -3,42 +3,52 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:async';
+import 'dart:isolate';
 
-import 'package:package_resolver/package_resolver.dart';
 import 'package:path/path.dart' as p;
 import 'package:shelf/shelf.dart';
 import 'package:shelf_static/shelf_static.dart';
 
-import 'async_handler.dart';
-
 /// A shelf handler that serves a virtual packages directory based on a package
 /// config.
 class PackageConfigHandler {
   /// The static handlers for serving entries in the package config, indexed by
   /// name.
-  final _packageHandlers = <String, Handler>{};
+  final _packageHandlers = <String, Future<Handler>>{};
 
-  /// The information specifying how to do package resolution.
-  final PackageResolver _resolver;
+  /// Optional, a map of package names to base uri for resolving `package:`
+  /// uris for that package.
+  final Map<String, Uri> _packageMap;
 
-  PackageConfigHandler(this._resolver);
+  PackageConfigHandler({Map<String, Uri> packageMap})
+      : _packageMap = packageMap;
 
   /// The callback for handling a single request.
-  FutureOr<Response> call(Request request) {
+  Future<Response> handleRequest(Request request) async {
     var segments = request.url.pathSegments;
-    return _handlerFor(segments.first)(request.change(path: segments.first));
+    var handler = await _handlerFor(segments.first);
+    return handler(request.change(path: segments.first));
   }
 
-  /// Creates a handler for [package] based on the package map in [_resolver].
-  Handler _handlerFor(String package) {
-    return _packageHandlers.putIfAbsent(package, () {
-      return AsyncHandler(_resolver.urlFor(package).then((url) {
-        var handler = url == null
-            ? (_) => Response.notFound('Package $package not found.')
-            : createStaticHandler(p.fromUri(url), serveFilesOutsidePath: true);
+  /// Creates a handler for [packageName] based on the package map in
+  /// [_packageMap] or the current isolate resolver.
+  Future<Handler> _handlerFor(String packageName) {
+    return _packageHandlers.putIfAbsent(packageName, () async {
+      Uri packageUri;
+      if (_packageMap != null) {
+        packageUri = _packageMap[packageName];
+      } else {
+        var fakeResolvedUri = await Isolate.resolvePackageUri(
+            Uri(scheme: 'package', path: '$packageName/'));
+        packageUri = fakeResolvedUri;
+      }
 
-        return handler;
-      }));
+      var handler = packageUri == null
+          ? (_) => Response.notFound('Package $packageName not found.')
+          : createStaticHandler(p.fromUri(packageUri),
+              serveFilesOutsidePath: true);
+
+      return handler;
     });
   }
 }
diff --git a/pubspec.yaml b/pubspec.yaml
index 35e86e1..f03e57d 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,19 +1,20 @@
 name: shelf_packages_handler
-version: 1.0.5-dev
+version: 2.0.0
 
 description: A shelf handler for serving a `packages/` directory.
-author: Dart Team <misc@dartlang.org>
 homepage: https://github.com/dart-lang/shelf_packages_handler
 
 environment:
   sdk: '>=2.0.0 <3.0.0'
 
 dependencies:
-  async: '>=1.1.0 <3.0.0'
   path: ^1.0.0
-  shelf: '>=0.6.0 <0.8.0'
+  shelf: ^0.7.0
   shelf_static: ^0.2.0
-  package_resolver: ^1.0.0
 
 dev_dependencies:
   test: '>=1.0.0 <2.0.0'
+
+dependency_overrides:
+  # Required to get a pub solve
+  test: '>=1.0.0 <2.0.0'
diff --git a/test/packages_handler_test.dart b/test/packages_handler_test.dart
index 85938b6..3b0dea4 100644
--- a/test/packages_handler_test.dart
+++ b/test/packages_handler_test.dart
@@ -4,8 +4,6 @@
 
 import 'dart:io';
 
-import 'package:package_resolver/package_resolver.dart';
-import 'package:path/path.dart' as p;
 import 'package:shelf/shelf.dart';
 import 'package:shelf_packages_handler/shelf_packages_handler.dart';
 import 'package:test/test.dart';
@@ -38,36 +36,16 @@
           await response.readAsString(), contains('Handler packagesHandler'));
     });
 
-    group('with a package root', () {
-      PackageResolver resolver;
-      setUp(() => resolver = PackageResolver.root(p.toUri(dir)));
+    group('with a package map', () {
+      Handler handler;
 
-      test('looks up a real file', () async {
-        var handler = packagesHandler(resolver: resolver);
-        var request =
-            Request('GET', Uri.parse('http://example.com/foo/foo.dart'));
-        var response = await handler(request);
-        expect(response.statusCode, equals(200));
-        expect(await response.readAsString(), contains('in foo'));
-      });
-
-      test('404s for a nonexistent file', () async {
-        var handler = packagesHandler(resolver: resolver);
-        var request =
-            Request('GET', Uri.parse('http://example.com/foo/bar.dart'));
-        var response = await handler(request);
-        expect(response.statusCode, equals(404));
-      });
-    });
-
-    group('with a package config', () {
-      PackageResolver resolver;
       setUp(() {
-        resolver = PackageResolver.config({'foo': p.toUri('$dir/foo')});
+        handler = packagesHandler(packageMap: {
+          'foo': Uri.file('$dir/foo/'),
+        });
       });
 
       test('looks up a real file', () async {
-        var handler = packagesHandler(resolver: resolver);
         var request =
             Request('GET', Uri.parse('http://example.com/foo/foo.dart'));
         var response = await handler(request);
@@ -76,15 +54,15 @@
       });
 
       test('404s for a nonexistent package', () async {
-        var handler = packagesHandler(resolver: resolver);
         var request =
             Request('GET', Uri.parse('http://example.com/bar/foo.dart'));
         var response = await handler(request);
         expect(response.statusCode, equals(404));
+        expect(
+            await response.readAsString(), contains('Package bar not found'));
       });
 
       test('404s for a nonexistent file', () async {
-        var handler = packagesHandler(resolver: resolver);
         var request =
             Request('GET', Uri.parse('http://example.com/foo/bar.dart'));
         var response = await handler(request);