shelf_proxy initial commit
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..5cd143d
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+packages
+pubspec.lock
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/CHANGELOG.md
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..b490318
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,26 @@
+Copyright 2014, the shelf_proxy authors. All rights reserved.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+    * Neither the name of Google Inc. nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/README.md
diff --git a/lib/shelf_proxy.dart b/lib/shelf_proxy.dart
new file mode 100644
index 0000000..3c7f8bf
--- /dev/null
+++ b/lib/shelf_proxy.dart
@@ -0,0 +1 @@
+library shelf_proxy;
diff --git a/pubspec.yaml b/pubspec.yaml
new file mode 100644
index 0000000..8e6eb12
--- /dev/null
+++ b/pubspec.yaml
@@ -0,0 +1,15 @@
+name: shelf_proxy
+version: 0.0.1-dev
+author: Kevin Moore <github@j832.com>
+description: Shelf handlers to proxy requests to other HTTP servers
+environment:
+  sdk: '>=1.0.0 <2.0.0'
+dependencies:
+  http_parser: '>=0.0.2+2 <0.1.0'
+  mime: '>=0.9.0 <0.10.0'
+  shelf: '>=0.5.3 <0.6.0'
+dev_dependencies:
+  hop: '>=0.30.4 <0.32.0'
+  hop_unittest: '>=0.1.0 <0.2.0'
+  path: '>=1.1.0 <2.0.0'
+  scheduled_test: '>=0.11.0 <0.12.0'
diff --git a/test/harness_console.dart b/test/harness_console.dart
new file mode 100644
index 0000000..d04e002
--- /dev/null
+++ b/test/harness_console.dart
@@ -0,0 +1,7 @@
+library shelf_proxy.harness_console;
+
+import 'package:scheduled_test/scheduled_test.dart';
+
+void main() {
+  groupSep = ' - ';
+}
diff --git a/tool/hop_runner.dart b/tool/hop_runner.dart
new file mode 100644
index 0000000..262c863
--- /dev/null
+++ b/tool/hop_runner.dart
@@ -0,0 +1,30 @@
+library hop_runner;
+
+import 'dart:async';
+import 'dart:io';
+import 'package:hop/hop.dart';
+import 'package:hop/hop_tasks.dart';
+import 'package:hop_unittest/hop_unittest.dart';
+
+import '../test/harness_console.dart' as test_console;
+
+void main(List<String> args) {
+  addTask('test', createUnitTestTask(test_console.main));
+
+  //
+  // Analyzer
+  //
+  addTask('analyze_libs', createAnalyzerTask(_getLibs));
+
+  addTask('analyze_test_libs', createAnalyzerTask(
+      ['test/harness_console.dart']));
+
+  runHop(args);
+}
+
+Future<List<String>> _getLibs() {
+  return new Directory('lib').list()
+      .where((FileSystemEntity fse) => fse is File)
+      .map((File file) => file.path)
+      .toList();
+}