Tear out OSS-only parts of rules_typescript

These already moved to rules_nodejs

Closes #429

PiperOrigin-RevId: 241422158
diff --git a/.bazelci/presubmit.yml b/.bazelci/presubmit.yml
index 92b8746..dc31779 100644
--- a/.bazelci/presubmit.yml
+++ b/.bazelci/presubmit.yml
@@ -17,9 +17,6 @@
     - "@nodejs//:yarn"
     build_targets:
     - "..."
-    # Run some targets again, but addressed as an external repo
-    # TODO(alexeagle): run all of them after fixing https://github.com/bazelbuild/rules_typescript/issues/243
-    - "@npm_bazel_typescript//examples/some_library:lib"
     test_flags:
     # TODO(gregmagolan): shared libs needed by chrome & firefox not available on ubuntu1604
     - "--test_tag_filters=-browser:chromium-local,-browser:firefox-local"
diff --git a/BUILD.bazel b/BUILD.bazel
index 74d8f24..d542231 100644
--- a/BUILD.bazel
+++ b/BUILD.bazel
@@ -22,48 +22,19 @@
 load("@build_bazel_rules_nodejs//:defs.bzl", "npm_package")
 load("@build_bazel_rules_nodejs//internal/js_library:js_library.bzl", "js_library")
 
-# ts_library defaults to this label in the top-level package.
-# Point to where the file actually lives.
-alias(
-    name = "tsconfig.json",
-    actual = "//examples:tsconfig.json",
-    visibility = ["//visibility:public"],
-)
-
-exports_files(["LICENSE"])
+exports_files(["LICENSE", "tsconfig.json"])
 
 gazelle(
     name = "gazelle",
     prefix = "github.com/bazelbuild/rules_typescript",
 )
 
-# Runtime libraries needed by the protobufjs library.
-# Any JS code produced by the ts_proto_library rule has a runtime dependency on these scripts.
-js_library(
-    name = "protobufjs_bootstrap_scripts",
-    srcs = [
-        "@build_bazel_rules_typescript_protobufs_compiletime_deps//node_modules/long:dist/long.js",
-        "@build_bazel_rules_typescript_protobufs_compiletime_deps//node_modules/protobufjs:dist/minimal/protobuf.min.js",
-    ],
-    # Make devmode loading work when it does require("protobufjs/minimal")
-    # so this is shimmed to define it to equal global.protobuf
-    amd_names = {
-        "long": "Long",
-        "protobufjs/minimal": "protobuf",
-    },
-    visibility = ["//visibility:public"],
-)
-
-
 # This package is included in the npm_bazel_typescript package in rules_nodejs/packages/typescript
 npm_package(
     name = "npm_bazel_typescript_package",
     srcs = [
         "//third_party/github.com/bazelbuild/bazel/src/main/protobuf:npm_package_assets",
-        "//internal:common/compilation.bzl",
-        "//internal:common/json_marshal.bzl",
-        "//internal:common/module_mappings.bzl",
-        "//internal:common/tsconfig.bzl",
+        "//internal:npm_package_assets",
     ],
     deps = [
         "//internal:generated_BUILD",
diff --git a/README.md b/README.md
index 8c999b3..41028ad 100644
--- a/README.md
+++ b/README.md
@@ -1,8 +1,5 @@
 # build_bazel_rules_typescript
 
-> Looking for documentation for TypeScript bazel rules that used to be here?
-> See https://npmjs.com/package/@bazel/typescript
-
 This repo contains a mirror of some Google-internal bits that support TypeScript development under Bazel.
 
 It contains these utilities:
diff --git a/WORKSPACE b/WORKSPACE
index e6fc9e8..7bb6346 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -12,26 +12,15 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-workspace(name = "npm_bazel_typescript")
-
-# Load nested npm_bazel_karma repository
-local_repository(
-    name = "npm_bazel_karma",
-    path = "internal/karma",
-)
+workspace(name = "build_bazel_rules_typescript")
 
 # Load our dependencies
 load("//:package.bzl", "rules_typescript_dev_dependencies")
 
 rules_typescript_dev_dependencies()
 
-# Load rules_karma dependencies
-load("@npm_bazel_karma//:package.bzl", "rules_karma_dependencies")
-
-rules_karma_dependencies()
-
 # Setup nodejs toolchain
-load("@build_bazel_rules_nodejs//:defs.bzl", "node_repositories", "yarn_install")
+load("@build_bazel_rules_nodejs//:defs.bzl", "yarn_install")
 
 # Use a bazel-managed npm dependency, allowing us to test resolution to these paths
 yarn_install(
@@ -40,9 +29,6 @@
     yarn_lock = "//examples/bazel_managed_deps:yarn.lock",
 )
 
-# Install a hermetic version of node.
-node_repositories()
-
 # Download npm dependencies
 yarn_install(
     name = "npm",
@@ -50,6 +36,9 @@
     yarn_lock = "//:yarn.lock",
 )
 
+load("@npm//:install_bazel_dependencies.bzl", "install_bazel_dependencies")
+install_bazel_dependencies()
+
 # Setup rules_go toolchain
 load("@io_bazel_rules_go//go:def.bzl", "go_register_toolchains", "go_rules_dependencies")
 
@@ -67,21 +56,6 @@
 
 ts_setup_dev_workspace()
 
-# Dependencies for generating documentation
-load("@io_bazel_rules_sass//sass:sass_repositories.bzl", "sass_repositories")
-
-sass_repositories()
-
-# Setup rules_webtesting toolchain
-load("@io_bazel_rules_webtesting//web:repositories.bzl", "web_test_repositories")
-
-web_test_repositories()
-
-# Setup browser repositories
-load("@npm_bazel_karma//:browser_repositories.bzl", "browser_repositories")
-
-browser_repositories()
-
 local_repository(
     name = "devserver_test_workspace",
     path = "devserver/devserver/test/test-workspace",
diff --git a/defs.bzl b/defs.bzl
deleted file mode 100644
index 2e223e8..0000000
--- a/defs.bzl
+++ /dev/null
@@ -1,33 +0,0 @@
-# Copyright 2017 The Bazel Authors. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-""" Public API surface is re-exported here.
-
-Users should not load files under "/internal"
-"""
-
-load("//internal/devserver:ts_devserver.bzl", _ts_devserver = "ts_devserver_macro")
-load("//internal/protobufjs:ts_proto_library.bzl", _ts_proto_library = "ts_proto_library")
-load("//internal:build_defs.bzl", _ts_library = "ts_library_macro")
-load("//internal:ts_config.bzl", _ts_config = "ts_config")
-load("//internal:ts_repositories.bzl", _ts_setup_workspace = "ts_setup_workspace")
-
-ts_setup_workspace = _ts_setup_workspace
-ts_library = _ts_library
-ts_config = _ts_config
-ts_devserver = _ts_devserver
-
-ts_proto_library = _ts_proto_library
-# DO NOT ADD MORE rules here unless they appear in the generated docsite.
-# Run yarn skydoc to re-generate the docsite.
diff --git a/devserver/devserver/devserver_test.go b/devserver/devserver/devserver_test.go
index 1fa9129..0c0ba56 100644
--- a/devserver/devserver/devserver_test.go
+++ b/devserver/devserver/devserver_test.go
@@ -47,9 +47,9 @@
 	handler := CreateFileHandler("/app.js", "manifest.MF", []string{
 		// This verifies that we can resolve relatively to the current package. Usually the
 		// devserver Bazel rule adds the current package here.
-		"npm_bazel_typescript/devserver/devserver",
+		"build_bazel_rules_typescript/devserver/devserver",
 		// Verifies that we can specify subfolders of workspaces
-		"npm_bazel_typescript/devserver/devserver/test",
+		"build_bazel_rules_typescript/devserver/devserver/test",
 		// Verifies that we can specify external workspaces as root dirs.
 		"devserver_test_workspace",
 		// Verifies that we can specify subfolders from external workspaces.
diff --git a/examples/BUILD.bazel b/examples/BUILD.bazel
deleted file mode 100644
index a5a3072..0000000
--- a/examples/BUILD.bazel
+++ /dev/null
@@ -1,60 +0,0 @@
-# Copyright 2017 The Bazel Authors. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-load("//:defs.bzl", "ts_config")
-load("//internal:defaults.bzl", "ts_library")
-
-package(default_visibility = ["//visibility:public"])
-
-exports_files(["tsconfig.json"])
-
-ts_library(
-    name = "types",
-    srcs = ["types.d.ts"],
-)
-
-ts_library(
-    name = "foo_ts_library",
-    srcs = ["foo.ts"],
-    tsconfig = ":tsconfig.json",
-    deps = [
-        ":types",
-        "//examples/generated_ts",
-    ],
-)
-
-ts_library(
-    name = "bar_ts_library",
-    srcs = ["bar.ts"],
-    tsconfig = ":tsconfig-bar.json",
-    deps = [
-        ":foo_ts_library",
-        "//examples/generated_ts",
-        "//examples/some_library:lib",
-        "@npm//typescript",
-        # Example of using the `@npm//@types` target to depend on all
-        # @types packages and with the types attribute of tsconfig not
-        # specified. In this case, typescript will automatically discover
-        # all types under node_modules/@types and included them in the compile.
-        # See getAutomaticTypeDirectiveNames in
-        # https://github.com/Microsoft/TypeScript/blob/master/src/compiler/moduleNameResolver.ts.
-        "@npm//@types",
-    ],
-)
-
-ts_config(
-    name = "tsconfig-test",
-    src = "tsconfig-test.json",
-    deps = [":tsconfig.json"],
-)
diff --git a/examples/app/BUILD.bazel b/examples/app/BUILD.bazel
deleted file mode 100644
index 89842d1..0000000
--- a/examples/app/BUILD.bazel
+++ /dev/null
@@ -1,45 +0,0 @@
-load("@build_bazel_rules_nodejs//:defs.bzl", "http_server", "rollup_bundle")
-load("//:defs.bzl", "ts_devserver")
-load("//internal:defaults.bzl", "ts_library")
-
-ts_library(
-    name = "app",
-    srcs = ["app.ts"],
-)
-
-ts_devserver(
-    name = "devserver",
-    port = 8080,
-    # This is the path we'll request from the browser, see index.html
-    serving_path = "/bundle.min.js",
-    # The devserver can serve our static files too
-    static_files = ["index.html"],
-    # We'll collect all the devmode JS sources from these TypeScript libraries
-    deps = [":app"],
-)
-
-rollup_bundle(
-    name = "bundle",
-    entry_point = "examples/app/app",
-    deps = [":app"],
-)
-
-http_server(
-    name = "prodserver",
-    data = [
-        "index.html",
-        ":bundle",
-    ],
-)
-
-ts_library(
-    name = "e2e",
-    testonly = 1,
-    srcs = ["app_e2e_test.ts"],
-    tsconfig = "//examples:tsconfig-test",
-    deps = [
-        "@npm//@types/jasmine",
-        "@npm//@types/node",
-        "@npm//protractor",
-    ],
-)
diff --git a/examples/app/app.ts b/examples/app/app.ts
deleted file mode 100644
index 6c1c6e9..0000000
--- a/examples/app/app.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-const el: HTMLDivElement = document.createElement('div');
-el.innerText = 'Hello, TypeScript';
-el.className = 'ts1';
-document.body.appendChild(el);
diff --git a/examples/app/app_e2e_test.ts b/examples/app/app_e2e_test.ts
deleted file mode 100644
index 1ce56fb..0000000
--- a/examples/app/app_e2e_test.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-import {browser, by, element, ExpectedConditions} from 'protractor';
-
-// This test uses Protractor without Angular, so disable Angular features
-browser.waitForAngularEnabled(false);
-
-// Since we don't have a protractor bazel rule yet, the test is brought up in
-// parallel with building the service under test. So the timeout must include
-// compiling the application as well as starting the server.
-const timeoutMs = 90 * 1000;
-
-describe('app', () => {
-  beforeAll(() => {
-    browser.get('');
-    // Don't run any specs until we see a <div> on the page.
-    browser.wait(
-        ExpectedConditions.presenceOf(element(by.css('div.ts1'))),
-        timeoutMs);
-  }, timeoutMs);
-
-  it('should display: Hello, TypeScript', (done) => {
-    const div = element(by.css('div.ts1'));
-    div.getText().then(t => expect(t).toEqual(`Hello, TypeScript`));
-    done();
-  });
-});
diff --git a/examples/app/index.html b/examples/app/index.html
deleted file mode 100644
index 8af1e7f..0000000
--- a/examples/app/index.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!doctype html>
-
-<!--
-   This HTML file is an example of how you can write and serve your own
-   index page. It's not required for ts_devserver - if no index.html file is
-   found to serve, a simple one will be generated.
--->
-<html>
-  <head>
-    <title>ts_devserver example</title>
-  </head>
-  <body>
-    <!--
-      For development mode, this script will be bundled on-the-fly by
-      the devserver, based on the latest JS files built by Bazel.
-      For production, you should be able to use the same index.html file, but
-      this JS resource would be served from a static file.
-    -->
-    <script src="/bundle.min.js"></script>
-  </body>
-</html>
diff --git a/examples/bar.ts b/examples/bar.ts
deleted file mode 100644
index d363ae3..0000000
--- a/examples/bar.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * @license
- * Copyright 2017 The Bazel Authors. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- *
- * You may obtain a copy of the License at
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import {Greeter} from 'npm_bazel_typescript/examples/foo';
-import {a} from 'npm_bazel_typescript/examples/generated_ts/foo';
-// Repro for #31, should automatically discover @types/node
-import * as fs from 'fs';
-import {cool} from 'some-lib';
-import * as ts from 'typescript';
-
-import('./foo').then(({greeter}) => {
-  console.log(Greeter, fs, cool, ts, greeter, a);
-});
\ No newline at end of file
diff --git a/examples/bazel_managed_deps/BUILD.bazel b/examples/bazel_managed_deps/BUILD.bazel
deleted file mode 100644
index 43c5bd6..0000000
--- a/examples/bazel_managed_deps/BUILD.bazel
+++ /dev/null
@@ -1,8 +0,0 @@
-load("//internal:defaults.bzl", "ts_library")
-
-ts_library(
-    name = "bazel_managed_deps",
-    srcs = ["index.ts"],
-    node_modules = "@build_bazel_rules_typescript_internal_bazel_managed_deps//:node_modules",
-    tsconfig = ":tsconfig.json",
-)
diff --git a/examples/bazel_managed_deps/README.md b/examples/bazel_managed_deps/README.md
deleted file mode 100644
index c0cff30..0000000
--- a/examples/bazel_managed_deps/README.md
+++ /dev/null
@@ -1,12 +0,0 @@
-# Bazel-managed deps
-
-The NodeJS rules allow you to skip the install step, and have Bazel run yarn/npm for you.
-
-See the /WORKSPACE file where we declare a workspace called
-build_bazel_rules_typescript_internal_bazel_managed_deps
-that will be installed automatically by Bazel.
-
-We then can build the code in this directory without installing the package.json located here.
-
-Regression test for
-https://github.com/bazelbuild/rules_typescript/issues/179
diff --git a/examples/bazel_managed_deps/index.ts b/examples/bazel_managed_deps/index.ts
deleted file mode 100644
index 5b3b16a..0000000
--- a/examples/bazel_managed_deps/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-import * as t from 'three';
diff --git a/examples/bazel_managed_deps/package.json b/examples/bazel_managed_deps/package.json
deleted file mode 100644
index 4a39fc5..0000000
--- a/examples/bazel_managed_deps/package.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-  "name": "bazel_managed_deps",
-  "devDependencies": {
-    "@types/three": "^0.91.10",
-    "three": "^0.92.0",
-    "typescript": "^2.8.3"
-  }
-}
diff --git a/examples/bazel_managed_deps/tsconfig.json b/examples/bazel_managed_deps/tsconfig.json
deleted file mode 100644
index aee0ec9..0000000
--- a/examples/bazel_managed_deps/tsconfig.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-  "compilerOptions": {
-    "strict": true
-  }
-}
diff --git a/examples/bazel_managed_deps/yarn.lock b/examples/bazel_managed_deps/yarn.lock
deleted file mode 100644
index 4ba79ac..0000000
--- a/examples/bazel_managed_deps/yarn.lock
+++ /dev/null
@@ -1,21 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-"@types/three@^0.91.10":
-  version "0.91.10"
-  resolved "https://registry.yarnpkg.com/@types/three/-/three-0.91.10.tgz#996b82993902d564daa1c29d0c3d653f2b15243a"
-  dependencies:
-    "@types/webvr-api" "*"
-
-"@types/webvr-api@*":
-  version "0.0.34"
-  resolved "https://registry.yarnpkg.com/@types/webvr-api/-/webvr-api-0.0.34.tgz#8fa49028de925c7b8bce3d559d3374ce2c89ee28"
-
-three@^0.92.0:
-  version "0.92.0"
-  resolved "https://registry.yarnpkg.com/three/-/three-0.92.0.tgz#8d3d1f5af890e62da7f4cb45d20c09fa51057dcd"
-
-typescript@^2.8.3:
-  version "2.8.3"
-  resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.8.3.tgz#5d817f9b6f31bb871835f4edf0089f21abe6c170"
diff --git a/examples/devmode_consumer/BUILD.bazel b/examples/devmode_consumer/BUILD.bazel
deleted file mode 100644
index 78d6a46..0000000
--- a/examples/devmode_consumer/BUILD.bazel
+++ /dev/null
@@ -1,15 +0,0 @@
-load(":devmode_consumer.bzl", "devmode_consumer")
-
-devmode_consumer(
-    name = "devmode_consumer",
-    deps = ["//examples:bar_ts_library"],
-)
-
-sh_test(
-    name = "devmode_consumer_test",
-    srcs = ["devmode_consumer_test.sh"],
-    data = [
-        ":devmode_consumer",
-        "@bazel_tools//tools/bash/runfiles",
-    ],
-)
diff --git a/examples/devmode_consumer/devmode_consumer.bzl b/examples/devmode_consumer/devmode_consumer.bzl
deleted file mode 100644
index b23a4b4..0000000
--- a/examples/devmode_consumer/devmode_consumer.bzl
+++ /dev/null
@@ -1,40 +0,0 @@
-# Copyright 2017 The Bazel Authors. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Example of a rule that requires es2015 (devmode) inputs.
-"""
-
-load("@build_bazel_rules_nodejs//internal/common:sources_aspect.bzl", "sources_aspect")
-
-def _devmode_consumer(ctx):
-    files = depset()
-
-    # Since we apply the sources_aspect to our deps below, we can iterate through
-    # the deps and grab the attribute attached by that aspect, which is called
-    # "node_sources".
-    # See https://github.com/bazelbuild/rules_nodejs/blob/master/internal/node.bzl
-    for d in ctx.attr.deps:
-        files = depset(transitive = [files, d.node_sources])
-
-    return [DefaultInfo(
-        files = files,
-        runfiles = ctx.runfiles(files.to_list()),
-    )]
-
-devmode_consumer = rule(
-    implementation = _devmode_consumer,
-    attrs = {
-        "deps": attr.label_list(aspects = [sources_aspect]),
-    },
-)
diff --git a/examples/devmode_consumer/devmode_consumer_test.sh b/examples/devmode_consumer/devmode_consumer_test.sh
deleted file mode 100755
index eb51180..0000000
--- a/examples/devmode_consumer/devmode_consumer_test.sh
+++ /dev/null
@@ -1,88 +0,0 @@
-#!/bin/bash
-set -e
-
-# --- begin runfiles.bash initialization ---
-# Source the runfiles library:
-# https://github.com/bazelbuild/bazel/blob/master/tools/bash/runfiles/runfiles.bash
-# The runfiles library defines rlocation, which is a platform independent function
-# used to lookup the runfiles locations. This code snippet is needed at the top
-# of scripts that use rlocation to lookup the location of runfiles.bash and source it
-if [[ ! -d "${RUNFILES_DIR:-/dev/null}" && ! -f "${RUNFILES_MANIFEST_FILE:-/dev/null}" ]]; then
-    if [[ -f "$0.runfiles_manifest" ]]; then
-      export RUNFILES_MANIFEST_FILE="$0.runfiles_manifest"
-    elif [[ -f "$0.runfiles/MANIFEST" ]]; then
-      export RUNFILES_MANIFEST_FILE="$0.runfiles/MANIFEST"
-    elif [[ -f "$0.runfiles/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then
-      export RUNFILES_DIR="$0.runfiles"
-    fi
-fi
-if [[ -f "${RUNFILES_DIR:-/dev/null}/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then
-  source "${RUNFILES_DIR}/bazel_tools/tools/bash/runfiles/runfiles.bash"
-elif [[ -f "${RUNFILES_MANIFEST_FILE:-/dev/null}" ]]; then
-  source "$(grep -m1 "^bazel_tools/tools/bash/runfiles/runfiles.bash " \
-            "$RUNFILES_MANIFEST_FILE" | cut -d ' ' -f 2-)"
-else
-  echo >&2 "ERROR: cannot find @bazel_tools//tools/bash/runfiles:runfiles.bash"
-  exit 1
-fi
-# --- end runfiles.bash initialization ---
-
-readonly LIBRARY_JS=$(cat $(rlocation "npm_bazel_typescript/examples/some_library/library.js"))
-readonly BAR_JS=$(cat $(rlocation "npm_bazel_typescript/examples/bar.js"))
-readonly FOO_JS=$(cat $(rlocation "npm_bazel_typescript/examples/foo.js"))
-
-# should produce named UMD modules
-if [[ "$LIBRARY_JS" != *"define(\"some-lib\""* ]]; then
-  echo "Expected library.js to declare module named some-lib, but was"
-  echo "$LIBRARY_JS"
-  exit 1
-fi
-
-# should produce named UMD modules
-if [[ "$BAR_JS" != *"define(\"npm_bazel_typescript/examples/bar\""* ]]; then
-  echo "Expected bar.js to declare named module, but was"
-  echo "$BAR_JS"
-  exit 1
-fi
-
-# should give a name to required modules
-if [[ "$BAR_JS" != *"require(\"npm_bazel_typescript/examples/foo\")"* ]]; then
-  echo "Expected bar.js to require named module foo, but was"
-  echo "$BAR_JS"
-  exit 1
-fi
-
-# should give a name to required modules from other compilation unit
-if [[ "$BAR_JS" != *"require(\"some-lib\")"* ]]; then
-  echo "Expected bar.js to require named module library, but was"
-  echo "$BAR_JS"
-  exit 1
-fi
-
-# should give a name to required generated modules without bazel-bin
-if [[ "$BAR_JS" != *"require(\"npm_bazel_typescript/examples/generated_ts/foo\")"* ]]; then
-  echo "Expected bar.js to require generated named module foo, but was"
-  echo "$BAR_JS"
-  exit 1
-fi
-
-# should not give a module name to external modules
-if [[ "$BAR_JS" != *"require(\"typescript\")"* ]]; then
-  echo "Expected bar.js to require typescript by its original name, but was"
-  echo "$BAR_JS"
-  exit 1
-fi
-
-# should produce named UMD modules
-if [[ "$FOO_JS" != *"define(\"npm_bazel_typescript/examples/foo\""* ]]; then
-  echo "Expected foo.js to declare named module, but was"
-  echo "$FOO_JS"
-  exit 1
-fi
-
-# should produce es2015 classes
-if [[ "$FOO_JS" != *"class Greeter"* ]]; then
-  echo "Expected foo.js produce a es2015, but was"
-  echo "$FOO_JS"
-  exit 1
-fi
\ No newline at end of file
diff --git a/examples/devserver/BUILD.bazel b/examples/devserver/BUILD.bazel
deleted file mode 100644
index 249e728..0000000
--- a/examples/devserver/BUILD.bazel
+++ /dev/null
@@ -1,44 +0,0 @@
-load("//:defs.bzl", "ts_devserver")
-load("//internal:defaults.bzl", "ts_library")
-
-ts_library(
-    name = "app",
-    srcs = ["app.ts"],
-    tsconfig = "//examples:tsconfig.json",
-    deps = [
-        "@npm//@types/node",
-    ],
-)
-
-ts_devserver(
-    name = "devserver",
-    additional_root_paths = [
-        "npm/node_modules/tslib",
-        "npm_bazel_typescript/examples/devserver/",
-    ],
-    port = 80,
-    serving_path = "/bundle.js",
-    static_files = [
-        # Files you want to import from the "additional_root_paths", still need to be explicitly specified
-        # as files that should be served. The root paths just make it more convenient to import those dependencies.
-        "@npm//tslib",
-        ":say-hello",
-        ":print-host",
-        ":index.html",
-    ],
-    # Dependencies that produce JavaScript output will be automatically picked up by ConcatJS and will be
-    # part of the serving_path bundle.
-    deps = [":app"],
-)
-
-genrule(
-    name = "say-hello",
-    outs = ["say-hello.js"],
-    cmd = "echo 'console.log(\"Hello!\")' > $@",
-)
-
-genrule(
-    name = "print-host",
-    outs = ["test/print-host.js"],
-    cmd = "echo 'console.log(location.host)' > $@",
-)
diff --git a/examples/devserver/app.ts b/examples/devserver/app.ts
deleted file mode 100644
index a200b40..0000000
--- a/examples/devserver/app.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-const body = document.body;
-const textElement = document.createElement('span');
-
-textElement.innerText = 'Hello from TypeScript';
-
-// Append element to the body.
-body.appendChild(textElement);
\ No newline at end of file
diff --git a/examples/devserver/index.html b/examples/devserver/index.html
deleted file mode 100644
index 991a2f1..0000000
--- a/examples/devserver/index.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<html>
-<head>
-    <title>Devserver example</title>
-</head>
-<body>
-    <!-- Scripts loaded through the additional_root_paths. -->
-    <script src="/say-hello.js"></script>
-    <script src="/tslib.js"></script>
-
-    <!-- Bundle that comes from concatjs. Specified with serving_path. -->
-    <script src="/bundle.js"></script>
-
-    <!-- Script that is imported relatively to the package directory. -->
-    <script src="/test/print-host.js"></script>
-</body>
-</html>
\ No newline at end of file
diff --git a/examples/es6_output/BUILD.bazel b/examples/es6_output/BUILD.bazel
deleted file mode 100644
index b5ff91c..0000000
--- a/examples/es6_output/BUILD.bazel
+++ /dev/null
@@ -1,31 +0,0 @@
-# Copyright 2017 The Bazel Authors. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-load(":es6_consumer.bzl", "es6_consumer")
-
-package(default_visibility = ["//visibility:public"])
-
-es6_consumer(
-    name = "es6_output",
-    deps = ["//examples:bar_ts_library"],
-)
-
-sh_test(
-    name = "es6_output_test",
-    srcs = ["es6_output_test.sh"],
-    data = [
-        ":es6_output",
-        "@bazel_tools//tools/bash/runfiles",
-    ],
-)
diff --git a/examples/es6_output/es6_consumer.bzl b/examples/es6_output/es6_consumer.bzl
deleted file mode 100644
index 16726ba..0000000
--- a/examples/es6_output/es6_consumer.bzl
+++ /dev/null
@@ -1,33 +0,0 @@
-# Copyright 2017 The Bazel Authors. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Example of a rule that requires ES6 inputs.
-"""
-
-load("@build_bazel_rules_nodejs//internal/common:collect_es6_sources.bzl", "collect_es6_sources")
-
-def _es6_consumer(ctx):
-    es6_sources = collect_es6_sources(ctx)
-
-    return [DefaultInfo(
-        files = es6_sources,
-        runfiles = ctx.runfiles(es6_sources.to_list()),
-    )]
-
-es6_consumer = rule(
-    implementation = _es6_consumer,
-    attrs = {
-        "deps": attr.label_list(),
-    },
-)
diff --git a/examples/es6_output/es6_output_test.sh b/examples/es6_output/es6_output_test.sh
deleted file mode 100755
index c6a0102..0000000
--- a/examples/es6_output/es6_output_test.sh
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/bin/bash
-set -e
-
-# --- begin runfiles.bash initialization ---
-# Source the runfiles library:
-# https://github.com/bazelbuild/bazel/blob/master/tools/bash/runfiles/runfiles.bash
-# The runfiles library defines rlocation, which is a platform independent function
-# used to lookup the runfiles locations. This code snippet is needed at the top
-# of scripts that use rlocation to lookup the location of runfiles.bash and source it
-if [[ ! -d "${RUNFILES_DIR:-/dev/null}" && ! -f "${RUNFILES_MANIFEST_FILE:-/dev/null}" ]]; then
-    if [[ -f "$0.runfiles_manifest" ]]; then
-      export RUNFILES_MANIFEST_FILE="$0.runfiles_manifest"
-    elif [[ -f "$0.runfiles/MANIFEST" ]]; then
-      export RUNFILES_MANIFEST_FILE="$0.runfiles/MANIFEST"
-    elif [[ -f "$0.runfiles/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then
-      export RUNFILES_DIR="$0.runfiles"
-    fi
-fi
-if [[ -f "${RUNFILES_DIR:-/dev/null}/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then
-  source "${RUNFILES_DIR}/bazel_tools/tools/bash/runfiles/runfiles.bash"
-elif [[ -f "${RUNFILES_MANIFEST_FILE:-/dev/null}" ]]; then
-  source "$(grep -m1 "^bazel_tools/tools/bash/runfiles/runfiles.bash " \
-            "$RUNFILES_MANIFEST_FILE" | cut -d ' ' -f 2-)"
-else
-  echo >&2 "ERROR: cannot find @bazel_tools//tools/bash/runfiles:runfiles.bash"
-  exit 1
-fi
-# --- end runfiles.bash initialization ---
-
-readonly FOO_JS=$(cat $(rlocation "npm_bazel_typescript/examples/es6_output/es6_output.es6/examples/foo.js"))
-readonly BAR_JS=$(cat $(rlocation "npm_bazel_typescript/examples/es6_output/es6_output.es6/examples/bar.js"))
-readonly LIBRARY_JS=$(cat $(rlocation "npm_bazel_typescript/examples/es6_output/es6_output.es6/examples/some_library/library.js"))
-
-# should not down-level ES2015 syntax, eg. `class`
-if [[ "$FOO_JS" != *"class Greeter"* ]]; then
-  echo "Expected foo.js to contain 'class Greeter' but was"
-  echo "$FOO_JS"
-  exit 1
-fi
-
-# should not down-level ES Modules
-if [[ "$LIBRARY_JS" != *"export const cool = 1;"* ]]; then
-  echo "Expected library.js to contain 'export const cool = 1;' but was"
-  echo "$LIBRARY_JS"
-  exit 1
-fi
-
-# should not down-level dynamic import
-if [[ "$BAR_JS" != *"import('./foo')"* ]]; then
-  echo "Expected bar.js to contain 'import('./foo')' but was"
-  echo "$BAR_JS"
-  exit 1
-fi
diff --git a/examples/foo.ts b/examples/foo.ts
deleted file mode 100644
index b05c8ce..0000000
--- a/examples/foo.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * @license
- * Copyright 2017 The Bazel Authors. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- *
- * You may obtain a copy of the License at
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import {Polite} from './types';
-
-export class Greeter implements Polite {
-  constructor(public greeting: string) {}
-  greet(): Promise<string> {
-    return Promise.resolve('<h1>' + this.greeting + '</h1>');
-  }
-}
-
-export const greeter = new Greeter('Hello, world!');
-greeter.greet().then(msg => { document.body.innerHTML = msg; });
diff --git a/examples/generated_ts/BUILD.bazel b/examples/generated_ts/BUILD.bazel
deleted file mode 100644
index d786981..0000000
--- a/examples/generated_ts/BUILD.bazel
+++ /dev/null
@@ -1,14 +0,0 @@
-load("//internal:defaults.bzl", "ts_library")
-
-package(default_visibility = ["//visibility:public"])
-
-genrule(
-    name = "foo_ts",
-    outs = ["foo.ts"],
-    cmd = "echo 'export const a = 1;' > $@",
-)
-
-ts_library(
-    name = "generated_ts",
-    srcs = [":foo.ts"],
-)
diff --git a/examples/googmodule/BUILD.bazel b/examples/googmodule/BUILD.bazel
deleted file mode 100644
index efaa52e..0000000
--- a/examples/googmodule/BUILD.bazel
+++ /dev/null
@@ -1,23 +0,0 @@
-load("@build_bazel_rules_nodejs//:defs.bzl", "jasmine_node_test")
-load("//examples/devmode_consumer:devmode_consumer.bzl", "devmode_consumer")
-load("//internal:defaults.bzl", "ts_library")
-
-ts_library(
-    name = "googmodule",
-    srcs = ["a.ts"],
-    tsconfig = "tsconfig.json",
-)
-
-devmode_consumer(
-    name = "devmode_output",
-    deps = [":googmodule"],
-)
-
-jasmine_node_test(
-    name = "googmodule_output_test",
-    srcs = ["googmodule_output_test.js"],
-    data = [
-        ":devmode_output",
-        "@npm//jasmine",
-    ],
-)
diff --git a/examples/googmodule/a.ts b/examples/googmodule/a.ts
deleted file mode 100644
index 4f633f6..0000000
--- a/examples/googmodule/a.ts
+++ /dev/null
@@ -1 +0,0 @@
-const a: number = 1;
diff --git a/examples/googmodule/googmodule_output_test.js b/examples/googmodule/googmodule_output_test.js
deleted file mode 100644
index 82d9e20..0000000
--- a/examples/googmodule/googmodule_output_test.js
+++ /dev/null
@@ -1,20 +0,0 @@
-const fs = require('fs');
-
-describe('googmodule', () => {
-  let output;
-  beforeAll(() => {
-    output = require.resolve(
-        'npm_bazel_typescript/examples/googmodule/a.js');
-  });
-
-  it('should have goog module syntax in devmode', () => {
-    expect(fs.readFileSync(output, {encoding: 'utf-8'}))
-        .toContain(
-            `goog.module('npm_bazel_typescript.examples.googmodule.a')`);
-  });
-  it('should have tsickle type annotations', () => {
-    expect(fs.readFileSync(output, {
-      encoding: 'utf-8'
-    })).toContain(`@type {number}`);
-  });
-});
\ No newline at end of file
diff --git a/examples/googmodule/tsconfig.json b/examples/googmodule/tsconfig.json
deleted file mode 100644
index c3c478f..0000000
--- a/examples/googmodule/tsconfig.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
-    "compilerOptions": {
-        // Explicitly set types settings so typescript doesn't auto-discover types.
-        // If all types are discovered then all types need to be included as deps
-        // or typescript may error out with TS2688: Cannot find type definition file for 'foo'.
-        "types": []
-    },
-    "bazelOptions": {
-        "tsickle": true,
-        "googmodule": true
-    }
-}
\ No newline at end of file
diff --git a/examples/protocol_buffers/BUILD.bazel b/examples/protocol_buffers/BUILD.bazel
deleted file mode 100644
index 4594ffe..0000000
--- a/examples/protocol_buffers/BUILD.bazel
+++ /dev/null
@@ -1,139 +0,0 @@
-load("@build_bazel_rules_nodejs//:defs.bzl", "http_server", "rollup_bundle")
-load("@io_bazel_rules_go//go:def.bzl", "go_library")
-load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library")
-load("@npm_bazel_karma//:defaults.bzl", "ts_web_test_suite")
-load(
-    "//:defs.bzl",
-    "ts_devserver",
-    "ts_proto_library",
-)
-load("//internal:defaults.bzl", "ts_library")
-
-proto_library(
-    name = "tire_proto",
-    srcs = ["tire.proto"],
-)
-
-proto_library(
-    name = "car_proto",
-    srcs = ["car.proto"],
-    deps = [":tire_proto"],
-)
-
-ts_proto_library(
-    # The result will be "car.d.ts" named after this target.
-    # We could use the output_name attribute if we want the output named
-    # differently than the target.
-    name = "car",
-    deps = [":car_proto"],
-)
-
-ts_library(
-    name = "test_lib",
-    testonly = True,
-    srcs = ["car.spec.ts"],
-    tsconfig = "//examples:tsconfig-test",
-    deps = [
-        ":car",
-        "@npm//@types/jasmine",
-        "@npm//@types/long",
-        "@npm//@types/node",
-        "@npm//long",
-    ],
-)
-
-ts_web_test_suite(
-    name = "test",
-    bootstrap = ["@npm_bazel_typescript//:protobufjs_bootstrap_scripts"],
-    browsers = [
-        "@io_bazel_rules_webtesting//browsers:chromium-local",
-        "@io_bazel_rules_webtesting//browsers:firefox-local",
-    ],
-    deps = ["test_lib"],
-)
-
-ts_library(
-    name = "app",
-    srcs = ["app.ts"],
-    deps = [":car"],
-)
-
-ts_devserver(
-    name = "devserver",
-    bootstrap = ["@npm_bazel_typescript//:protobufjs_bootstrap_scripts"],
-    entry_module = "npm_bazel_typescript/examples/protocol_buffers/app",
-    port = 8080,
-    deps = [":bundle"],
-)
-
-# Test for production mode
-rollup_bundle(
-    name = "bundle",
-    entry_point = "examples/protocol_buffers/app",
-    # TODO(alexeagle): we should be able to get this from //:protobufjs_bootstrap_scripts
-    # and automatically plumb it through to Rollup.
-    globals = {
-        "long": "Long",
-        "protobufjs/minimal": "protobuf",
-    },
-    deps = [":app"],
-)
-
-# Needed because the prodserver only loads static files that appear under this
-# package.
-genrule(
-    name = "protobufjs",
-    srcs = [
-        "@build_bazel_rules_typescript_protobufs_compiletime_deps//node_modules/protobufjs:dist/minimal/protobuf.min.js",
-        "@build_bazel_rules_typescript_protobufs_compiletime_deps//node_modules/long:dist/long.js",
-    ],
-    outs = [
-        "protobuf.min.js",
-        "long.js",
-    ],
-    cmd = "outs=($(OUTS)); d=$$(dirname $${outs[0]}); for s in $(SRCS); do cp $$s $$d; done",
-)
-
-http_server(
-    name = "prodserver",
-    data = [
-        "index.html",
-        ":bundle",
-        ":protobufjs",
-    ],
-)
-
-ts_library(
-    name = "e2e",
-    testonly = 1,
-    srcs = ["app_e2e_test.ts"],
-    tsconfig = "//examples:tsconfig-test",
-    deps = [
-        "@npm//@types/jasmine",
-        "@npm//@types/node",
-        "@npm//protractor",
-    ],
-)
-
-proto_library(
-    name = "rules_typescript_proto",
-    srcs = [
-        "car.proto",
-        "tire.proto",
-    ],
-    visibility = ["//visibility:public"],
-)
-
-go_proto_library(
-    name = "rules_typescript_go_proto",
-    importpath = "github.com/bazelbuild/rules_typescript/examples/protocol_buffers",
-    proto = ":rules_typescript_proto",
-    visibility = ["//visibility:public"],
-)
-
-go_library(
-    name = "go_default_library",
-    embed = [":rules_typescript_go_proto"],
-    importpath = "github.com/bazelbuild/rules_typescript/examples/protocol_buffers",
-    visibility = ["//visibility:public"],
-)
diff --git a/examples/protocol_buffers/app.ts b/examples/protocol_buffers/app.ts
deleted file mode 100644
index 0cf23d9..0000000
--- a/examples/protocol_buffers/app.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-import {Car} from './car';
-
-const serverResponse = `{"make": "Porsche"}`;
-const car = Car.create(JSON.parse(serverResponse));
-const el: HTMLDivElement = document.createElement('div');
-el.innerText = `Car from server: ${car.make}`;
-el.className = 'ts1';
-document.body.appendChild(el);
diff --git a/examples/protocol_buffers/app_e2e_test.ts b/examples/protocol_buffers/app_e2e_test.ts
deleted file mode 100644
index 639392e..0000000
--- a/examples/protocol_buffers/app_e2e_test.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-import {browser, by, element, ExpectedConditions} from 'protractor';
-
-// This test uses Protractor without Angular, so disable Angular features
-browser.waitForAngularEnabled(false);
-
-// Since we don't have a protractor bazel rule yet, the test is brought up in
-// parallel with building the service under test. So the timeout must include
-// compiling the application as well as starting the server.
-const timeoutMs = 90 * 1000;
-
-describe('protocol_buffers', () => {
-  beforeAll(() => {
-    browser.get('');
-    // Don't run any specs until we see a <div> on the page.
-    browser.wait(
-        ExpectedConditions.presenceOf(element(by.css('div.ts1'))),
-        timeoutMs);
-  }, timeoutMs);
-
-  it('should display: Car from server: Porsche', (done) => {
-    const div = element(by.css('div.ts1'));
-    div.getText().then(t => expect(t).toEqual(`Car from server: Porsche`));
-    done();
-  });
-});
diff --git a/examples/protocol_buffers/car.proto b/examples/protocol_buffers/car.proto
deleted file mode 100644
index d8b04d1..0000000
--- a/examples/protocol_buffers/car.proto
+++ /dev/null
@@ -1,12 +0,0 @@
-syntax = "proto3";
-
-import "examples/protocol_buffers/tire.proto";
-
-message Car {
-  string make = 1;
-  string model = 2;
-  int32 year = 3;
-  Tire front_tires = 4;
-  Tire rear_tires = 5;
-  int64 mileage = 6;
-}
diff --git a/examples/protocol_buffers/car.spec.ts b/examples/protocol_buffers/car.spec.ts
deleted file mode 100644
index 803b9df..0000000
--- a/examples/protocol_buffers/car.spec.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-import {Car} from './car';
-import Long = require('long');
-
-describe('protocol buffers', () => {
-
-  it('allows creation of an object described by proto', () => {
-    const pontiac = Car.create({
-      make: "pontiac",
-      frontTires: {
-        width: 225,
-        aspectRatio: 65,
-        construction: 'R',
-        diameter: 17,
-      },
-    });
-    expect(pontiac.make).toEqual('pontiac');
-    if (!pontiac.frontTires) {
-      fail('Should have frontTires set');
-    } else {
-      expect(pontiac.frontTires.width).toEqual(225);
-    }
-  });
-
-  // Asserts that longs are handled correctly.
-  // This value comes from https://github.com/dcodeIO/long.js#background
-  it('handles long values correctly', () => {
-    const pontiac = Car.create({
-      make: "pontiac",
-      // Long.MAX_VALUE
-      mileage: new Long(0xFFFFFFFF, 0x7FFFFFFF),
-    });
-    const object = Car.toObject(pontiac, {longs: String});
-    expect(object["mileage"]).toEqual("9223372036854775807");
-  });
-});
diff --git a/examples/protocol_buffers/index.html b/examples/protocol_buffers/index.html
deleted file mode 100644
index 6f8690e..0000000
--- a/examples/protocol_buffers/index.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<html>
-<head>
-    <title>protocol_buffers example</title>
-</head>
-<body>
-<script src="/protobuf.min.js"></script>
-<script src="/long.js"></script>
-<script src="/bundle.min.js"></script>
-</body>
-</html>
\ No newline at end of file
diff --git a/examples/protocol_buffers/tire.proto b/examples/protocol_buffers/tire.proto
deleted file mode 100644
index a7de133..0000000
--- a/examples/protocol_buffers/tire.proto
+++ /dev/null
@@ -1,11 +0,0 @@
-syntax = "proto3";
-
-message Tire {
-  string type = 1;
-  int32 width = 2;
-  int32 aspect_ratio = 3;
-  string construction = 4;
-  int32 diameter = 5;
-  int32 load_index = 6;
-  string speed_rating = 7;
-}
diff --git a/examples/some_library/BUILD.bazel b/examples/some_library/BUILD.bazel
deleted file mode 100644
index 2668d2c..0000000
--- a/examples/some_library/BUILD.bazel
+++ /dev/null
@@ -1,26 +0,0 @@
-# Copyright 2017 The Bazel Authors. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-load("//internal:defaults.bzl", "ts_library")
-
-package(default_visibility = ["//visibility:public"])
-
-ts_library(
-    name = "lib",
-    srcs = ["library.ts"],
-    # Allow this library to be imported from `some-lib`
-    module_name = "some-lib",
-    # The imported path should be the library.d.ts file
-    module_root = "library",
-)
diff --git a/examples/some_library/library.ts b/examples/some_library/library.ts
deleted file mode 100644
index 1cc6cf3..0000000
--- a/examples/some_library/library.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-/**
- * @license
- * Copyright 2017 The Bazel Authors. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- *
- * You may obtain a copy of the License at
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-export const cool = 1;
diff --git a/examples/some_module/BUILD.bazel b/examples/some_module/BUILD.bazel
deleted file mode 100644
index ecd8224..0000000
--- a/examples/some_module/BUILD.bazel
+++ /dev/null
@@ -1,52 +0,0 @@
-# Copyright 2017 The Bazel Authors. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-load("@build_bazel_rules_nodejs//:defs.bzl", "nodejs_binary")
-load("//internal:defaults.bzl", "ts_library")
-
-package(default_visibility = ["//visibility:public"])
-
-# We compile this library with the module name "sm" to make it possible to
-# use `import {} from 'sm';` both at type-check time (we include the mapping in
-# the paths map in tsconfig) as well as runtime (we patch the nodejs module
-# loader to discover the path in the runfiles).
-ts_library(
-    name = "some_module",
-    srcs = ["index.ts"],
-    module_name = "sm",
-)
-
-ts_library(
-    name = "main",
-    srcs = ["main.ts"],
-    deps = [":some_module"],
-)
-
-nodejs_binary(
-    name = "bin",
-    data = [
-        ":main",
-        ":some_module",
-    ],
-    entry_point = "npm_bazel_typescript/examples/some_module/main.js",
-)
-
-sh_test(
-    name = "module_load_test",
-    srcs = ["module_load_test.sh"],
-    data = [
-        ":bin",
-        "@bazel_tools//tools/bash/runfiles",
-    ],
-)
diff --git a/examples/some_module/index.ts b/examples/some_module/index.ts
deleted file mode 100644
index 0f0c413..0000000
--- a/examples/some_module/index.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-export function hello() {
-  console.log("hello world");
-}
diff --git a/examples/some_module/main.ts b/examples/some_module/main.ts
deleted file mode 100644
index bb7d422..0000000
--- a/examples/some_module/main.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-import {hello} from 'sm';
-
-hello();
-
diff --git a/examples/some_module/module_load_test.sh b/examples/some_module/module_load_test.sh
deleted file mode 100755
index 752979a..0000000
--- a/examples/some_module/module_load_test.sh
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/bin/bash
-set -e
-
-# --- begin runfiles.bash initialization ---
-# Source the runfiles library:
-# https://github.com/bazelbuild/bazel/blob/master/tools/bash/runfiles/runfiles.bash
-# The runfiles library defines rlocation, which is a platform independent function
-# used to lookup the runfiles locations. This code snippet is needed at the top
-# of scripts that use rlocation to lookup the location of runfiles.bash and source it
-if [[ ! -d "${RUNFILES_DIR:-/dev/null}" && ! -f "${RUNFILES_MANIFEST_FILE:-/dev/null}" ]]; then
-    if [[ -f "$0.runfiles_manifest" ]]; then
-      export RUNFILES_MANIFEST_FILE="$0.runfiles_manifest"
-    elif [[ -f "$0.runfiles/MANIFEST" ]]; then
-      export RUNFILES_MANIFEST_FILE="$0.runfiles/MANIFEST"
-    elif [[ -f "$0.runfiles/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then
-      export RUNFILES_DIR="$0.runfiles"
-    fi
-fi
-if [[ -f "${RUNFILES_DIR:-/dev/null}/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then
-  source "${RUNFILES_DIR}/bazel_tools/tools/bash/runfiles/runfiles.bash"
-elif [[ -f "${RUNFILES_MANIFEST_FILE:-/dev/null}" ]]; then
-  source "$(grep -m1 "^bazel_tools/tools/bash/runfiles/runfiles.bash " \
-            "$RUNFILES_MANIFEST_FILE" | cut -d ' ' -f 2-)"
-else
-  echo >&2 "ERROR: cannot find @bazel_tools//tools/bash/runfiles:runfiles.bash"
-  exit 1
-fi
-# --- end runfiles.bash initialization ---
-
-readonly OUT=$($(rlocation "npm_bazel_typescript/examples/some_module/bin"))
-
-if [ "$OUT" != "hello world" ]; then
-  echo "Expected output 'hello world' but was $OUT"
-  exit 1
-fi
diff --git a/examples/testing/BUILD.bazel b/examples/testing/BUILD.bazel
deleted file mode 100644
index 133ee68..0000000
--- a/examples/testing/BUILD.bazel
+++ /dev/null
@@ -1,96 +0,0 @@
-load("@npm_bazel_karma//:defaults.bzl", "karma_web_test_suite", "ts_web_test_suite")
-load("//internal:defaults.bzl", "ts_library")
-
-ts_library(
-    name = "lib",
-    srcs = ["decrement.ts"],
-)
-
-ts_library(
-    name = "tests",
-    testonly = 1,
-    srcs = glob(["*.spec.ts"]),
-    tsconfig = "//examples:tsconfig-test",
-    deps = [
-        ":lib",
-        "@npm//@types/jasmine",
-        "@npm//@types/node",
-    ],
-)
-
-ts_library(
-    name = "tests_setup",
-    testonly = 1,
-    srcs = ["setup_script.ts"],
-    tsconfig = "//examples:tsconfig-test",
-    deps = [
-        "@npm//@types/jasmine",
-        "@npm//@types/node",
-    ],
-)
-
-karma_web_test_suite(
-    name = "testing_karma",
-    browsers = [
-        "@io_bazel_rules_webtesting//browsers:chromium-local",
-        "@io_bazel_rules_webtesting//browsers:firefox-local",
-    ],
-    config_file = ":karma.conf.js",
-    static_files = [
-        "static_script.js",
-    ],
-    runtime_deps = [
-        ":tests_setup",
-    ],
-    deps = [
-        ":tests",
-        "@npm//karma-json-result-reporter",
-    ],
-)
-
-karma_web_test_suite(
-    name = "testing_karma_sauce",
-    browsers = [
-        "@io_bazel_rules_webtesting//browsers/sauce:chrome-win10",
-    ],
-    tags = [
-        "sauce",
-        # TODO(alexeagle): enable on CI once we have set the SAUCE env variables
-        "manual",
-    ],
-    deps = [
-        ":tests",
-    ],
-)
-
-ts_web_test_suite(
-    name = "testing",
-    browsers = [
-        "@io_bazel_rules_webtesting//browsers:chromium-local",
-        "@io_bazel_rules_webtesting//browsers:firefox-local",
-    ],
-    static_files = [
-        "static_script.js",
-    ],
-    runtime_deps = [
-        ":tests_setup",
-    ],
-    deps = [
-        ":tests",
-    ],
-)
-
-ts_web_test_suite(
-    name = "testing_sauce",
-    browsers = [
-        "@io_bazel_rules_webtesting//browsers/sauce:chrome-win10",
-    ],
-    tags = [
-        "sauce",
-        # TODO(alexeagle): enable on CI once we have set the SAUCE env variables
-        "manual",
-    ],
-    deps = [
-        ":tests",
-    ],
-)
diff --git a/examples/testing/decrement.spec.ts b/examples/testing/decrement.spec.ts
deleted file mode 100644
index bf1bd91..0000000
--- a/examples/testing/decrement.spec.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import {decrement} from './decrement';
-
-describe('decrementing', () => {
-  it('should do that', () => {
-    expect(decrement(1)).toBe(0);
-  });
-});
diff --git a/examples/testing/decrement.ts b/examples/testing/decrement.ts
deleted file mode 100644
index 7173ecc..0000000
--- a/examples/testing/decrement.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-export function decrement(n: number) {
-  return n - 1;
-}
diff --git a/examples/testing/karma.conf.js b/examples/testing/karma.conf.js
deleted file mode 100644
index f96e698..0000000
--- a/examples/testing/karma.conf.js
+++ /dev/null
@@ -1,12 +0,0 @@
-module.exports = function(config) {
-  config.set({
-    plugins: ['karma-json-result-reporter'],
-    reporters: ['dots', 'progress', 'json-result'],
-    logLevel: config.LOG_DEBUG,
-    colors: false,
-    jsonResultReporter: {
-      outputFile: `${process.env['TEST_UNDECLARED_OUTPUTS_DIR']}/karma-result.json`,
-      isSynchronous: true,
-    },
-  });
-}
diff --git a/examples/testing/setup_script.spec.ts b/examples/testing/setup_script.spec.ts
deleted file mode 100644
index 1b39eff..0000000
--- a/examples/testing/setup_script.spec.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-describe('setup script', () => {
-  it('should load before the spec', async () => {
-    expect((window as any).setupGlobal).toBe("setupGlobalValue");
-  });
-});
-
-// at least one import or export is needed for this file to
-// be compiled into an named-UMD module by typescript
-export {};
diff --git a/examples/testing/setup_script.ts b/examples/testing/setup_script.ts
deleted file mode 100644
index 7bca6f8..0000000
--- a/examples/testing/setup_script.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-// Setup global value that the test expect to be present.
-(window as any).setupGlobal = "setupGlobalValue";
-
-// at least one import or export is needed for this file to
-// be compiled into an named-UMD module by typescript
-export { };
diff --git a/examples/testing/static_script.js b/examples/testing/static_script.js
deleted file mode 100644
index 06fd64e..0000000
--- a/examples/testing/static_script.js
+++ /dev/null
@@ -1,2 +0,0 @@
-// Some test data that is loaded dynamically from the test
-window.someGlobal = "someGlobalValue";
diff --git a/examples/testing/static_script.spec.ts b/examples/testing/static_script.spec.ts
deleted file mode 100644
index 6651308..0000000
--- a/examples/testing/static_script.spec.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-const someGlobal = new Promise<string>((resolve, reject) => {
-  const script = document.createElement('script');
-  script.src = `base/npm_bazel_typescript/examples/testing/static_script.js`;
-  script.onerror = reject;
-  script.onload = () => {
-    document.body.removeChild(script);
-    resolve((window as any).someGlobal);
-  };
-  document.body.appendChild(script);
-});
-
-describe('static script', () => {
-  it('should load', async () => {
-    expect(await someGlobal).toBe("someGlobalValue");
-  });
-});
-
-// at least one import or export is needed for this file to
-// be compiled into an named-UMD module by typescript
-export {};
diff --git a/examples/testing/tsconfig.json b/examples/testing/tsconfig.json
deleted file mode 100644
index c4faf5a..0000000
--- a/examples/testing/tsconfig.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-  "compilerOptions": {
-    "strict": true,
-    "lib": ["es2015.promise", "dom", "es5"],
-  }
-}
-
diff --git a/examples/tsconfig-bar.json b/examples/tsconfig-bar.json
deleted file mode 100644
index 0307f47..0000000
--- a/examples/tsconfig-bar.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
-  "compilerOptions": {
-    "strict": true,
-    "lib": ["es2015.promise", "dom", "es5"],
-    // Auto-discover all types in this configuration since we don't
-    // specify `types = []` and the ts_library rule depends on `@npm//@types`.
-    // Typescript will automatically discover all types under node_modules/@types
-    // and included them in the build. See getAutomaticTypeDirectiveNames in
-    // https://github.com/Microsoft/TypeScript/blob/master/src/compiler/moduleNameResolver.ts.
-  }
-}
diff --git a/examples/tsconfig-test.json b/examples/tsconfig-test.json
deleted file mode 100644
index 634f399..0000000
--- a/examples/tsconfig-test.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-  "extends": "./tsconfig.json",
-
-  "compilerOptions": {
-    "types": ["jasmine", "node"]
-  }
-}
diff --git a/examples/tsconfig.json b/examples/tsconfig.json
deleted file mode 100644
index 39b27cb..0000000
--- a/examples/tsconfig.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
-  "compilerOptions": {
-    "strict": true,
-    "lib": ["es2015.promise", "dom", "es5"],
-    // Include the output directory in rootDirs so that generated .d.ts files
-    // can be used for type-checking in the editor, for example the car.proto
-    // produces a car.d.ts.
-    "rootDirs": [".", "../bazel-bin/examples"],
-    // Explicitly set types settings so typescript doesn't auto-discover types.
-    // If all types are discovered then all types need to be included as deps
-    // or typescript may error out with TS2688: Cannot find type definition file for 'foo'.
-    "types": []
- }
-}
-
diff --git a/examples/tsconfig_extends/BUILD.bazel b/examples/tsconfig_extends/BUILD.bazel
deleted file mode 100644
index 5125897..0000000
--- a/examples/tsconfig_extends/BUILD.bazel
+++ /dev/null
@@ -1,36 +0,0 @@
-# Copyright 2017 The Bazel Authors. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-load("//:defs.bzl", "ts_config")
-load("//internal:defaults.bzl", "ts_library")
-
-package(default_visibility = ["//visibility:public"])
-
-# Because our tsconfig.json has an extends property, we must also tell the
-# ts_library to include the extended tsconfig file in compilations.
-# The ts_library rule will generate its own tsconfig which extends from the
-# src file.
-ts_config(
-    name = "tsconfig",
-    src = "tsconfig.json",
-    deps = ["tsconfig-base.json"],
-)
-
-ts_library(
-    name = "tsconfig_extends",
-    srcs = [
-        "uses_promise.ts",
-    ],
-    tsconfig = ":tsconfig",
-)
diff --git a/examples/tsconfig_extends/tsconfig-base.json b/examples/tsconfig_extends/tsconfig-base.json
deleted file mode 100644
index 9aa1316..0000000
--- a/examples/tsconfig_extends/tsconfig-base.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
-  "compilerOptions": {
-    "lib": ["es2015.promise", "es5"],
-    // Explicitly set types settings so typescript doesn't auto-discover types.
-    // If all types are discovered then all types need to be included as deps
-    // or typescript may error out with TS2688: Cannot find type definition file for 'foo'.
-    "types": []
-  }
-}
\ No newline at end of file
diff --git a/examples/tsconfig_extends/tsconfig.json b/examples/tsconfig_extends/tsconfig.json
deleted file mode 100644
index 712de29..0000000
--- a/examples/tsconfig_extends/tsconfig.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
-  "extends": "./tsconfig-base"
-}
-
diff --git a/examples/tsconfig_extends/uses_promise.ts b/examples/tsconfig_extends/uses_promise.ts
deleted file mode 100644
index 4d2e73b..0000000
--- a/examples/tsconfig_extends/uses_promise.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-export function hiLater(): Promise<string> {
-  return Promise.resolve('hi');
-}
diff --git a/examples/types.d.ts b/examples/types.d.ts
deleted file mode 100644
index d23a060..0000000
--- a/examples/types.d.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-export interface Polite {
-  greet(): Promise<string>;
-}
diff --git a/internal/BUILD.bazel b/internal/BUILD.bazel
index 375a5ce..d953a01 100644
--- a/internal/BUILD.bazel
+++ b/internal/BUILD.bazel
@@ -16,7 +16,7 @@
 
 load("@build_bazel_rules_nodejs//:defs.bzl", "jasmine_node_test", "nodejs_binary")
 load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
-load("//internal:defaults.bzl", "ts_library")
+load("@npm_bazel_typescript//:defs.bzl", "ts_library")
 
 package(default_visibility = ["//visibility:public"])
 
@@ -87,7 +87,7 @@
         "@npm//tsutils",
         "@npm//typescript",
     ],
-    entry_point = "npm_bazel_typescript/internal/tsc_wrapped/tsc_wrapped.js",
+    entry_point = "build_bazel_rules_typescript/internal/tsc_wrapped/tsc_wrapped.js",
     visibility = ["//visibility:public"],
 )
 
@@ -95,6 +95,7 @@
     name = "test_lib",
     srcs = glob(["tsc_wrapped/*_test.ts"]) + ["tsc_wrapped/test_support.ts"],
     tsconfig = "//internal:tsc_wrapped/tsconfig.json",
+    compiler = "@build_bazel_rules_typescript//internal:tsc_wrapped_bin",
     deps = [
         ":tsc_wrapped",
         "@npm//@types/jasmine",
diff --git a/internal/build_defs.bzl b/internal/build_defs.bzl
deleted file mode 100644
index 1639546..0000000
--- a/internal/build_defs.bzl
+++ /dev/null
@@ -1,407 +0,0 @@
-# Copyright 2017 The Bazel Authors. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"TypeScript compilation"
-
-load("@build_bazel_rules_nodejs//internal/common:node_module_info.bzl", "NodeModuleInfo", "collect_node_modules_aspect")
-
-# pylint: disable=unused-argument
-# pylint: disable=missing-docstring
-load(":common/compilation.bzl", "COMMON_ATTRIBUTES", "DEPS_ASPECTS", "compile_ts", "ts_providers_dict_to_struct")
-load(":common/tsconfig.bzl", "create_tsconfig")
-load(":ts_config.bzl", "TsConfigInfo")
-
-_DEFAULT_COMPILER = "@npm//@bazel/typescript/bin:tsc_wrapped"
-
-def _trim_package_node_modules(package_name):
-    # trim a package name down to its path prior to a node_modules
-    # segment. 'foo/node_modules/bar' would become 'foo' and
-    # 'node_modules/bar' would become ''
-    segments = []
-    for n in package_name.split("/"):
-        if n == "node_modules":
-            break
-        segments += [n]
-    return "/".join(segments)
-
-def _compute_node_modules_root(ctx):
-    """Computes the node_modules root from the node_modules and deps attributes.
-
-    Args:
-      ctx: the skylark execution context
-
-    Returns:
-      The node_modules root as a string
-    """
-    node_modules_root = None
-    if ctx.files.node_modules:
-        # ctx.files.node_modules is not an empty list
-        node_modules_root = "/".join([f for f in [
-            ctx.attr.node_modules.label.workspace_root,
-            _trim_package_node_modules(ctx.attr.node_modules.label.package),
-            "node_modules",
-        ] if f])
-    for d in ctx.attr.deps:
-        if NodeModuleInfo in d:
-            possible_root = "/".join(["external", d[NodeModuleInfo].workspace, "node_modules"])
-            if not node_modules_root:
-                node_modules_root = possible_root
-            elif node_modules_root != possible_root:
-                fail("All npm dependencies need to come from a single workspace. Found '%s' and '%s'." % (node_modules_root, possible_root))
-    if not node_modules_root:
-        # there are no fine grained deps and the node_modules attribute is an empty filegroup
-        # but we still need a node_modules_root even if its empty
-        node_modules_root = "/".join([f for f in [
-            ctx.attr.node_modules.label.workspace_root,
-            ctx.attr.node_modules.label.package,
-            "node_modules",
-        ] if f])
-    return node_modules_root
-
-def _filter_ts_inputs(all_inputs):
-    return [
-        f
-        for f in all_inputs
-        if f.path.endswith(".js") or f.path.endswith(".ts") or f.path.endswith(".json")
-    ]
-
-def _compile_action(ctx, inputs, outputs, tsconfig_file, node_opts, description = "prodmode"):
-    externs_files = []
-    action_inputs = []
-    action_outputs = []
-    for output in outputs:
-        if output.basename.endswith(".externs.js"):
-            externs_files.append(output)
-        elif output.basename.endswith(".es5.MF"):
-            ctx.actions.write(output, content = "")
-        else:
-            action_outputs.append(output)
-
-    # TODO(plf): For now we mock creation of files other than {name}.js.
-    for externs_file in externs_files:
-        ctx.actions.write(output = externs_file, content = "")
-
-    # A ts_library that has only .d.ts inputs will have no outputs,
-    # therefore there are no actions to execute
-    if not action_outputs:
-        return None
-
-    action_inputs.extend(_filter_ts_inputs(ctx.files.node_modules))
-
-    # Also include files from npm fine grained deps as action_inputs.
-    # These deps are identified by the NodeModuleInfo provider.
-    for d in ctx.attr.deps:
-        if NodeModuleInfo in d:
-            action_inputs.extend(_filter_ts_inputs(d.files.to_list()))
-
-    if ctx.file.tsconfig:
-        action_inputs.append(ctx.file.tsconfig)
-        if TsConfigInfo in ctx.attr.tsconfig:
-            action_inputs.extend(ctx.attr.tsconfig[TsConfigInfo].deps)
-
-    # Pass actual options for the node binary in the special "--node_options" argument.
-    arguments = ["--node_options=%s" % opt for opt in node_opts]
-
-    # One at-sign makes this a params-file, enabling the worker strategy.
-    # Two at-signs escapes the argument so it's passed through to tsc_wrapped
-    # rather than the contents getting expanded.
-    if ctx.attr.supports_workers:
-        arguments.append("@@" + tsconfig_file.path)
-        mnemonic = "TypeScriptCompile"
-    else:
-        arguments.append("-p")
-        arguments.append(tsconfig_file.path)
-        mnemonic = "tsc"
-
-    ctx.actions.run(
-        progress_message = "Compiling TypeScript (%s) %s" % (description, ctx.label),
-        mnemonic = mnemonic,
-        inputs = depset(action_inputs, transitive = [inputs]),
-        outputs = action_outputs,
-        # Use the built-in shell environment
-        # Allow for users who set a custom shell that can locate standard binaries like tr and uname
-        # See https://github.com/NixOS/nixpkgs/issues/43955#issuecomment-407546331
-        use_default_shell_env = True,
-        arguments = arguments,
-        executable = ctx.executable.compiler,
-        execution_requirements = {
-            "supports-workers": str(int(ctx.attr.supports_workers)),
-        },
-    )
-
-    # Enable the replay_params in case an aspect needs to re-build this library.
-    return struct(
-        label = ctx.label,
-        tsconfig = tsconfig_file,
-        inputs = depset(action_inputs, transitive = [inputs]),
-        outputs = action_outputs,
-        compiler = ctx.executable.compiler,
-    )
-
-def _devmode_compile_action(ctx, inputs, outputs, tsconfig_file, node_opts):
-    _compile_action(
-        ctx,
-        inputs,
-        outputs,
-        tsconfig_file,
-        node_opts,
-        description = "devmode",
-    )
-
-def tsc_wrapped_tsconfig(
-        ctx,
-        files,
-        srcs,
-        devmode_manifest = None,
-        jsx_factory = None,
-        **kwargs):
-    """Produce a tsconfig.json that sets options required under Bazel.
-    """
-
-    # The location of tsconfig.json is interpreted as the root of the project
-    # when it is passed to the TS compiler with the `-p` option:
-    #   https://www.typescriptlang.org/docs/handbook/tsconfig-json.html.
-    # Our tsconfig.json is in bazel-foo/bazel-out/local-fastbuild/bin/{package_path}
-    # because it's generated in the execution phase. However, our source files are in
-    # bazel-foo/ and therefore we need to strip some parent directories for each
-    # f.path.
-
-    node_modules_root = _compute_node_modules_root(ctx)
-    config = create_tsconfig(
-        ctx,
-        files,
-        srcs,
-        devmode_manifest = devmode_manifest,
-        node_modules_root = node_modules_root,
-        **kwargs
-    )
-    config["bazelOptions"]["nodeModulesPrefix"] = node_modules_root
-
-    # Override the target so we use es2015 for devmode
-    # Since g3 isn't ready to do this yet
-    config["compilerOptions"]["target"] = "es2015"
-
-    # If the user gives a tsconfig attribute, the generated file should extend
-    # from the user's tsconfig.
-    # See https://github.com/Microsoft/TypeScript/issues/9876
-    # We subtract the ".json" from the end before handing to TypeScript because
-    # this gives extra error-checking.
-    if ctx.file.tsconfig:
-        workspace_path = config["compilerOptions"]["rootDir"]
-        config["extends"] = "/".join([workspace_path, ctx.file.tsconfig.path[:-len(".json")]])
-
-    if jsx_factory:
-        config["compilerOptions"]["jsxFactory"] = jsx_factory
-
-    tsetse_disabled_rules = []
-
-    # Matches section in javascript/typescript/tsconfig.bzl
-    # TODO(alexeagle): make them share code
-    if ctx.label.workspace_root.startswith("external/"):
-        # Violated by rxjs
-        tsetse_disabled_rules += ["ban-promise-as-condition"]
-
-        # For local testing
-        tsetse_disabled_rules += ["check-return-value"]
-
-    config["compilerOptions"]["plugins"] = [{
-        "name": "@bazel/tsetse",
-        "disabledRules": tsetse_disabled_rules,
-    }]
-
-    return config
-
-# ************ #
-# ts_library   #
-# ************ #
-
-def _ts_library_impl(ctx):
-    """Implementation of ts_library.
-
-    Args:
-      ctx: the context.
-
-    Returns:
-      the struct returned by the call to compile_ts.
-    """
-    ts_providers = compile_ts(
-        ctx,
-        is_library = True,
-        # Filter out the node_modules from deps passed to TypeScript compiler
-        # since they don't have the required providers.
-        # They were added to the action inputs for tsc_wrapped already.
-        # strict_deps checking currently skips node_modules.
-        # TODO(alexeagle): turn on strict deps checking when we have a real
-        # provider for JS/DTS inputs to ts_library.
-        deps = [d for d in ctx.attr.deps if not NodeModuleInfo in d],
-        compile_action = _compile_action,
-        devmode_compile_action = _devmode_compile_action,
-        tsc_wrapped_tsconfig = tsc_wrapped_tsconfig,
-    )
-    return ts_providers_dict_to_struct(ts_providers)
-
-local_deps_aspects = [collect_node_modules_aspect]
-
-# Workaround skydoc bug which assumes DEPS_ASPECTS is a str type
-[local_deps_aspects.append(a) for a in DEPS_ASPECTS]
-
-ts_library = rule(
-    _ts_library_impl,
-    attrs = dict(COMMON_ATTRIBUTES, **{
-        "srcs": attr.label_list(
-            doc = "The TypeScript source files to compile.",
-            allow_files = [".ts", ".tsx"],
-            mandatory = True,
-        ),
-        "compile_angular_templates": attr.bool(
-            doc = """Run the Angular ngtsc compiler under ts_library""",
-        ),
-        "compiler": attr.label(
-            doc = """Sets a different TypeScript compiler binary to use for this library.
-            For example, we use the vanilla TypeScript tsc.js for bootstrapping,
-            and Angular compilations can replace this with `ngc`.
-
-            The default ts_library compiler depends on the `@npm//@bazel/typescript`
-            target which is setup for projects that use bazel managed npm deps that
-            fetch the @bazel/typescript npm package. It is recommended that you use
-            the workspace name `@npm` for bazel managed deps so the default
-            compiler works out of the box. Otherwise, you'll have to override
-            the compiler attribute manually.
-            """,
-            default = Label(_DEFAULT_COMPILER),
-            allow_files = True,
-            executable = True,
-            cfg = "host",
-        ),
-        "internal_testing_type_check_dependencies": attr.bool(default = False, doc = "Testing only, whether to type check inputs that aren't srcs."),
-        "node_modules": attr.label(
-            doc = """The npm packages which should be available during the compile.
-
-            The default value is `@npm//typescript:typescript__typings` is setup
-            for projects that use bazel managed npm deps that. It is recommended
-            that you use the workspace name `@npm` for bazel managed deps so the
-            default node_modules works out of the box. Otherwise, you'll have to
-            override the node_modules attribute manually. This default is in place
-            since ts_library will always depend on at least the typescript
-            default libs which are provided by `@npm//typescript:typescript__typings`.
-
-            This attribute is DEPRECATED. As of version 0.18.0 the recommended
-            approach to npm dependencies is to use fine grained npm dependencies
-            which are setup with the `yarn_install` or `npm_install` rules.
-
-            For example, in targets that used a `//:node_modules` filegroup,
-
-            ```
-            ts_library(
-              name = "my_lib",
-              ...
-              node_modules = "//:node_modules",
-            )
-            ```
-
-            which specifies all files within the `//:node_modules` filegroup
-            to be inputs to the `my_lib`. Using fine grained npm dependencies,
-            `my_lib` is defined with only the npm dependencies that are
-            needed:
-
-            ```
-            ts_library(
-              name = "my_lib",
-              ...
-              deps = [
-                  "@npm//@types/foo",
-                  "@npm//@types/bar",
-                  "@npm//foo",
-                  "@npm//bar",
-                  ...
-              ],
-            )
-            ```
-
-            In this case, only the listed npm packages and their
-            transitive deps are includes as inputs to the `my_lib` target
-            which reduces the time required to setup the runfiles for this
-            target (see https://github.com/bazelbuild/bazel/issues/5153).
-            The default typescript libs are also available via the node_modules
-            default in this case.
-
-            The @npm external repository and the fine grained npm package
-            targets are setup using the `yarn_install` or `npm_install` rule
-            in your WORKSPACE file:
-
-            yarn_install(
-              name = "npm",
-              package_json = "//:package.json",
-              yarn_lock = "//:yarn.lock",
-            )
-            """,
-            default = Label("@npm//typescript:typescript__typings"),
-        ),
-        "supports_workers": attr.bool(
-            doc = """Intended for internal use only.
-            Allows you to disable the Bazel Worker strategy for this library.
-            Typically used together with the "compiler" setting when using a
-            non-worker aware compiler binary.""",
-            default = True,
-        ),
-
-        # TODO(alexeagle): reconcile with google3: ts_library rules should
-        # be portable across internal/external, so we need this attribute
-        # internally as well.
-        "tsconfig": attr.label(
-            doc = """A tsconfig.json file containing settings for TypeScript compilation.
-            Note that some properties in the tsconfig are governed by Bazel and will be
-            overridden, such as `target` and `module`.
-
-            The default value is set to `//:tsconfig.json` by a macro. This means you must
-            either:
-
-            - Have your `tsconfig.json` file in the workspace root directory
-            - Use an alias in the root BUILD.bazel file to point to the location of tsconfig:
-              `alias(name="tsconfig.json", actual="//path/to:tsconfig-something.json")`
-            - Give an explicit `tsconfig` attribute to all `ts_library` targets
-            """,
-            allow_single_file = True,
-        ),
-        "tsickle_typed": attr.bool(default = True),
-        "deps": attr.label_list(aspects = local_deps_aspects),
-    }),
-    outputs = {
-        "tsconfig": "%{name}_tsconfig.json",
-    },
-)
-"""
-`ts_library` type-checks and compiles a set of TypeScript sources to JavaScript.
-
-It produces declarations files (`.d.ts`) which are used for compiling downstream
-TypeScript targets and JavaScript for the browser and Closure compiler.
-"""
-
-def ts_library_macro(tsconfig = None, **kwargs):
-    """Wraps `ts_library` to set the default for the `tsconfig` attribute.
-
-    This must be a macro so that the string is converted to a label in the context of the
-    workspace that declares the `ts_library` target, rather than the workspace that defines
-    `ts_library`, or the workspace where the build is taking place.
-
-    This macro is re-exported as `ts_library` in the public API.
-
-    Args:
-      tsconfig: the label pointing to a tsconfig.json file
-      **kwargs: remaining args to pass to the ts_library rule
-    """
-    if not tsconfig:
-        tsconfig = "//:tsconfig.json"
-
-    ts_library(tsconfig = tsconfig, **kwargs)
diff --git a/internal/defaults.bzl b/internal/defaults.bzl
deleted file mode 100644
index 9ef73e2..0000000
--- a/internal/defaults.bzl
+++ /dev/null
@@ -1,28 +0,0 @@
-# Copyright 2017 The Bazel Authors. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"Defaults for rules_typescript repository not meant to be used downstream"
-
-load(
-    "@npm_bazel_typescript//:defs.bzl",
-    _ts_library = "ts_library",
-)
-
-# We can't use the defaults for ts_library compiler and ts_web_test_suite karma
-# internally because the defaults are .js dependencies on the npm packages that are
-# published and internally we are building the things themselves to publish to npm
-INTERNAL_TS_LIBRARY_COMPILER = "@npm_bazel_typescript//internal:tsc_wrapped_bin"
-
-def ts_library(compiler = INTERNAL_TS_LIBRARY_COMPILER, **kwargs):
-    _ts_library(compiler = compiler, **kwargs)
diff --git a/internal/devserver/BUILD b/internal/devserver/BUILD
deleted file mode 100644
index 25b03e1..0000000
--- a/internal/devserver/BUILD
+++ /dev/null
@@ -1,42 +0,0 @@
-# Copyright 2017 The Bazel Authors. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-licenses(["notice"])  # Apache 2.0
-
-package(default_visibility = [
-    "//third_party/bazel_rules/rules_typescript/internal:__subpackages__",
-])
-
-exports_files([
-    "launcher_template.sh",
-    # Exported to be consumed for generating skydoc.
-    "ts_devserver.bzl",
-])
-
-filegroup(
-    name = "source_tree",
-    srcs = glob(["**/*"]),
-)
-
-filegroup(
-    name = "npm_package_assets",
-    srcs = [
-        "BUILD",
-        "launcher_template.sh",
-        "package.json",
-        "ts_devserver.bzl",
-        "yarn.lock",
-    ],
-    visibility = ["//internal:__pkg__"],
-)
diff --git a/internal/devserver/README.md b/internal/devserver/README.md
deleted file mode 100644
index 7000c25..0000000
--- a/internal/devserver/README.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# TypeScript devserver
-
-This development server is very simple. It's meant to be a convenient step in
-the "getting started" workflow. Once you have any real requirements, you should
-develop against your real frontend server instead.
-
-This devserver includes the "concatjs" bundling strategy. If you use a different
-frontend server, you should port this library to whatever language you run in.
-
diff --git a/internal/devserver/launcher_template.sh b/internal/devserver/launcher_template.sh
deleted file mode 100644
index 13722a9..0000000
--- a/internal/devserver/launcher_template.sh
+++ /dev/null
@@ -1,59 +0,0 @@
-#!/bin/bash
-
-# Copyright 2018 The Bazel Authors. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-set -e
-
-# --- begin runfiles.bash initialization ---
-# Source the runfiles library:
-# https://github.com/bazelbuild/bazel/blob/master/tools/bash/runfiles/runfiles.bash
-# The runfiles library defines rlocation, which is a platform independent function
-# used to lookup the runfiles locations. This code snippet is needed at the top
-# of scripts that use rlocation to lookup the location of runfiles.bash and source it
-if [[ ! -d "${RUNFILES_DIR:-/dev/null}" && ! -f "${RUNFILES_MANIFEST_FILE:-/dev/null}" ]]; then
-    if [[ -f "$0.runfiles_manifest" ]]; then
-      export RUNFILES_MANIFEST_FILE="$0.runfiles_manifest"
-    elif [[ -f "$0.runfiles/MANIFEST" ]]; then
-      export RUNFILES_MANIFEST_FILE="$0.runfiles/MANIFEST"
-    elif [[ -f "$0.runfiles/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then
-      export RUNFILES_DIR="$0.runfiles"
-    fi
-fi
-if [[ -f "${RUNFILES_DIR:-/dev/null}/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then
-  source "${RUNFILES_DIR}/bazel_tools/tools/bash/runfiles/runfiles.bash"
-elif [[ -f "${RUNFILES_MANIFEST_FILE:-/dev/null}" ]]; then
-  source "$(grep -m1 "^bazel_tools/tools/bash/runfiles/runfiles.bash " \
-            "$RUNFILES_MANIFEST_FILE" | cut -d ' ' -f 2-)"
-else
-  echo >&2 "ERROR: cannot find @bazel_tools//tools/bash/runfiles:runfiles.bash"
-  exit 1
-fi
-# --- end runfiles.bash initialization ---
-
-
-readonly main=$(rlocation "TEMPLATED_main")
-readonly manifest=$(rlocation "TEMPLATED_manifest")
-readonly scripts_manifest=$(rlocation "TEMPLATED_scripts_manifest")
-
-# Workaround for https://github.com/bazelbuild/bazel/issues/6764
-# If this issue is incorporated into Bazel, the workaround here should be removed.
-MSYS2_ARG_CONV_EXCL="*" "${main}" \
-  -packages=TEMPLATED_packages \
-  -serving_path=TEMPLATED_serving_path \
-  -entry_module=TEMPLATED_entry_module \
-  -port=TEMPLATED_port \
-  -manifest="${manifest}" \
-  -scripts_manifest="${scripts_manifest}" \
-  "$@"
diff --git a/internal/devserver/package.json b/internal/devserver/package.json
deleted file mode 100644
index 5391d98..0000000
--- a/internal/devserver/package.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
-    "description": "runtime dependencies for devserver",
-    "devDependencies": {
-        "requirejs": "2.3.5"
-    }
-}
diff --git a/internal/devserver/ts_devserver.bzl b/internal/devserver/ts_devserver.bzl
deleted file mode 100644
index 399bd4e..0000000
--- a/internal/devserver/ts_devserver.bzl
+++ /dev/null
@@ -1,264 +0,0 @@
-# Copyright 2017 The Bazel Authors. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"Simple development server"
-
-load("@build_bazel_rules_nodejs//internal/common:sources_aspect.bzl", "sources_aspect")
-load(
-    "@build_bazel_rules_nodejs//internal/js_library:js_library.bzl",
-    "write_amd_names_shim",
-)
-load(
-    "@build_bazel_rules_nodejs//internal/web_package:web_package.bzl",
-    "html_asset_inject",
-)
-
-# Helper function to convert a short path to a path that is
-# found in the MANIFEST file.
-def _short_path_to_manifest_path(ctx, short_path):
-    if short_path.startswith("../"):
-        return short_path[3:]
-    else:
-        return ctx.workspace_name + "/" + short_path
-
-def _ts_devserver(ctx):
-    files = depset()
-    for d in ctx.attr.deps:
-        if hasattr(d, "node_sources"):
-            files = depset(transitive = [files, d.node_sources])
-        elif hasattr(d, "files"):
-            files = depset(transitive = [files, d.files])
-
-    if ctx.label.workspace_root:
-        # We need the workspace_name for the target being visited.
-        # Skylark doesn't have this - instead they have a workspace_root
-        # which looks like "external/repo_name" - so grab the second path segment.
-        # TODO(alexeagle): investigate a better way to get the workspace name
-        workspace_name = ctx.label.workspace_root.split("/")[1]
-    else:
-        workspace_name = ctx.workspace_name
-
-    # Create a manifest file with the sources in arbitrary order, and without
-    # bazel-bin prefixes ("root-relative paths").
-    # TODO(alexeagle): we should experiment with keeping the files toposorted, to
-    # see if we can get performance gains out of the module loader.
-    ctx.actions.write(ctx.outputs.manifest, "".join([
-        workspace_name + "/" + f.short_path + "\n"
-        for f in files.to_list()
-    ]))
-
-    amd_names_shim = ctx.actions.declare_file(
-        "_%s.amd_names_shim.js" % ctx.label.name,
-        sibling = ctx.outputs.script,
-    )
-    write_amd_names_shim(ctx.actions, amd_names_shim, ctx.attr.bootstrap)
-
-    # Requirejs is always needed so its included as the first script
-    # in script_files before any user specified scripts for the devserver
-    # to concat in order.
-    script_files = []
-    script_files.extend(ctx.files.bootstrap)
-    script_files.append(ctx.file._requirejs_script)
-    script_files.append(amd_names_shim)
-    script_files.extend(ctx.files.scripts)
-    ctx.actions.write(ctx.outputs.scripts_manifest, "".join([
-        workspace_name + "/" + f.short_path + "\n"
-        for f in script_files
-    ]))
-
-    devserver_runfiles = [
-        ctx.executable._devserver,
-        ctx.outputs.manifest,
-        ctx.outputs.scripts_manifest,
-    ]
-    devserver_runfiles += ctx.files.static_files
-    devserver_runfiles += script_files
-    devserver_runfiles += ctx.files._bash_runfile_helpers
-
-    if ctx.file.index_html:
-        injected_index = ctx.actions.declare_file("index.html")
-        bundle_script = ctx.attr.serving_path
-        if bundle_script.startswith("/"):
-            bundle_script = bundle_script[1:]
-        html_asset_inject(
-            ctx.file.index_html,
-            ctx.actions,
-            ctx.executable._injector,
-            ctx.attr.additional_root_paths + [
-                ctx.label.package,
-                "/".join([ctx.bin_dir.path, ctx.label.package]),
-                "/".join([ctx.genfiles_dir.path, ctx.label.package]),
-            ],
-            [_short_path_to_manifest_path(ctx, f.short_path) for f in ctx.files.static_files] + [bundle_script],
-            injected_index,
-        )
-        devserver_runfiles += [injected_index]
-
-    packages = depset(["/".join([workspace_name, ctx.label.package])] + ctx.attr.additional_root_paths)
-
-    ctx.actions.expand_template(
-        template = ctx.file._launcher_template,
-        output = ctx.outputs.script,
-        substitutions = {
-            "TEMPLATED_entry_module": ctx.attr.entry_module,
-            "TEMPLATED_main": _short_path_to_manifest_path(ctx, ctx.executable._devserver.short_path),
-            "TEMPLATED_manifest": _short_path_to_manifest_path(ctx, ctx.outputs.manifest.short_path),
-            "TEMPLATED_packages": ",".join(packages.to_list()),
-            "TEMPLATED_port": str(ctx.attr.port),
-            "TEMPLATED_scripts_manifest": _short_path_to_manifest_path(ctx, ctx.outputs.scripts_manifest.short_path),
-            "TEMPLATED_serving_path": ctx.attr.serving_path if ctx.attr.serving_path else "",
-            "TEMPLATED_workspace": workspace_name,
-        },
-        is_executable = True,
-    )
-
-    return [DefaultInfo(
-        runfiles = ctx.runfiles(
-            files = devserver_runfiles,
-            # We don't expect executable targets to depend on the devserver, but if they do,
-            # they can see the JavaScript code.
-            transitive_files = depset(ctx.files.data, transitive = [files]),
-            collect_data = True,
-            collect_default = True,
-        ),
-    )]
-
-ts_devserver = rule(
-    implementation = _ts_devserver,
-    attrs = {
-        "additional_root_paths": attr.string_list(
-            doc = """Additional root paths to serve static_files from.
-            Paths should include the workspace name such as [\"__main__/resources\"]
-            """,
-        ),
-        "bootstrap": attr.label_list(
-            doc = "Scripts to include in the JS bundle before the module loader (require.js)",
-            allow_files = [".js"],
-        ),
-        "data": attr.label_list(
-            doc = "Dependencies that can be require'd while the server is running",
-            allow_files = True,
-        ),
-        "entry_module": attr.string(
-            doc = """The entry_module should be the AMD module name of the entry module such as `"__main__/src/index"`
-            ts_devserver concats the following snippet after the bundle to load the application:
-            `require(["entry_module"]);`
-            """,
-        ),
-        "index_html": attr.label(
-            allow_single_file = True,
-            doc = """An index.html file, we'll inject the script tag for the bundle,
-            as well as script tags for .js static_files and link tags for .css
-            static_files""",
-        ),
-        "port": attr.int(
-            doc = """The port that the devserver will listen on.""",
-            default = 5432,
-        ),
-        "scripts": attr.label_list(
-            doc = "User scripts to include in the JS bundle before the application sources",
-            allow_files = [".js"],
-        ),
-        "serving_path": attr.string(
-            # This default repeats the one in the go program. We make it explicit here so we can read it
-            # when injecting scripts into the index file.
-            default = "/_/ts_scripts.js",
-            doc = """The path you can request from the client HTML which serves the JavaScript bundle.
-            If you don't specify one, the JavaScript can be loaded at /_/ts_scripts.js""",
-        ),
-        "static_files": attr.label_list(
-            doc = """Arbitrary files which to be served, such as index.html.
-            They are served relative to the package where this rule is declared.""",
-            allow_files = True,
-        ),
-        "deps": attr.label_list(
-            doc = "Targets that produce JavaScript, such as `ts_library`",
-            allow_files = True,
-            aspects = [sources_aspect],
-        ),
-        "_bash_runfile_helpers": attr.label(default = Label("@bazel_tools//tools/bash/runfiles")),
-        "_devserver": attr.label(
-            # For local development in rules_typescript, we build the devserver from sources.
-            # This requires that we have the go toolchain available.
-            # NB: this value is replaced by "//devserver:server" in the packaged distro
-            # //devserver:server is the pre-compiled binary.
-            # That means that our users don't need the go toolchain.
-            default = Label("//devserver:devserver_bin"),
-            executable = True,
-            cfg = "host",
-        ),
-        "_injector": attr.label(
-            default = "@build_bazel_rules_nodejs//internal/web_package:injector",
-            executable = True,
-            cfg = "host",
-        ),
-        "_launcher_template": attr.label(allow_single_file = True, default = Label("//internal/devserver:launcher_template.sh")),
-        "_requirejs_script": attr.label(allow_single_file = True, default = Label("@build_bazel_rules_typescript_devserver_deps//node_modules/requirejs:require.js")),
-    },
-    outputs = {
-        "manifest": "%{name}.MF",
-        "script": "%{name}.sh",
-        "scripts_manifest": "scripts_%{name}.MF",
-    },
-)
-"""ts_devserver is a simple development server intended for a quick "getting started" experience.
-
-Additional documentation at https://github.com/alexeagle/angular-bazel-example/wiki/Running-a-devserver-under-Bazel
-"""
-
-def ts_devserver_macro(name, data = [], args = [], visibility = None, tags = [], testonly = 0, **kwargs):
-    """Macro for creating a `ts_devserver`
-
-    This macro re-exposes a `sh_binary` and `ts_devserver` target that can run the
-    actual devserver implementation.
-    The `ts_devserver` rule is just responsible for generating a launcher script
-    that runs the Go devserver implementation. The `sh_binary` is the primary
-    target that matches the specified "name" and executes the generated bash
-    launcher script.
-    This is re-exported in `//:defs.bzl` as `ts_devserver` so if you load the rule
-    from there, you actually get this macro.
-    Args:
-      name: Name of the devserver target
-      data: Runtime dependencies for the devserver
-      args: Command line arguments that will be passed to the devserver Go implementation
-      visibility: Visibility of the devserver targets
-      tags: Standard Bazel tags, this macro adds a couple for ibazel
-      testonly: Whether the devserver should only run in `bazel test`
-      **kwargs: passed through to `ts_devserver`
-    """
-    ts_devserver(
-        name = "%s_launcher" % name,
-        data = data + ["@bazel_tools//tools/bash/runfiles"],
-        testonly = testonly,
-        visibility = ["//visibility:private"],
-        tags = tags,
-        **kwargs
-    )
-
-    native.sh_binary(
-        name = name,
-        args = args,
-        # Users don't need to know that these tags are required to run under ibazel
-        tags = tags + [
-            # Tell ibazel not to restart the devserver when its deps change.
-            "ibazel_notify_changes",
-            # Tell ibazel to serve the live reload script, since we expect a browser will connect to
-            # this program.
-            "ibazel_live_reload",
-        ],
-        srcs = ["%s_launcher.sh" % name],
-        data = [":%s_launcher" % name],
-        testonly = testonly,
-        visibility = visibility,
-    )
diff --git a/internal/devserver/yarn.lock b/internal/devserver/yarn.lock
deleted file mode 100644
index 95ae199..0000000
--- a/internal/devserver/yarn.lock
+++ /dev/null
@@ -1,7 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-requirejs@2.3.5:
-  version "2.3.5"
-  resolved "https://registry.yarnpkg.com/requirejs/-/requirejs-2.3.5.tgz#617b9acbbcb336540ef4914d790323a8d4b861b0"
diff --git a/internal/karma/.bazelrc b/internal/karma/.bazelrc
deleted file mode 100644
index ad69514..0000000
--- a/internal/karma/.bazelrc
+++ /dev/null
@@ -1 +0,0 @@
-build --workspace_status_command=../../tools/bazel_stamp_vars.sh
diff --git a/internal/karma/BUILD.bazel b/internal/karma/BUILD.bazel
deleted file mode 100644
index 54f69ed..0000000
--- a/internal/karma/BUILD.bazel
+++ /dev/null
@@ -1,106 +0,0 @@
-# Copyright 2018 The Bazel Authors. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# BEGIN-DEV-ONLY
-# Parts of this BUILD file only necessary when building within the bazelbuild/rules_typescript repo.
-# The generated `@bazel/karma` npm package contains a trimmed BUILD file using # DEV-ONLY fences.
-load("@build_bazel_rules_nodejs//:defs.bzl", "nodejs_binary", "npm_package")
-load("@npm_bazel_typescript//:version.bzl", "COMPAT_VERSION")
-load("@npm_bazel_typescript//internal:defaults.bzl", "ts_library")
-
-package(default_visibility = ["//visibility:public"])
-
-# Exports to be consumed for generating skydoc.
-exports_files([
-    "karma_web_test.bzl",
-    "ts_web_test.bzl",
-    "web_test.bzl",
-])
-
-ts_library(
-    name = "bazel_karma",
-    srcs = glob(["*.ts"]),
-    module_name = "@bazel/karma",
-    tsconfig = ":tsconfig.json",
-    deps = [
-        "@npm//@types/node",
-        "@npm//tmp",
-    ],
-)
-
-nodejs_binary(
-    name = "karma_bin",
-    data = [
-        ":bazel_karma",
-        "@npm//jasmine-core",
-        "@npm//karma",
-        "@npm//karma-chrome-launcher",
-        "@npm//karma-firefox-launcher",
-        "@npm//karma-jasmine",
-        "@npm//karma-requirejs",
-        "@npm//karma-sauce-launcher",
-        "@npm//karma-sourcemap-loader",
-        "@npm//requirejs",
-        "@npm//tmp",
-    ],
-    entry_point = "karma/bin/karma",
-    install_source_map_support = False,
-)
-
-genrule(
-    name = "license_copy",
-    srcs = ["@npm_bazel_typescript//:LICENSE"],
-    outs = ["LICENSE"],
-    cmd = "cp $< $@",
-)
-
-# Ugly genrule depending on local linux environment to build the README out of skylark doc generation.
-# Only referenced when we do a release.
-# TODO: This ought to be possible with stardoc alone. Need to coordinate with Chris Parsons.
-genrule(
-    name = "generate_README",
-    srcs = ["//docs", "//docs:install.md"],
-    outs = ["README.md"],
-    cmd = "unzip -o -d docs $(location //docs:docs) && cat docs/install.md docs/*_web_test.md | sed 's/^##/\\\n##/' > $@",
-)
-
-npm_package(
-    name = "npm_package",
-    srcs = [
-        "BUILD.bazel",
-        "WORKSPACE",
-        "browser_repositories.bzl",
-        "defaults.bzl",
-        "defs.bzl",
-        "karma.conf.js",
-        "karma.js",
-        "karma_web_test.bzl",
-        "package.bzl",
-        "package.json",
-        "ts_web_test.bzl",
-        "web_test.bzl",
-    ],
-    replacements = {
-        "(#|\/\/)\\s+BEGIN-DEV-ONLY[\\w\W]+?(#|\/\/)\\s+END-DEV-ONLY": "",
-        "0.0.0-COMPAT_VERSION": COMPAT_VERSION,
-    },
-    deps = [
-        ":bazel_karma",
-        ":license_copy",
-        ":generate_README"
-    ],
-)
-
-# END-DEV-ONLY
-exports_files(["karma.conf.js"])
diff --git a/internal/karma/WORKSPACE b/internal/karma/WORKSPACE
deleted file mode 100644
index f584c27..0000000
--- a/internal/karma/WORKSPACE
+++ /dev/null
@@ -1,69 +0,0 @@
-# Copyright 2017 The Bazel Authors. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-workspace(name = "npm_bazel_karma")
-
-# Load nested npm_bazel_typescript repository
-local_repository(
-    name = "npm_bazel_typescript",
-    path = "../..",
-)
-
-# Load our dependencies
-load("@npm_bazel_typescript//:package.bzl", "rules_typescript_dev_dependencies")
-
-rules_typescript_dev_dependencies()
-
-# Load rules_karma dependencies
-load("//:package.bzl", "rules_karma_dependencies")
-
-rules_karma_dependencies()
-
-# Setup nodejs toolchain
-load("@build_bazel_rules_nodejs//:defs.bzl", "node_repositories", "yarn_install")
-
-# Install a hermetic version of node.
-node_repositories()
-
-# Download npm dependencies
-yarn_install(
-    name = "npm",
-    package_json = "//:package.json",
-    yarn_lock = "//:yarn.lock",
-)
-
-# Setup typescript toolchain
-load("@npm_bazel_typescript//:defs.bzl", "ts_setup_workspace")
-
-ts_setup_workspace()
-
-# Dependencies for generating documentation
-load("@io_bazel_rules_sass//sass:sass_repositories.bzl", "sass_repositories")
-
-sass_repositories()
-
-load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
-
-http_archive(
-    name = "com_google_protobuf",
-    strip_prefix = "protobuf-3.6.1.3",
-    sha256 = "9510dd2afc29e7245e9e884336f848c8a6600a14ae726adb6befdb4f786f0be2",
-    # v3.6.1.3 as of 2019-01-15
-    urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.6.1.3.zip"],
-    type = "zip",
-)
-
-load("@io_bazel_skydoc//skylark:skylark.bzl", "skydoc_repositories")
-
-skydoc_repositories()
diff --git a/internal/karma/browser_repositories.bzl b/internal/karma/browser_repositories.bzl
deleted file mode 100644
index cc58e5c..0000000
--- a/internal/karma/browser_repositories.bzl
+++ /dev/null
@@ -1,111 +0,0 @@
-# Copyright 2018 The Bazel Authors. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Pinned browser versions tested against in https://github.com/bazelbuild/rules_typescript CI.
-"""
-
-load("@io_bazel_rules_webtesting//web/internal:platform_http_file.bzl", "platform_http_file")
-
-def browser_repositories():
-    """Load pinned rules_webtesting browser versions."""
-
-    platform_http_file(
-        name = "org_chromium_chromium",
-        amd64_sha256 =
-            "941de83d78b27d43db07f427136ba159d661bb111db8d9ffe12499b863a003e1",
-        amd64_urls = [
-            # Chromium 69.0.3497.0 (2018-07-19 snaphot 576668)
-            # https://commondatastorage.googleapis.com/chromium-browser-snapshots/index.html?prefix=Linux_x64/576668/
-            "https://commondatastorage.googleapis.com/chromium-browser-snapshots/Linux_x64/576668/chrome-linux.zip",
-        ],
-        licenses = ["notice"],  # BSD 3-clause (maybe more?)
-        macos_sha256 =
-            "bd01783e7d179e9f85d4b6f0c9df53118d13977cc7d365a1caa9d198c6afcfd8",
-        macos_urls = [
-            # Chromium 69.0.3497.0 (2018-07-19 snaphot 576668)
-            # https://commondatastorage.googleapis.com/chromium-browser-snapshots/index.html?prefix=Mac/576668/
-            # NOTE: There is an issue with ChromeHeadless on OSX chromium 70+
-            "https://commondatastorage.googleapis.com/chromium-browser-snapshots/Mac/576668/chrome-mac.zip",
-        ],
-        windows_sha256 =
-            "d1bb728118c12ea436d8ea07dba980789e7d860aa664dd1fad78bc20e8d9391c",
-        windows_urls = [
-            # Chromium 66.0.3359.0 (2018-03-01 snaphot 540270)
-            # https://commondatastorage.googleapis.com/chromium-browser-snapshots/index.html?prefix=Win_x64/612439/
-            # NOTE: There is an issue with chromium 68-71 with Windows: https://bugs.chromium.org/p/chromium/issues/detail?id=540270
-            #       and pinning to 72 is not possible as the archive name has changed to chrome-win.zip which breaks
-            #       as the executable path the hard-coded in rules_webtesting and includes the archive name.
-            "https://commondatastorage.googleapis.com/chromium-browser-snapshots/Win_x64/540270/chrome-win32.zip",
-        ],
-    )
-
-    platform_http_file(
-        name = "org_chromium_chromedriver",
-        amd64_sha256 =
-            "687d2e15c42908e2911344c08a949461b3f20a83017a7a682ef4d002e05b5d46",
-        amd64_urls = [
-            # ChromeDriver 2.44 supports Chrome v69-71
-            # http://chromedriver.chromium.org/downloads
-            "https://chromedriver.storage.googleapis.com/2.44/chromedriver_linux64.zip",
-        ],
-        licenses = ["reciprocal"],  # BSD 3-clause, ICU, MPL 1.1, libpng (BSD/MIT-like), Academic Free License v. 2.0, BSD 2-clause, MIT
-        macos_sha256 =
-            "3fd49c2782a5f93cb48ff2dee021004d9a7fb393798e4c4807b391cedcd30ed9",
-        macos_urls = [
-            # ChromeDriver 2.44 supports Chrome v69-71
-            # http://chromedriver.chromium.org/downloads
-            "https://chromedriver.storage.googleapis.com/2.44/chromedriver_mac64.zip",
-        ],
-        windows_sha256 =
-            "a8fa028acebef7b931ef9cb093f02865f9f7495e49351f556e919f7be77f072e",
-        windows_urls = [
-            # ChromeDriver 2.38 supports Chrome v65-67
-            # http://chromedriver.chromium.org/downloads
-            "https://chromedriver.storage.googleapis.com/2.38/chromedriver_win32.zip",
-        ],
-    )
-
-    platform_http_file(
-        name = "org_mozilla_firefox",
-        amd64_sha256 =
-            "3a729ddcb1e0f5d63933177a35177ac6172f12edbf9fbbbf45305f49333608de",
-        amd64_urls = [
-            "https://mirror.bazel.build/ftp.mozilla.org/pub/firefox/releases/61.0.2/linux-x86_64/en-US/firefox-61.0.2.tar.bz2",
-            "https://ftp.mozilla.org/pub/firefox/releases/61.0.2/linux-x86_64/en-US/firefox-61.0.2.tar.bz2",
-        ],
-        licenses = ["reciprocal"],  # MPL 2.0
-        macos_sha256 =
-            "bf23f659ae34832605dd0576affcca060d1077b7bf7395bc9874f62b84936dc5",
-        macos_urls = [
-            "https://mirror.bazel.build/ftp.mozilla.org/pub/firefox/releases/61.0.2/mac/en-US/Firefox%2061.0.2.dmg",
-            "https://ftp.mozilla.org/pub/firefox/releases/61.0.2/mac/en-US/Firefox%2061.0.2.dmg",
-        ],
-    )
-
-    platform_http_file(
-        name = "org_mozilla_geckodriver",
-        amd64_sha256 =
-            "c9ae92348cf00aa719be6337a608fae8304691a95668e8e338d92623ba9e0ec6",
-        amd64_urls = [
-            "https://mirror.bazel.build/github.com/mozilla/geckodriver/releases/download/v0.21.0/geckodriver-v0.21.0-linux64.tar.gz",
-            "https://github.com/mozilla/geckodriver/releases/download/v0.21.0/geckodriver-v0.21.0-linux64.tar.gz",
-        ],
-        licenses = ["reciprocal"],  # MPL 2.0
-        macos_sha256 =
-            "ce4a3e9d706db94e8760988de1ad562630412fa8cf898819572522be584f01ce",
-        macos_urls = [
-            "https://mirror.bazel.build/github.com/mozilla/geckodriver/releases/download/v0.21.0/geckodriver-v0.21.0-macos.tar.gz",
-            "https://github.com/mozilla/geckodriver/releases/download/v0.21.0/geckodriver-v0.21.0-macos.tar.gz",
-        ],
-    )
diff --git a/internal/karma/defaults.bzl b/internal/karma/defaults.bzl
deleted file mode 100644
index 954a991..0000000
--- a/internal/karma/defaults.bzl
+++ /dev/null
@@ -1,37 +0,0 @@
-# Copyright 2017 The Bazel Authors. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"Defaults for rules_karma repository not meant to be used downstream"
-
-load(
-    "@npm_bazel_karma//:defs.bzl",
-    _karma_web_test = "karma_web_test",
-    _karma_web_test_suite = "karma_web_test_suite",
-    _ts_web_test = "ts_web_test",
-    _ts_web_test_suite = "ts_web_test_suite",
-)
-
-INTERNAL_KARMA_BIN = "@npm_bazel_karma//:karma_bin"
-
-def karma_web_test(karma = INTERNAL_KARMA_BIN, **kwargs):
-    _karma_web_test(karma = karma, **kwargs)
-
-def karma_web_test_suite(karma = INTERNAL_KARMA_BIN, **kwargs):
-    _karma_web_test_suite(karma = karma, **kwargs)
-
-def ts_web_test(karma = INTERNAL_KARMA_BIN, **kwargs):
-    _ts_web_test(karma = karma, **kwargs)
-
-def ts_web_test_suite(karma = INTERNAL_KARMA_BIN, **kwargs):
-    _ts_web_test_suite(karma = karma, **kwargs)
diff --git a/internal/karma/defs.bzl b/internal/karma/defs.bzl
deleted file mode 100644
index b8053b9..0000000
--- a/internal/karma/defs.bzl
+++ /dev/null
@@ -1,33 +0,0 @@
-# Copyright 2017 The Bazel Authors. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-""" Public API surface is re-exported here.
-"""
-
-load(
-    ":karma_web_test.bzl",
-    _karma_web_test = "karma_web_test",
-    _karma_web_test_suite = "karma_web_test_suite",
-)
-load(
-    ":ts_web_test.bzl",
-    _ts_web_test = "ts_web_test",
-    _ts_web_test_suite = "ts_web_test_suite",
-)
-
-# TODO(alexeagle): make ts_web_test && ts_web_test_suite work in google3
-ts_web_test = _ts_web_test
-ts_web_test_suite = _ts_web_test_suite
-karma_web_test = _karma_web_test
-karma_web_test_suite = _karma_web_test_suite
diff --git a/internal/karma/docs/BUILD.bazel b/internal/karma/docs/BUILD.bazel
deleted file mode 100644
index ff0476c..0000000
--- a/internal/karma/docs/BUILD.bazel
+++ /dev/null
@@ -1,11 +0,0 @@
-load("@io_bazel_skydoc//skylark:skylark.bzl", "skylark_doc")
-exports_files(["install.md"])
-skylark_doc(
-    name = "docs",
-    srcs = [
-        "//:karma_web_test.bzl",
-        "//:ts_web_test.bzl",
-    ],
-    format = "markdown",
-    visibility = ["//:__subpackages__"],
-)
diff --git a/internal/karma/docs/index.md b/internal/karma/docs/index.md
deleted file mode 100644
index 697f82f..0000000
--- a/internal/karma/docs/index.md
+++ /dev/null
@@ -1,89 +0,0 @@
-
-# Overview
-
-
-<nav class="toc">
-  <h2>Rule sets</h2>
-  <ul>
-    <li><a href="#karma_web_test">Unit testing with Karma</a></li>
-    <li><a href="#ts_web_test">Unit testing in a browser</a></li>
-  </ul>
-</nav>
-
-<h2><a href="/karma_web_test.html" id="karma_web_test">Unit testing with Karma</a></h2>
-
-<h3>Macros</h3>
-<table class="overview-table">
-  <colgroup>
-    <col class="col-name" />
-    <col class="col-description" />
-  </colgroup>
-  <tbody>
-    <tr>
-      <td>
-        <a href="/karma_web_test.html#run_karma_web_test">
-          <code>run_karma_web_test</code>
-        </a>
-      </td>
-      <td>
-        <p>Creates an action that can run karma.</p>
-
-      </td>
-    </tr>
-    <tr>
-      <td>
-        <a href="/karma_web_test.html#karma_web_test">
-          <code>karma_web_test</code>
-        </a>
-      </td>
-      <td>
-        <p>Runs unit tests in a browser with Karma.</p>
-
-      </td>
-    </tr>
-    <tr>
-      <td>
-        <a href="/karma_web_test.html#karma_web_test_suite">
-          <code>karma_web_test_suite</code>
-        </a>
-      </td>
-      <td>
-        <p>Defines a test_suite of web_test targets that wrap a karma_web_test target.</p>
-
-      </td>
-    </tr>
-  </tbody>
-</table>
-<h2><a href="/ts_web_test.html" id="ts_web_test">Unit testing in a browser</a></h2>
-
-<h3>Macros</h3>
-<table class="overview-table">
-  <colgroup>
-    <col class="col-name" />
-    <col class="col-description" />
-  </colgroup>
-  <tbody>
-    <tr>
-      <td>
-        <a href="/ts_web_test.html#ts_web_test">
-          <code>ts_web_test</code>
-        </a>
-      </td>
-      <td>
-        <p>Runs unit tests in a browser.</p>
-
-      </td>
-    </tr>
-    <tr>
-      <td>
-        <a href="/ts_web_test.html#ts_web_test_suite">
-          <code>ts_web_test_suite</code>
-        </a>
-      </td>
-      <td>
-        <p>Defines a test_suite of web_test targets that wrap a ts_web_test target.</p>
-
-      </td>
-    </tr>
-  </tbody>
-</table>
diff --git a/internal/karma/docs/install.md b/internal/karma/docs/install.md
deleted file mode 100644
index e04b558..0000000
--- a/internal/karma/docs/install.md
+++ /dev/null
@@ -1,80 +0,0 @@
-# Karma rules for Bazel
-
-**WARNING: this is beta-quality software. Breaking changes are likely. Not recommended for production use without expert support.**
-
-The Karma rules run karma tests with Bazel.
-
-## Installation
-
-Add the `@bazel/karma` npm package to your `devDependencies` in `package.json`.
-
-Your `WORKSPACE` should declare a `yarn_install` or `npm_install` rule named `npm`.
-It should then install the rules found in the npm packages.
-
-This is copied from the README for rules_nodejs:
-
-```python
-load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
-
-# Fetch rules_nodejs
-# (you can check https://github.com/bazelbuild/rules_nodejs/releases for a newer release than this)
-http_archive(
-    name = "build_bazel_rules_nodejs",
-    urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/0.18.5/rules_nodejs-0.18.5.tar.gz"],
-    sha256 = "c8cd6a77433f7d3bb1f4ac87f15822aa102989f8e9eb1907ca0cad718573985b",
-)
-
-# Setup the NodeJS toolchain
-load("@build_bazel_rules_nodejs//:defs.bzl", "node_repositories", "yarn_install")
-node_repositories()
-
-yarn_install(
-  name = "npm",
-  package_json = "//:package.json",
-  yarn_lock = "//:yarn.lock",
-)
-
-# Install all Bazel dependencies needed for npm packages that supply Bazel rules
-load("@npm//:install_bazel_dependencies.bzl", "install_bazel_dependencies")
-install_bazel_dependencies()
-```
-
-This causes the `@bazel/karma` package to be installed as a Bazel workspace named `npm_bazel_karma`.
-
-Now add this to your `WORKSPACE` to install the Karma dependencies:
-
-```python
-# Fetch transitive Bazel dependencies of npm_bazel_karma
-load("@npm_bazel_karma//:package.bzl", "rules_karma_dependencies")
-rules_karma_dependencies()
-```
-
-This installs the `io_bazel_rules_webtesting` repository, if you haven't installed it earlier.
-
-Finally, configure the rules_webtesting:
-
-```python
-# Setup web testing, choose browsers we can test on
-load("@io_bazel_rules_webtesting//web:repositories.bzl", "browser_repositories", "web_test_repositories")
-
-web_test_repositories()
-browser_repositories(
-    chromium = True,
-)
-```
-
-## Installing with self-managed dependencies
-
-If you didn't use the `yarn_install` or `npm_install` rule to create an `npm` workspace, you'll have to declare a rule in your root `BUILD.bazel` file to execute karma:
-
-```python
-# Create a karma rule to use in ts_web_test_suite karma
-# attribute when using self-managed dependencies
-nodejs_binary(
-    name = "karma/karma",
-    entry_point = "karma/bin/karma",
-    # Point bazel to your node_modules to find the entry point
-    node_modules = ["//:node_modules"],
-)
-```
-
diff --git a/internal/karma/docs/karma_web_test.md b/internal/karma/docs/karma_web_test.md
deleted file mode 100644
index 39c6543..0000000
--- a/internal/karma/docs/karma_web_test.md
+++ /dev/null
@@ -1,315 +0,0 @@
-
-<!---
-Documentation generated by Skydoc
--->
-<h1>Unit testing with Karma</h1>
-
-
-<nav class="toc">
-  <h2>Macros</h2>
-  <ul>
-    <li><a href="#run_karma_web_test">run_karma_web_test</a></li>
-    <li><a href="#karma_web_test">karma_web_test</a></li>
-    <li><a href="#karma_web_test_suite">karma_web_test_suite</a></li>
-  </ul>
-</nav>
-<a name="run_karma_web_test"></a>
-## run_karma_web_test
-
-<pre>
-run_karma_web_test(<a href="#run_karma_web_test.ctx">ctx</a>)
-</pre>
-
-Creates an action that can run karma.
-
-This is also used by ts_web_test_rule.
-
-Returns:
-  The runfiles for the generated action.
-
-
-<a name="run_karma_web_test_args"></a>
-### Attributes
-
-
-<table class="params-table">
-  <colgroup>
-    <col class="col-param" />
-    <col class="col-description" />
-  </colgroup>
-  <tbody>
-    <tr id="run_karma_web_test.ctx">
-      <td><code>ctx</code></td>
-      <td>
-        <p><code>Unknown; Required</code></p>
-        <p>Bazel rule execution context</p>
-      </td>
-    </tr>
-  </tbody>
-</table>
-<a name="karma_web_test"></a>
-## karma_web_test
-
-<pre>
-karma_web_test(<a href="#karma_web_test.srcs">srcs</a>, <a href="#karma_web_test.deps">deps</a>, <a href="#karma_web_test.data">data</a>, <a href="#karma_web_test.configuration_env_vars">configuration_env_vars</a>, <a href="#karma_web_test.bootstrap">bootstrap</a>, <a href="#karma_web_test.runtime_deps">runtime_deps</a>, <a href="#karma_web_test.static_files">static_files</a>, <a href="#karma_web_test.config_file">config_file</a>, <a href="#karma_web_test.tags">tags</a>, <a href="#karma_web_test.**kwargs">**kwargs</a>)
-</pre>
-
-Runs unit tests in a browser with Karma.
-
-When executed under `bazel test`, this uses a headless browser for speed.
-This is also because `bazel test` allows multiple targets to be tested together,
-and we don't want to open a Chrome window on your machine for each one. Also,
-under `bazel test` the test will execute and immediately terminate.
-
-Running under `ibazel test` gives you a "watch mode" for your tests. The rule is
-optimized for this case - the test runner server will stay running and just
-re-serve the up-to-date JavaScript source bundle.
-
-To debug a single test target, run it with `bazel run` instead. This will open a
-browser window on your computer. Also you can use any other browser by opening
-the URL printed when the test starts up. The test will remain running until you
-cancel the `bazel run` command.
-
-This rule will use your system Chrome by default. In the default case, your
-environment must specify CHROME_BIN so that the rule will know which Chrome binary to run.
-Other `browsers` and `customLaunchers` may be set using the a base Karma configuration
-specified in the `config_file` attribute.
-
-
-<a name="karma_web_test_args"></a>
-### Attributes
-
-
-<table class="params-table">
-  <colgroup>
-    <col class="col-param" />
-    <col class="col-description" />
-  </colgroup>
-  <tbody>
-    <tr id="karma_web_test.srcs">
-      <td><code>srcs</code></td>
-      <td>
-        <p><code>List of strings; Optional</code></p>
-        <p>A list of JavaScript test files</p>
-      </td>
-    </tr>
-    <tr id="karma_web_test.deps">
-      <td><code>deps</code></td>
-      <td>
-        <p><code>List of strings; Optional</code></p>
-        <p>Other targets which produce JavaScript such as <code>ts_library</code></p>
-      </td>
-    </tr>
-    <tr id="karma_web_test.data">
-      <td><code>data</code></td>
-      <td>
-        <p><code>List of strings; Optional</code></p>
-        <p>Runtime dependencies</p>
-      </td>
-    </tr>
-    <tr id="karma_web_test.configuration_env_vars">
-      <td><code>configuration_env_vars</code></td>
-      <td>
-        <p><code>List of strings; Optional</code></p>
-        <p>Pass these configuration environment variables to the resulting binary.
-Chooses a subset of the configuration environment variables (taken from ctx.var), which also
-includes anything specified via the --define flag.
-Note, this can lead to different outputs produced by this rule.</p>
-      </td>
-    </tr>
-    <tr id="karma_web_test.bootstrap">
-      <td><code>bootstrap</code></td>
-      <td>
-        <p><code>List of strings; Optional</code></p>
-        <p>JavaScript files to include <em>before</em> the module loader (require.js).
-For example, you can include Reflect,js for TypeScript decorator metadata reflection,
-or UMD bundles for third-party libraries.</p>
-      </td>
-    </tr>
-    <tr id="karma_web_test.runtime_deps">
-      <td><code>runtime_deps</code></td>
-      <td>
-        <p><code>List of strings; Optional</code></p>
-        <p>Dependencies which should be loaded after the module loader but before the srcs and deps.
-These should be a list of targets which produce JavaScript such as <code>ts_library</code>.
-The files will be loaded in the same order they are declared by that rule.</p>
-      </td>
-    </tr>
-    <tr id="karma_web_test.static_files">
-      <td><code>static_files</code></td>
-      <td>
-        <p><code>List of strings; Optional</code></p>
-        <p>Arbitrary files which are available to be served on request.
-Files are served at:
-<code>/base/&amp;lt;WORKSPACE_NAME&amp;gt;/&amp;lt;path-to-file&amp;gt;</code>, e.g.
-<code>/base/npm_bazel_typescript/examples/testing/static_script.js</code></p>
-      </td>
-    </tr>
-    <tr id="karma_web_test.config_file">
-      <td><code>config_file</code></td>
-      <td>
-        <p><code>Unknown; Optional</code></p>
-        <p>User supplied Karma configuration file. Bazel will override
-certain attributes of this configuration file. Attributes that are
-overridden will be outputted to the test log.</p>
-      </td>
-    </tr>
-    <tr id="karma_web_test.tags">
-      <td><code>tags</code></td>
-      <td>
-        <p><code>List of strings; Optional</code></p>
-        <p>Standard Bazel tags, this macro adds tags for ibazel support</p>
-      </td>
-    </tr>
-    <tr id="karma_web_test.**kwargs">
-      <td><code>**kwargs</code></td>
-      <td>
-        <p><code>Unknown; Optional</code></p>
-        <p>Passed through to <code>karma_web_test</code></p>
-      </td>
-    </tr>
-  </tbody>
-</table>
-<a name="karma_web_test_suite"></a>
-## karma_web_test_suite
-
-<pre>
-karma_web_test_suite(<a href="#karma_web_test_suite.name">name</a>, <a href="#karma_web_test_suite.browsers">browsers</a>, <a href="#karma_web_test_suite.args">args</a>, <a href="#karma_web_test_suite.browser_overrides">browser_overrides</a>, <a href="#karma_web_test_suite.config">config</a>, <a href="#karma_web_test_suite.flaky">flaky</a>, <a href="#karma_web_test_suite.local">local</a>, <a href="#karma_web_test_suite.shard_count">shard_count</a>, <a href="#karma_web_test_suite.size">size</a>, <a href="#karma_web_test_suite.tags">tags</a>, <a href="#karma_web_test_suite.test_suite_tags">test_suite_tags</a>, <a href="#karma_web_test_suite.timeout">timeout</a>, <a href="#karma_web_test_suite.visibility">visibility</a>, <a href="#karma_web_test_suite.web_test_data">web_test_data</a>, <a href="#karma_web_test_suite.wrapped_test_tags">wrapped_test_tags</a>, <a href="#karma_web_test_suite.**remaining_keyword_args">**remaining_keyword_args</a>)
-</pre>
-
-Defines a test_suite of web_test targets that wrap a karma_web_test target.
-
-This macro also accepts all parameters in karma_web_test. See karma_web_test docs
-for details.
-
-
-<a name="karma_web_test_suite_args"></a>
-### Attributes
-
-
-<table class="params-table">
-  <colgroup>
-    <col class="col-param" />
-    <col class="col-description" />
-  </colgroup>
-  <tbody>
-    <tr id="karma_web_test_suite.name">
-      <td><code>name</code></td>
-      <td>
-        <p><code><a href="https://bazel.build/docs/build-ref.html#name">Name</a>; Required</code></p>
-        <p>The base name of the test</p>
-      </td>
-    </tr>
-    <tr id="karma_web_test_suite.browsers">
-      <td><code>browsers</code></td>
-      <td>
-        <p><code>List of strings; Optional</code></p>
-        <p>A sequence of labels specifying the browsers to use.</p>
-      </td>
-    </tr>
-    <tr id="karma_web_test_suite.args">
-      <td><code>args</code></td>
-      <td>
-        <p><code>Unknown; Optional</code></p>
-        <p>Args for web_test targets generated by this extension.</p>
-      </td>
-    </tr>
-    <tr id="karma_web_test_suite.browser_overrides">
-      <td><code>browser_overrides</code></td>
-      <td>
-        <p><code>Unknown; Optional</code></p>
-        <p>Dictionary; optional; default is an empty dictionary. A
-dictionary mapping from browser names to browser-specific web_test
-attributes, such as shard_count, flakiness, timeout, etc. For example:
-{'//browsers:chrome-native': {'shard_count': 3, 'flaky': 1}
-'//browsers:firefox-native': {'shard_count': 1, 'timeout': 100}}.</p>
-      </td>
-    </tr>
-    <tr id="karma_web_test_suite.config">
-      <td><code>config</code></td>
-      <td>
-        <p><code>Unknown; Optional</code></p>
-        <p>Label; optional; Configuration of web test features.</p>
-      </td>
-    </tr>
-    <tr id="karma_web_test_suite.flaky">
-      <td><code>flaky</code></td>
-      <td>
-        <p><code>Unknown; Optional</code></p>
-        <p>A boolean specifying that the test is flaky. If set, the test will
-be retried up to 3 times (default: 0)</p>
-      </td>
-    </tr>
-    <tr id="karma_web_test_suite.local">
-      <td><code>local</code></td>
-      <td>
-        <p><code>Unknown; Optional</code></p>
-        <p>boolean; optional.</p>
-      </td>
-    </tr>
-    <tr id="karma_web_test_suite.shard_count">
-      <td><code>shard_count</code></td>
-      <td>
-        <p><code>Unknown; Optional</code></p>
-        <p>The number of test shards to use per browser. (default: 1)</p>
-      </td>
-    </tr>
-    <tr id="karma_web_test_suite.size">
-      <td><code>size</code></td>
-      <td>
-        <p><code>Unknown; Optional</code></p>
-        <p>A string specifying the test size. (default: 'large')</p>
-      </td>
-    </tr>
-    <tr id="karma_web_test_suite.tags">
-      <td><code>tags</code></td>
-      <td>
-        <p><code>List of strings; Optional</code></p>
-        <p>A list of test tag strings to apply to each generated web_test target.
-This macro adds a couple for ibazel.</p>
-      </td>
-    </tr>
-    <tr id="karma_web_test_suite.test_suite_tags">
-      <td><code>test_suite_tags</code></td>
-      <td>
-        <p><code>Unknown; Optional</code></p>
-        <p>A list of tag strings for the generated test_suite.</p>
-      </td>
-    </tr>
-    <tr id="karma_web_test_suite.timeout">
-      <td><code>timeout</code></td>
-      <td>
-        <p><code>Unknown; Optional</code></p>
-        <p>A string specifying the test timeout (default: computed from size)</p>
-      </td>
-    </tr>
-    <tr id="karma_web_test_suite.visibility">
-      <td><code>visibility</code></td>
-      <td>
-        <p><code>Unknown; Optional</code></p>
-        <p>List of labels; optional.</p>
-      </td>
-    </tr>
-    <tr id="karma_web_test_suite.web_test_data">
-      <td><code>web_test_data</code></td>
-      <td>
-        <p><code>List of strings; Optional</code></p>
-        <p>Data dependencies for the web_test.</p>
-      </td>
-    </tr>
-    <tr id="karma_web_test_suite.wrapped_test_tags">
-      <td><code>wrapped_test_tags</code></td>
-      <td>
-        <p><code>Unknown; Optional</code></p>
-        <p>A list of test tag strings to use for the wrapped test</p>
-      </td>
-    </tr>
-    <tr id="karma_web_test_suite.**remaining_keyword_args">
-      <td><code>**remaining_keyword_args</code></td>
-      <td>
-        <p><code>Unknown; Optional</code></p>
-        <p>Arguments for the wrapped test target.</p>
-      </td>
-    </tr>
-  </tbody>
-</table>
diff --git a/internal/karma/docs/ts_web_test.md b/internal/karma/docs/ts_web_test.md
deleted file mode 100644
index eca8535..0000000
--- a/internal/karma/docs/ts_web_test.md
+++ /dev/null
@@ -1,272 +0,0 @@
-
-<!---
-Documentation generated by Skydoc
--->
-<h1>Unit testing in a browser</h1>
-
-
-<nav class="toc">
-  <h2>Macros</h2>
-  <ul>
-    <li><a href="#ts_web_test">ts_web_test</a></li>
-    <li><a href="#ts_web_test_suite">ts_web_test_suite</a></li>
-  </ul>
-</nav>
-<a name="ts_web_test"></a>
-## ts_web_test
-
-<pre>
-ts_web_test(<a href="#ts_web_test.srcs">srcs</a>, <a href="#ts_web_test.deps">deps</a>, <a href="#ts_web_test.data">data</a>, <a href="#ts_web_test.configuration_env_vars">configuration_env_vars</a>, <a href="#ts_web_test.bootstrap">bootstrap</a>, <a href="#ts_web_test.runtime_deps">runtime_deps</a>, <a href="#ts_web_test.static_files">static_files</a>, <a href="#ts_web_test.tags">tags</a>, <a href="#ts_web_test.**kwargs">**kwargs</a>)
-</pre>
-
-Runs unit tests in a browser.
-
-When executed under `bazel test`, this uses a headless browser for speed.
-This is also because `bazel test` allows multiple targets to be tested together,
-and we don't want to open a Chrome window on your machine for each one. Also,
-under `bazel test` the test will execute and immediately terminate.
-
-Running under `ibazel test` gives you a "watch mode" for your tests. The rule is
-optimized for this case - the test runner server will stay running and just
-re-serve the up-to-date JavaScript source bundle.
-
-To debug a single test target, run it with `bazel run` instead. This will open a
-browser window on your computer. Also you can use any other browser by opening
-the URL printed when the test starts up. The test will remain running until you
-cancel the `bazel run` command.
-
-This rule will use your system Chrome. Your environment must specify CHROME_BIN
-so that the rule will know which Chrome binary to run.
-
-Currently this rule uses Karma as the test runner under the hood, but this is
-an implementation detail. We might switch to another runner like Jest in the future.
-
-
-<a name="ts_web_test_args"></a>
-### Attributes
-
-
-<table class="params-table">
-  <colgroup>
-    <col class="col-param" />
-    <col class="col-description" />
-  </colgroup>
-  <tbody>
-    <tr id="ts_web_test.srcs">
-      <td><code>srcs</code></td>
-      <td>
-        <p><code>List of strings; Optional</code></p>
-        <p>A list of JavaScript test files</p>
-      </td>
-    </tr>
-    <tr id="ts_web_test.deps">
-      <td><code>deps</code></td>
-      <td>
-        <p><code>List of strings; Optional</code></p>
-        <p>Other targets which produce JavaScript such as <code>ts_library</code></p>
-      </td>
-    </tr>
-    <tr id="ts_web_test.data">
-      <td><code>data</code></td>
-      <td>
-        <p><code>List of strings; Optional</code></p>
-        <p>Runtime dependencies</p>
-      </td>
-    </tr>
-    <tr id="ts_web_test.configuration_env_vars">
-      <td><code>configuration_env_vars</code></td>
-      <td>
-        <p><code>List of strings; Optional</code></p>
-        <p>Pass these configuration environment variables to the resulting binary.
-Chooses a subset of the configuration environment variables (taken from ctx.var), which also
-includes anything specified via the --define flag.
-Note, this can lead to different outputs produced by this rule.</p>
-      </td>
-    </tr>
-    <tr id="ts_web_test.bootstrap">
-      <td><code>bootstrap</code></td>
-      <td>
-        <p><code>List of strings; Optional</code></p>
-        <p>JavaScript files to include <em>before</em> the module loader (require.js).
-For example, you can include Reflect,js for TypeScript decorator metadata reflection,
-or UMD bundles for third-party libraries.</p>
-      </td>
-    </tr>
-    <tr id="ts_web_test.runtime_deps">
-      <td><code>runtime_deps</code></td>
-      <td>
-        <p><code>List of strings; Optional</code></p>
-        <p>Dependencies which should be loaded after the module loader but before the srcs and deps.
-These should be a list of targets which produce JavaScript such as <code>ts_library</code>.
-The files will be loaded in the same order they are declared by that rule.</p>
-      </td>
-    </tr>
-    <tr id="ts_web_test.static_files">
-      <td><code>static_files</code></td>
-      <td>
-        <p><code>List of strings; Optional</code></p>
-        <p>Arbitrary files which are available to be served on request.
-Files are served at:
-<code>/base/&amp;lt;WORKSPACE_NAME&amp;gt;/&amp;lt;path-to-file&amp;gt;</code>, e.g.
-<code>/base/npm_bazel_typescript/examples/testing/static_script.js</code></p>
-      </td>
-    </tr>
-    <tr id="ts_web_test.tags">
-      <td><code>tags</code></td>
-      <td>
-        <p><code>List of strings; Optional</code></p>
-        <p>Standard Bazel tags, this macro adds tags for ibazel support as well as</p>
-      </td>
-    </tr>
-    <tr id="ts_web_test.**kwargs">
-      <td><code>**kwargs</code></td>
-      <td>
-        <p><code>Unknown; Optional</code></p>
-        <p>Passed through to <code>ts_web_test</code></p>
-      </td>
-    </tr>
-  </tbody>
-</table>
-<a name="ts_web_test_suite"></a>
-## ts_web_test_suite
-
-<pre>
-ts_web_test_suite(<a href="#ts_web_test_suite.name">name</a>, <a href="#ts_web_test_suite.browsers">browsers</a>, <a href="#ts_web_test_suite.args">args</a>, <a href="#ts_web_test_suite.browser_overrides">browser_overrides</a>, <a href="#ts_web_test_suite.config">config</a>, <a href="#ts_web_test_suite.flaky">flaky</a>, <a href="#ts_web_test_suite.local">local</a>, <a href="#ts_web_test_suite.shard_count">shard_count</a>, <a href="#ts_web_test_suite.size">size</a>, <a href="#ts_web_test_suite.tags">tags</a>, <a href="#ts_web_test_suite.test_suite_tags">test_suite_tags</a>, <a href="#ts_web_test_suite.timeout">timeout</a>, <a href="#ts_web_test_suite.visibility">visibility</a>, <a href="#ts_web_test_suite.web_test_data">web_test_data</a>, <a href="#ts_web_test_suite.wrapped_test_tags">wrapped_test_tags</a>, <a href="#ts_web_test_suite.**remaining_keyword_args">**remaining_keyword_args</a>)
-</pre>
-
-Defines a test_suite of web_test targets that wrap a ts_web_test target.
-
-This macro also accepts all parameters in ts_web_test. See ts_web_test docs for
-details.
-
-
-<a name="ts_web_test_suite_args"></a>
-### Attributes
-
-
-<table class="params-table">
-  <colgroup>
-    <col class="col-param" />
-    <col class="col-description" />
-  </colgroup>
-  <tbody>
-    <tr id="ts_web_test_suite.name">
-      <td><code>name</code></td>
-      <td>
-        <p><code><a href="https://bazel.build/docs/build-ref.html#name">Name</a>; Required</code></p>
-        <p>The base name of the test.</p>
-      </td>
-    </tr>
-    <tr id="ts_web_test_suite.browsers">
-      <td><code>browsers</code></td>
-      <td>
-        <p><code>List of strings; Optional</code></p>
-        <p>A sequence of labels specifying the browsers to use.</p>
-      </td>
-    </tr>
-    <tr id="ts_web_test_suite.args">
-      <td><code>args</code></td>
-      <td>
-        <p><code>Unknown; Optional</code></p>
-        <p>Args for web_test targets generated by this extension.</p>
-      </td>
-    </tr>
-    <tr id="ts_web_test_suite.browser_overrides">
-      <td><code>browser_overrides</code></td>
-      <td>
-        <p><code>Unknown; Optional</code></p>
-        <p>Dictionary; optional; default is an empty dictionary. A
-dictionary mapping from browser names to browser-specific web_test
-attributes, such as shard_count, flakiness, timeout, etc. For example:
-{'//browsers:chrome-native': {'shard_count': 3, 'flaky': 1}
-'//browsers:firefox-native': {'shard_count': 1, 'timeout': 100}}.</p>
-      </td>
-    </tr>
-    <tr id="ts_web_test_suite.config">
-      <td><code>config</code></td>
-      <td>
-        <p><code>Unknown; Optional</code></p>
-        <p>Label; optional; Configuration of web test features.</p>
-      </td>
-    </tr>
-    <tr id="ts_web_test_suite.flaky">
-      <td><code>flaky</code></td>
-      <td>
-        <p><code>Unknown; Optional</code></p>
-        <p>A boolean specifying that the test is flaky. If set, the test will
-be retried up to 3 times (default: 0)</p>
-      </td>
-    </tr>
-    <tr id="ts_web_test_suite.local">
-      <td><code>local</code></td>
-      <td>
-        <p><code>Unknown; Optional</code></p>
-        <p>boolean; optional.</p>
-      </td>
-    </tr>
-    <tr id="ts_web_test_suite.shard_count">
-      <td><code>shard_count</code></td>
-      <td>
-        <p><code>Unknown; Optional</code></p>
-        <p>The number of test shards to use per browser. (default: 1)</p>
-      </td>
-    </tr>
-    <tr id="ts_web_test_suite.size">
-      <td><code>size</code></td>
-      <td>
-        <p><code>Unknown; Optional</code></p>
-        <p>A string specifying the test size. (default: 'large')</p>
-      </td>
-    </tr>
-    <tr id="ts_web_test_suite.tags">
-      <td><code>tags</code></td>
-      <td>
-        <p><code>List of strings; Optional</code></p>
-        <p>A list of test tag strings to apply to each generated web_test_suite target.
-This macro adds a couple for ibazel.</p>
-      </td>
-    </tr>
-    <tr id="ts_web_test_suite.test_suite_tags">
-      <td><code>test_suite_tags</code></td>
-      <td>
-        <p><code>Unknown; Optional</code></p>
-        <p>A list of tag strings for the generated test_suite.</p>
-      </td>
-    </tr>
-    <tr id="ts_web_test_suite.timeout">
-      <td><code>timeout</code></td>
-      <td>
-        <p><code>Unknown; Optional</code></p>
-        <p>A string specifying the test timeout (default: computed from size)</p>
-      </td>
-    </tr>
-    <tr id="ts_web_test_suite.visibility">
-      <td><code>visibility</code></td>
-      <td>
-        <p><code>Unknown; Optional</code></p>
-        <p>List of labels; optional.</p>
-      </td>
-    </tr>
-    <tr id="ts_web_test_suite.web_test_data">
-      <td><code>web_test_data</code></td>
-      <td>
-        <p><code>List of strings; Optional</code></p>
-        <p>Data dependencies for the web_test_suite.</p>
-      </td>
-    </tr>
-    <tr id="ts_web_test_suite.wrapped_test_tags">
-      <td><code>wrapped_test_tags</code></td>
-      <td>
-        <p><code>Unknown; Optional</code></p>
-        <p>A list of test tag strings to use for the wrapped test</p>
-      </td>
-    </tr>
-    <tr id="ts_web_test_suite.**remaining_keyword_args">
-      <td><code>**remaining_keyword_args</code></td>
-      <td>
-        <p><code>Unknown; Optional</code></p>
-        <p>Arguments for the wrapped test target.</p>
-      </td>
-    </tr>
-  </tbody>
-</table>
diff --git a/internal/karma/index.ts b/internal/karma/index.ts
deleted file mode 100644
index 511a6fb..0000000
--- a/internal/karma/index.ts
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Concat all JS files before serving.
- */
-import * as crypto from 'crypto';
-import * as fs from 'fs';
-import * as path from 'path';
-import * as process from 'process';
-import * as tmp from 'tmp';
-import {createInterface} from 'readline';
-///<reference types="lib.dom"/>
-
-/**
- * Return SHA1 of data buffer.
- */
-function sha1(data) {
-  const hash = crypto.createHash('sha1');
-  hash.update(data);
-  return hash.digest('hex');
-}
-
-/**
- * Entry-point for the Karma plugin.
- */
-function initConcatJs(logger, emitter, basePath, hostname, port) {
-  const log = logger.create('framework.concat_js');
-
-  // Create a tmp file for the concat bundle that is automatically cleaned up on
-  // exit.
-  const tmpFile = tmp.fileSync({keep: false, dir: process.env['TEST_TMPDIR']});
-
-  emitter.on('file_list_modified', files => {
-    const bundleFile = {
-      path: '/concatjs_bundle.js',
-      contentPath: tmpFile.name,
-      isUrl: false,
-      content: '',
-      encodings: {},
-    } as any;
-    const included = [];
-
-    files.included.forEach(file => {
-      if (path.extname(file.originalPath) !== '.js') {
-        // Preserve all non-JS that were there in the included list.
-        included.push(file);
-      } else {
-        const relativePath =
-            path.relative(basePath, file.originalPath).replace(/\\/g, '/');
-
-        // Remove 'use strict'.
-        let content = file.content.replace(/('use strict'|"use strict");?/,
-                                           '');
-        content = JSON.stringify(
-          `${content}\n//# sourceURL=http://${hostname}:${port}/base/` +
-          `${relativePath}\n`);
-        content = `//${relativePath}\neval(${content});\n`;
-        bundleFile.content += content;
-      }
-    });
-
-    bundleFile.sha = sha1(Buffer.from(bundleFile.content));
-    bundleFile.mtime = new Date();
-    included.unshift(bundleFile);
-
-    files.included = included;
-    files.served.push(bundleFile);
-
-    log.debug('Writing concatjs bundle to tmp file %s',
-        bundleFile.contentPath);
-    fs.writeFileSync(bundleFile.contentPath, bundleFile.content);
-  });
-}
-
-(initConcatJs as any).$inject = ['logger', 'emitter', 'config.basePath', 'config.hostname', 'config.port'];
-
-function watcher(fileList: {refresh: () => void}) {
-  // ibazel will write this string after a successful build
-  // We don't want to re-trigger tests if the compilation fails, so
-  // we should only listen for this event.
-  const IBAZEL_NOTIFY_BUILD_SUCCESS = 'IBAZEL_BUILD_COMPLETED SUCCESS';
-  // ibazel communicates with us via stdin
-  const rl = createInterface({input: process.stdin, terminal: false});
-  rl.on('line', (chunk: string) => {
-    if (chunk === IBAZEL_NOTIFY_BUILD_SUCCESS) {
-      fileList.refresh();
-    }
-  });
-  rl.on('close', () => {
-    // Give ibazel 5s to kill our process, otherwise do it ourselves
-    setTimeout(() => {
-      console.error('ibazel failed to stop karma after 5s; probably a bug');
-      process.exit(1);
-    }, 5000);
-  });
-}
-
-(watcher as any).$inject = ['fileList'];
-
-module.exports = {
-  'framework:concat_js': ['factory', initConcatJs],
-  'watcher': ['value', watcher],
-};
diff --git a/internal/karma/karma.conf.js b/internal/karma/karma.conf.js
deleted file mode 100644
index 1d82ff1..0000000
--- a/internal/karma/karma.conf.js
+++ /dev/null
@@ -1,423 +0,0 @@
-// Karma configuration
-// GENERATED BY Bazel
-try
-{
-  const fs = require('fs');
-  const path = require('path');
-  const tmp = require('tmp');
-  const child_process = require('child_process');
-
-  const DEBUG = false;
-
-  TMPL_env_vars
-
-  const configPath = 'TMPL_config_file';
-
-  if (DEBUG)
-    console.info(`Karma test starting with:
-    cwd: ${process.cwd()}
-    configPath: ${configPath}`);
-
-  /**
-   * Helper function to find a particular namedFile
-   * within the webTestMetadata webTestFiles
-   */
-  function findNamedFile(webTestMetadata, key) {
-    let result;
-    webTestMetadata['webTestFiles'].forEach(entry => {
-      const webTestNamedFiles = entry['namedFiles'];
-      if (webTestNamedFiles && webTestNamedFiles[key]) {
-        result = webTestNamedFiles[key];
-      }
-    });
-    return result;
-  }
-
-  /**
-   * Helper function to extract a browser archive
-   * and return the path to extract executable
-   */
-  function extractWebArchive(extractExe, archiveFile, executablePath) {
-    try {
-      // Paths are relative to the root runfiles folder
-      extractExe = extractExe ? path.join('..', extractExe) : extractExe;
-      archiveFile = path.join('..', archiveFile);
-      const extractedExecutablePath = path.join(process.cwd(), executablePath);
-      if (!extractExe) {
-        throw new Error('No EXTRACT_EXE found');
-      }
-      child_process.execFileSync(
-          extractExe, [archiveFile, '.'],
-          {stdio: [process.stdin, process.stdout, process.stderr]});
-    if (DEBUG) console.info(`Extracting web archive ${archiveFile} with ${extractExe} to ${extractedExecutablePath}`);
-      return extractedExecutablePath;
-    } catch (e) {
-      console.error(`Failed to extract ${archiveFile}`);
-      throw e;
-    }
-  }
-
-  /**
-   * Chrome on Linux uses sandboxing, which needs user namespaces to be enabled.
-   * This is not available on all kernels and it might be turned off even if it is available.
-   * Notable examples where user namespaces are not available include:
-   * - In Debian it is compiled-in but disabled by default.
-   * - The Docker daemon for Windows or OSX does not support user namespaces.
-   * We can detect if user namespaces are supported via /proc/sys/kernel/unprivileged_userns_clone.
-   * For more information see:
-   * https://github.com/Googlechrome/puppeteer/issues/290
-   * https://superuser.com/questions/1094597/enable-user-namespaces-in-debian-kernel#1122977
-   * https://github.com/karma-runner/karma-chrome-launcher/issues/158
-   * https://github.com/angular/angular/pull/24906
-   */
-  function supportsSandboxing() {
-    if (process.platform !== 'linux') {
-      return true;
-    }
-    try {
-      const res = child_process
-        .execSync('cat /proc/sys/kernel/unprivileged_userns_clone').toString().trim();
-      return res === '1';
-    } catch (error) { }
-
-    return false;
-  }
-
-  /**
-   * Helper function to override base karma config values.
-   */
-  function overrideConfigValue(conf, name, value) {
-    if (conf.hasOwnProperty(name)) {
-      console.warn(
-          `Your karma configuration specifies '${name}' which will be overwritten by Bazel`);
-    }
-    conf[name] = value;
-  }
-
-  /**
-   * Helper function to merge base karma config values that are arrays.
-   */
-  function mergeConfigArray(conf, name, values) {
-    if (!conf[name]) {
-      conf[name] = [];
-    }
-    values.forEach(v => {
-      if (!conf[name].includes(v)) {
-        conf[name].push(v);
-      }
-    })
-  }
-
-  /**
-   * Configuration settings for karma under Bazel common to karma_web_test
-   * and karma_web_test_suite.
-   */
-  function configureBazelConfig(config, conf) {
-    // list of karma plugins
-    mergeConfigArray(conf, 'plugins', [
-      'karma-*',
-      '@bazel/karma',
-      'karma-sourcemap-loader',
-      'karma-chrome-launcher',
-      'karma-firefox-launcher',
-      'karma-sauce-launcher',
-    ]);
-
-    // list of karma preprocessors
-    if (!conf.preprocessors) {
-      conf.preprocessors = {}
-    }
-    conf.preprocessors['**/*.js'] = ['sourcemap'];
-
-    // list of test frameworks to use
-    overrideConfigValue(conf, 'frameworks', ['jasmine', 'concat_js']);
-
-    // test results reporter to use
-    // possible values: 'dots', 'progress'
-    // available reporters: https://npmjs.org/browse/keyword/karma-reporter
-    mergeConfigArray(conf, 'reporters', ['progress']);
-
-    // enable / disable colors in the output (reporters and logs)
-    if (!conf.colors) {
-      conf.colors = true;
-    }
-
-    // level of logging
-    // possible values: config.LOG_DISABLE || config.LOG_ERROR ||
-    // config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
-    if (!conf.logLevel) {
-      conf.logLevel = config.LOG_INFO;
-    }
-
-    // enable / disable watching file and executing tests whenever
-    // any file changes
-    overrideConfigValue(conf, 'autoWatch', process.env['IBAZEL_NOTIFY_CHANGES'] === 'y');
-
-    // Continuous Integration mode
-    // if true, Karma captures browsers, runs the tests and exits
-    // note: run_karma.sh may override this as a command-line option.
-    overrideConfigValue(conf, 'singleRun', false);
-
-    // Concurrency level
-    // how many browser should be started simultaneous
-    overrideConfigValue(conf, 'concurrency', Infinity);
-
-    // base path that will be used to resolve all patterns
-    // (eg. files, exclude)
-    overrideConfigValue(conf, 'basePath', 'TMPL_runfiles_path');
-
-    // Do not show "no timestamp" errors from "karma-requirejs" for proxied file
-    // requests. Files which are passed as "static_files" are proxied by default and
-    // therefore should not cause such an exception when loaded as expected.
-    // See: https://github.com/karma-runner/karma-requirejs/issues/6
-    const requireJsShowNoTimestampsError = '^(?!/base/).*$';
-
-    if (conf.client) {
-      overrideConfigValue(conf.client, 'requireJsShowNoTimestampsError',
-          requireJsShowNoTimestampsError);
-    } else {
-      conf.client = {requireJsShowNoTimestampsError};
-    }
-  }
-
-  /**
-   * Configure the 'files' and 'proxies' configuration attributes.
-   * These are concatenated into a single file by karma-concat-js.
-   */
-  function configureFiles(conf) {
-    overrideConfigValue(conf, 'files', [
-      TMPL_bootstrap_files
-      TMPL_user_files
-    ].map(f => {
-      if (f.startsWith('NODE_MODULES/')) {
-        try {
-          // attempt to resolve in @bazel/typescript nested node_modules first
-          return require.resolve(f.replace(/^NODE_MODULES\//, '@bazel/karma/node_modules/'));
-        } catch (e) {
-          // if that failed then attempt to resolve in root node_modules
-          return require.resolve(f.replace(/^NODE_MODULES\//, ''));
-        }
-      } else {
-        return require.resolve(f);
-      }
-    }));
-    overrideConfigValue(conf, 'exclude', []);
-    overrideConfigValue(conf, 'proxies', {});
-
-    // static files are added to the files array but
-    // configured to not be included so karma-concat-js does
-    // not included them in the bundle
-    [TMPL_static_files].forEach((f) => {
-      // In Windows, the runfile will probably not be symlinked. Se we need to
-      // serve the real file through karma, and proxy calls to the expected file
-      // location in the runfiles to the real file.
-      const resolvedFile = require.resolve(f);
-      conf.files.push({pattern: resolvedFile, included: false});
-      // Prefixing the proxy path with '/absolute' allows karma to load local
-      // files. This doesn't see to be an official API.
-      // https://github.com/karma-runner/karma/issues/2703
-      conf.proxies['/base/' + f] = '/absolute' + resolvedFile;
-    });
-
-    var requireConfigContent = `
-// A simplified version of Karma's requirejs.config.tpl.js for use with Karma under Bazel.
-// This does an explicit \`require\` on each test script in the files, otherwise nothing will be loaded.
-(function(){
-  var runtimeFiles = [TMPL_runtime_files].map(function(file) { return file.replace(/\\.js$/, ''); });
-  var allFiles = [TMPL_user_files];
-  var allTestFiles = [];
-  allFiles.forEach(function (file) {
-    if (/[^a-zA-Z0-9](spec|test)\\.js$/i.test(file) && !/\\/node_modules\\//.test(file)) {
-      allTestFiles.push(file.replace(/\\.js$/, ''))
-    }
-  });
-  require(runtimeFiles, function() { return require(allTestFiles, window.__karma__.start); });
-})();
-`;
-
-    const requireConfigFile = tmp.fileSync(
-        {keep: false, postfix: '.js', dir: process.env['TEST_TMPDIR']});
-    fs.writeFileSync(requireConfigFile.name, requireConfigContent);
-    conf.files.push(requireConfigFile.name);
-  }
-
-  /**
-   * Configure karma under karma_web_test_suite.
-   * `browsers` and `customLaunchers` are setup by Bazel.
-   */
-  function configureTsWebTestSuiteConfig(conf) {
-    // WEB_TEST_METADATA is configured in rules_webtesting based on value
-    // of the browsers attribute passed to karms_web_test_suite
-    // We setup the karma configuration based on the values in this object
-    if (!process.env['WEB_TEST_METADATA']) {
-      // This is a karma_web_test rule since there is no WEB_TEST_METADATA
-      return;
-    }
-
-    overrideConfigValue(conf, 'browsers', []);
-    overrideConfigValue(conf, 'customLaunchers', null);
-
-    const webTestMetadata = require(process.env['WEB_TEST_METADATA']);
-    if (DEBUG) console.info(`WEB_TEST_METADATA: ${JSON.stringify(webTestMetadata, null, 2)}`);
-    if (webTestMetadata['environment'] === 'sauce') {
-      // If a sauce labs browser is chosen for the test such as
-      // "@io_bazel_rules_webtesting//browsers/sauce:chrome-win10"
-      // than the 'environment' will equal 'sauce'.
-      // We expect that a SAUCE_USERNAME and SAUCE_ACCESS_KEY is available
-      // from the environment for this test to run
-      if (!process.env.SAUCE_USERNAME || !process.env.SAUCE_ACCESS_KEY) {
-        console.error('Make sure the SAUCE_USERNAME and SAUCE_ACCESS_KEY environment variables are set.');
-        process.exit(1);
-      }
-      // 'capabilities' will specify the sauce labs configuration to use
-      const capabilities = webTestMetadata['capabilities'];
-      conf.customLaunchers = {
-          'sauce': {
-          base: 'SauceLabs',
-          browserName: capabilities['browserName'],
-          platform: capabilities['platform'],
-          version: capabilities['version'],
-        }
-      };
-      conf.browsers.push('sauce');
-    } else if (webTestMetadata['environment'] === 'local') {
-      // When a local chrome or firefox browser is chosen such as
-      // "@io_bazel_rules_webtesting//browsers:chromium-local" or
-      // "@io_bazel_rules_webtesting//browsers:firefox-local"
-      // then the 'environment' will equal 'local' and
-      // 'webTestFiles' will contain the path to the binary to use
-      const extractExe = findNamedFile(webTestMetadata, 'EXTRACT_EXE');
-      webTestMetadata['webTestFiles'].forEach(webTestFiles => {
-        const webTestNamedFiles = webTestFiles['namedFiles'];
-        const archiveFile = webTestFiles['archiveFile'];
-        if (webTestNamedFiles['CHROMIUM']) {
-          // When karma is configured to use Chrome it will look for a CHROME_BIN
-          // environment variable.
-          if (archiveFile) {
-            process.env.CHROME_BIN = extractWebArchive(extractExe, archiveFile, webTestNamedFiles['CHROMIUM']);
-          } else {
-            process.env.CHROME_BIN = require.resolve(webTestNamedFiles['CHROMIUM']);
-          }
-          const browser = process.env['DISPLAY'] ? 'Chrome' : 'ChromeHeadless';
-          if (!supportsSandboxing()) {
-            const launcher = 'CustomChromeWithoutSandbox';
-            conf.customLaunchers = {
-              [launcher]: {
-                base: browser,
-                flags: ['--no-sandbox']
-              }
-            };
-            conf.browsers.push(launcher);
-          } else {
-            conf.browsers.push(browser);
-          }
-        }
-        if (webTestNamedFiles['FIREFOX']) {
-          // When karma is configured to use Firefox it will look for a
-          // FIREFOX_BIN environment variable.
-          if (archiveFile) {
-            process.env.FIREFOX_BIN = extractWebArchive(extractExe, archiveFile, webTestNamedFiles['FIREFOX']);
-          } else {
-            process.env.FIREFOX_BIN = require.resolve(webTestNamedFiles['FIREFOX']);
-          }
-          conf.browsers.push(process.env['DISPLAY'] ? 'Firefox' : 'FirefoxHeadless');
-        }
-      });
-    } else {
-      throw new Error(`Unknown WEB_TEST_METADATA environment '${webTestMetadata['environment']}'`);
-    }
-
-    if (!conf.browsers.length) {
-      throw new Error('No browsers configured in web test suite');
-    }
-
-    // Extra configuration is needed for saucelabs
-    // See: https://github.com/karma-runner/karma-sauce-launcher
-    if (conf.customLaunchers) {
-      // set the test name for sauce labs to use
-      // TEST_BINARY is set by Bazel and contains the name of the test
-      // target postfixed with the browser name such as
-      // 'examples/testing/testing_sauce_chrome-win10' for the
-      // test target examples/testing:testing
-      if (!conf.sauceLabs) {
-        conf.sauceLabs = {}
-      }
-      conf.sauceLabs.testName = process.env['TEST_BINARY'] || 'karma';
-
-      // Try "websocket" for a faster transmission first. Fallback to "polling" if necessary.
-      overrideConfigValue(conf, 'transports', ['websocket', 'polling']);
-
-      // add the saucelabs reporter
-      mergeConfigArray(conf, 'reporters', ['saucelabs']);
-    }
-  }
-
-  function configureTsWebTestConfig(conf) {
-    if (process.env['WEB_TEST_METADATA']) {
-      // This is a karma_web_test_suite rule since there is a WEB_TEST_METADATA
-      return;
-    }
-
-    // Fallback to using the system local chrome if no valid browsers have been
-    // configured above
-    if (!conf.browsers || !conf.browsers.length) {
-      console.warn('No browsers configured. Configuring Karma to use system Chrome.');
-      conf.browsers = [process.env['DISPLAY'] ? 'Chrome': 'ChromeHeadless'];
-    }
-  }
-
-  function configureFormatError(conf) {
-    conf.formatError = (msg) =>  {
-      // This is a bazel specific formatError that removes the workspace
-      // name from stack traces.
-      // Look for filenames of the format "(<filename>:<row>:<column>"
-      const FILENAME_REGEX = /\(([^:]+)(:\d+:\d+)/gm;
-      msg = msg.replace(FILENAME_REGEX, (_, p1, p2) => {
-        if (p1. startsWith('../')) {
-          // Remove all leading "../"
-          while (p1.startsWith('../')) {
-            p1 = p1.substr(3);
-          }
-        } else {
-          // Remove workspace name(angular, ngdeps etc.) from the beginning.
-          const index = p1.indexOf('/');
-          if (index >= 0) {
-            p1 = p1.substr(index + 1);
-          }
-        }
-        return '(' + p1 + p2;
-      });
-      return msg + '\n\n';
-    };
-  }
-
-  module.exports = function(config) {
-    let conf = {};
-
-    // Import the user's base karma configuration if specified
-    if (configPath) {
-      const baseConf = require(configPath);
-      if (typeof baseConf !== 'function') {
-        throw new Error('Invalid base karma configuration. Expected config function to be exported.');
-      }
-      const originalSetConfig = config.set;
-      config.set = function(c) { conf = c; };
-      baseConf(config);
-      config.set = originalSetConfig;
-      if (DEBUG) console.info(`Base karma configuration: ${JSON.stringify(conf, null, 2)}`);
-    }
-
-    configureBazelConfig(config, conf);
-    configureFiles(conf);
-    configureTsWebTestSuiteConfig(conf);
-    configureTsWebTestConfig(conf);
-    configureFormatError(conf);
-
-    if (DEBUG) console.info(`Karma configuration: ${JSON.stringify(conf, null, 2)}`);
-
-    config.set(conf);
-  }
-} catch (e) {
-  console.error('Error in karma configuration', e.toString());
-  throw e;
-}
diff --git a/internal/karma/karma.js b/internal/karma/karma.js
deleted file mode 100644
index 2653ede..0000000
--- a/internal/karma/karma.js
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/env node
-
-require('karma/lib/cli').run();
diff --git a/internal/karma/karma_web_test.bzl b/internal/karma/karma_web_test.bzl
deleted file mode 100644
index 2002fd2..0000000
--- a/internal/karma/karma_web_test.bzl
+++ /dev/null
@@ -1,447 +0,0 @@
-# Copyright 2017 The Bazel Authors. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-"Unit testing with Karma"
-
-load("@build_bazel_rules_nodejs//internal/common:expand_into_runfiles.bzl", "expand_path_into_runfiles")
-load("@build_bazel_rules_nodejs//internal/common:sources_aspect.bzl", "sources_aspect")
-load("@build_bazel_rules_nodejs//internal/js_library:js_library.bzl", "write_amd_names_shim")
-load("@io_bazel_rules_webtesting//web/internal:constants.bzl", "DEFAULT_WRAPPED_TEST_TAGS")
-load("@io_bazel_rules_webtesting//web:web.bzl", "web_test_suite")
-load(":web_test.bzl", "COMMON_WEB_TEST_ATTRS")
-
-_CONF_TMPL = "//:karma.conf.js"
-_DEFAULT_KARMA_BIN = "@npm//@bazel/karma/bin:karma"
-
-# Attributes for karma_web_test that are shared with ts_web_test which
-# uses Karma under the hood
-KARMA_GENERIC_WEB_TEST_ATTRS = dict(COMMON_WEB_TEST_ATTRS, **{
-    "bootstrap": attr.label_list(
-        doc = """JavaScript files to include *before* the module loader (require.js).
-        For example, you can include Reflect,js for TypeScript decorator metadata reflection,
-        or UMD bundles for third-party libraries.""",
-        allow_files = [".js"],
-    ),
-    "karma": attr.label(
-        doc = "karma binary label",
-        default = Label(_DEFAULT_KARMA_BIN),
-        executable = True,
-        cfg = "target",
-        allow_files = True,
-    ),
-    "static_files": attr.label_list(
-        doc = """Arbitrary files which are available to be served on request.
-        Files are served at:
-        `/base/<WORKSPACE_NAME>/<path-to-file>`, e.g.
-        `/base/npm_bazel_typescript/examples/testing/static_script.js`""",
-        allow_files = True,
-    ),
-    "runtime_deps": attr.label_list(
-        doc = """Dependencies which should be loaded after the module loader but before the srcs and deps.
-        These should be a list of targets which produce JavaScript such as `ts_library`.
-        The files will be loaded in the same order they are declared by that rule.""",
-        allow_files = True,
-        aspects = [sources_aspect],
-    ),
-    "_conf_tmpl": attr.label(
-        default = Label(_CONF_TMPL),
-        allow_single_file = True,
-    ),
-})
-
-# Attributes for karma_web_test that are specific to karma_web_test
-KARMA_WEB_TEST_ATTRS = dict(KARMA_GENERIC_WEB_TEST_ATTRS, **{
-    "config_file": attr.label(
-        doc = """User supplied Karma configuration file. Bazel will override
-        certain attributes of this configuration file. Attributes that are
-        overridden will be outputted to the test log.""",
-        allow_single_file = True,
-        aspects = [sources_aspect],
-    ),
-})
-
-# Helper function to convert a short path to a path that is
-# found in the MANIFEST file.
-def _short_path_to_manifest_path(ctx, short_path):
-    if short_path.startswith("../"):
-        return short_path[3:]
-    else:
-        return ctx.workspace_name + "/" + short_path
-
-# Write the AMD names shim bootstrap file
-def _write_amd_names_shim(ctx):
-    amd_names_shim = ctx.actions.declare_file(
-        "_%s.amd_names_shim.js" % ctx.label.name,
-        sibling = ctx.outputs.executable,
-    )
-    write_amd_names_shim(ctx.actions, amd_names_shim, ctx.attr.bootstrap)
-    return amd_names_shim
-
-# Generates the karma configuration file for the rule
-def _write_karma_config(ctx, files, amd_names_shim):
-    configuration = ctx.actions.declare_file(
-        "%s.conf.js" % ctx.label.name,
-        sibling = ctx.outputs.executable,
-    )
-
-    config_file = ""
-    if hasattr(ctx.file, "config_file"):
-        config_file = ctx.file.config_file
-        if hasattr(ctx.attr.config_file, "typescript"):
-            config_file = ctx.attr.config_file.typescript.es5_sources.to_list()[0]
-
-    # The files in the bootstrap attribute come before the require.js support.
-    # Note that due to frameworks = ['jasmine'], a few scripts will come before
-    # the bootstrap entries:
-    # jasmine-core/lib/jasmine-core/jasmine.js
-    # karma-jasmine/lib/boot.js
-    # karma-jasmine/lib/adapter.js
-    # This is desired so that the bootstrap entries can patch jasmine, as zone.js does.
-    bootstrap_entries = [
-        expand_path_into_runfiles(ctx, f.short_path)
-        for f in ctx.files.bootstrap
-    ]
-
-    # Explicitly list the requirejs library files here, rather than use
-    # `frameworks: ['requirejs']`
-    # so that we control the script order, and the bootstrap files come before
-    # require.js.
-    # That allows bootstrap files to have anonymous AMD modules, or to do some
-    # polyfilling before test libraries load.
-    # See https://github.com/karma-runner/karma/issues/699
-    # `NODE_MODULES/` is a prefix recogized by karma.conf.js to allow
-    # for a priority require of nested `@bazel/typescript/node_modules` before
-    # looking in root node_modules.
-    bootstrap_entries += [
-        "NODE_MODULES/requirejs/require.js",
-        "NODE_MODULES/karma-requirejs/lib/adapter.js",
-        "/".join([ctx.workspace_name, amd_names_shim.short_path]),
-    ]
-
-    # Next we load the "runtime_deps" which we expect to contain named AMD modules
-    # Thus they should come after the require.js script, but before any srcs or deps
-    runtime_files = []
-    for d in ctx.attr.runtime_deps:
-        if not hasattr(d, "typescript"):
-            # Workaround https://github.com/bazelbuild/rules_nodejs/issues/57
-            # We should allow any JS source as long as it yields something that
-            # can be loaded by require.js
-            fail("labels in runtime_deps must be created by ts_library")
-        for src in d.typescript.es5_sources.to_list():
-            runtime_files.append(expand_path_into_runfiles(ctx, src.short_path))
-
-    # Finally we load the user's srcs and deps
-    user_entries = [
-        expand_path_into_runfiles(ctx, f.short_path)
-        for f in files.to_list()
-    ]
-
-    # Expand static_files paths to runfiles for config
-    static_files = [
-        expand_path_into_runfiles(ctx, f.short_path)
-        for f in ctx.files.static_files
-    ]
-
-    # root-relative (runfiles) path to the directory containing karma.conf
-    config_segments = len(configuration.short_path.split("/"))
-
-    # configuration_env_vars are set using process.env()
-    env_vars = ""
-    for k in ctx.attr.configuration_env_vars:
-        if k in ctx.var.keys():
-            env_vars += "process.env[\"%s\"]=\"%s\";\n" % (k, ctx.var[k])
-
-    ctx.actions.expand_template(
-        output = configuration,
-        template = ctx.file._conf_tmpl,
-        substitutions = {
-            "TMPL_bootstrap_files": "\n".join(["      '%s'," % e for e in bootstrap_entries]),
-            "TMPL_config_file": expand_path_into_runfiles(ctx, config_file.short_path) if config_file else "",
-            "TMPL_env_vars": env_vars,
-            "TMPL_runfiles_path": "/".join([".."] * config_segments),
-            "TMPL_runtime_files": "\n".join(["      '%s'," % e for e in runtime_files]),
-            "TMPL_static_files": "\n".join(["      '%s'," % e for e in static_files]),
-            "TMPL_user_files": "\n".join(["      '%s'," % e for e in user_entries]),
-        },
-    )
-
-    return configuration
-
-def run_karma_web_test(ctx):
-    """Creates an action that can run karma.
-
-    This is also used by ts_web_test_rule.
-
-    Args:
-      ctx: Bazel rule execution context
-
-    Returns:
-      The runfiles for the generated action.
-    """
-    files = depset(ctx.files.srcs)
-    for d in ctx.attr.deps + ctx.attr.runtime_deps:
-        if hasattr(d, "node_sources"):
-            files = depset(transitive = [files, d.node_sources])
-        elif hasattr(d, "files"):
-            files = depset(transitive = [files, d.files])
-
-    amd_names_shim = _write_amd_names_shim(ctx)
-
-    configuration = _write_karma_config(ctx, files, amd_names_shim)
-
-    ctx.actions.write(
-        output = ctx.outputs.executable,
-        is_executable = True,
-        content = """#!/usr/bin/env bash
-# Immediately exit if any command fails.
-set -e
-
-if [ -e "$RUNFILES_MANIFEST_FILE" ]; then
-  while read line; do
-    declare -a PARTS=($line)
-    if [ "${{PARTS[0]}}" == "{TMPL_karma}" ]; then
-      readonly KARMA=${{PARTS[1]}}
-    elif [ "${{PARTS[0]}}" == "{TMPL_conf}" ]; then
-      readonly CONF=${{PARTS[1]}}
-    fi
-  done < $RUNFILES_MANIFEST_FILE
-else
-  readonly KARMA=../{TMPL_karma}
-  readonly CONF=../{TMPL_conf}
-fi
-
-export HOME=$(mktemp -d)
-
-# Print the karma version in the test log
-echo $($KARMA --version)
-
-ARGV=( "start" $CONF )
-
-# Detect that we are running as a test, by using well-known environment
-# variables. See go/test-encyclopedia
-# Note: in Bazel 0.14 and later, TEST_TMPDIR is set for both bazel test and bazel run
-# so we also check for the BUILD_WORKSPACE_DIRECTORY which is set only for bazel run
-if [[ ! -z "${{TEST_TMPDIR}}" && ! -n "${{BUILD_WORKSPACE_DIRECTORY}}" ]]; then
-  ARGV+=( "--single-run" )
-fi
-
-$KARMA ${{ARGV[@]}}
-""".format(
-            TMPL_workspace = ctx.workspace_name,
-            TMPL_karma = _short_path_to_manifest_path(ctx, ctx.executable.karma.short_path),
-            TMPL_conf = _short_path_to_manifest_path(ctx, configuration.short_path),
-        ),
-    )
-
-    config_sources = []
-    if hasattr(ctx.file, "config_file"):
-        if ctx.file.config_file:
-            config_sources = [ctx.file.config_file]
-        if hasattr(ctx.attr.config_file, "node_sources"):
-            config_sources = ctx.attr.config_file.node_sources.to_list()
-
-    runfiles = [
-        configuration,
-        amd_names_shim,
-    ]
-    runfiles += config_sources
-    runfiles += ctx.files.srcs
-    runfiles += ctx.files.deps
-    runfiles += ctx.files.runtime_deps
-    runfiles += ctx.files.bootstrap
-    runfiles += ctx.files.static_files
-    runfiles += ctx.files.data
-
-    return ctx.runfiles(
-        files = runfiles,
-        transitive_files = files,
-    ).merge(ctx.attr.karma[DefaultInfo].data_runfiles)
-
-def _karma_web_test_impl(ctx):
-    runfiles = run_karma_web_test(ctx)
-
-    return [DefaultInfo(
-        files = depset([ctx.outputs.executable]),
-        runfiles = runfiles,
-        executable = ctx.outputs.executable,
-    )]
-
-_karma_web_test = rule(
-    implementation = _karma_web_test_impl,
-    test = True,
-    executable = True,
-    attrs = KARMA_WEB_TEST_ATTRS,
-)
-
-def karma_web_test(
-        srcs = [],
-        deps = [],
-        data = [],
-        configuration_env_vars = [],
-        bootstrap = [],
-        runtime_deps = [],
-        static_files = [],
-        config_file = None,
-        tags = [],
-        **kwargs):
-    """Runs unit tests in a browser with Karma.
-
-    When executed under `bazel test`, this uses a headless browser for speed.
-    This is also because `bazel test` allows multiple targets to be tested together,
-    and we don't want to open a Chrome window on your machine for each one. Also,
-    under `bazel test` the test will execute and immediately terminate.
-
-    Running under `ibazel test` gives you a "watch mode" for your tests. The rule is
-    optimized for this case - the test runner server will stay running and just
-    re-serve the up-to-date JavaScript source bundle.
-
-    To debug a single test target, run it with `bazel run` instead. This will open a
-    browser window on your computer. Also you can use any other browser by opening
-    the URL printed when the test starts up. The test will remain running until you
-    cancel the `bazel run` command.
-
-    This rule will use your system Chrome by default. In the default case, your
-    environment must specify CHROME_BIN so that the rule will know which Chrome binary to run.
-    Other `browsers` and `customLaunchers` may be set using the a base Karma configuration
-    specified in the `config_file` attribute.
-
-    Args:
-      srcs: A list of JavaScript test files
-      deps: Other targets which produce JavaScript such as `ts_library`
-      data: Runtime dependencies
-      configuration_env_vars: Pass these configuration environment variables to the resulting binary.
-          Chooses a subset of the configuration environment variables (taken from ctx.var), which also
-          includes anything specified via the --define flag.
-          Note, this can lead to different outputs produced by this rule.
-      bootstrap: JavaScript files to include *before* the module loader (require.js).
-          For example, you can include Reflect,js for TypeScript decorator metadata reflection,
-          or UMD bundles for third-party libraries.
-      runtime_deps: Dependencies which should be loaded after the module loader but before the srcs and deps.
-          These should be a list of targets which produce JavaScript such as `ts_library`.
-          The files will be loaded in the same order they are declared by that rule.
-      static_files: Arbitrary files which are available to be served on request.
-          Files are served at:
-          `/base/<WORKSPACE_NAME>/<path-to-file>`, e.g.
-          `/base/npm_bazel_typescript/examples/testing/static_script.js`
-      config_file: User supplied Karma configuration file. Bazel will override
-          certain attributes of this configuration file. Attributes that are
-          overridden will be outputted to the test log.
-      tags: Standard Bazel tags, this macro adds tags for ibazel support
-      **kwargs: Passed through to `karma_web_test`
-    """
-
-    _karma_web_test(
-        srcs = srcs,
-        deps = deps,
-        data = data,
-        configuration_env_vars = configuration_env_vars,
-        bootstrap = bootstrap,
-        runtime_deps = runtime_deps,
-        static_files = static_files,
-        config_file = config_file,
-        tags = tags + [
-            # Users don't need to know that this tag is required to run under ibazel
-            "ibazel_notify_changes",
-        ],
-        **kwargs
-    )
-
-def karma_web_test_suite(
-        name,
-        browsers = ["@io_bazel_rules_webtesting//browsers:chromium-local"],
-        args = None,
-        browser_overrides = None,
-        config = None,
-        flaky = None,
-        local = None,
-        shard_count = None,
-        size = None,
-        tags = [],
-        test_suite_tags = None,
-        timeout = None,
-        visibility = None,
-        web_test_data = [],
-        wrapped_test_tags = None,
-        **remaining_keyword_args):
-    """Defines a test_suite of web_test targets that wrap a karma_web_test target.
-
-    This macro also accepts all parameters in karma_web_test. See karma_web_test docs
-    for details.
-
-    Args:
-      name: The base name of the test
-      browsers: A sequence of labels specifying the browsers to use.
-      args: Args for web_test targets generated by this extension.
-      browser_overrides: Dictionary; optional; default is an empty dictionary. A
-        dictionary mapping from browser names to browser-specific web_test
-        attributes, such as shard_count, flakiness, timeout, etc. For example:
-        {'//browsers:chrome-native': {'shard_count': 3, 'flaky': 1}
-         '//browsers:firefox-native': {'shard_count': 1, 'timeout': 100}}.
-      config: Label; optional; Configuration of web test features.
-      flaky: A boolean specifying that the test is flaky. If set, the test will
-        be retried up to 3 times (default: 0)
-      local: boolean; optional.
-      shard_count: The number of test shards to use per browser. (default: 1)
-      size: A string specifying the test size. (default: 'large')
-      tags: A list of test tag strings to apply to each generated web_test target.
-        This macro adds a couple for ibazel.
-      test_suite_tags: A list of tag strings for the generated test_suite.
-      timeout: A string specifying the test timeout (default: computed from size)
-      visibility: List of labels; optional.
-      web_test_data: Data dependencies for the web_test.
-      wrapped_test_tags: A list of test tag strings to use for the wrapped test
-      **remaining_keyword_args: Arguments for the wrapped test target.
-    """
-
-    # Check explicitly for None so that users can set this to the empty list
-    if wrapped_test_tags == None:
-        wrapped_test_tags = DEFAULT_WRAPPED_TEST_TAGS
-
-    size = size or "large"
-
-    wrapped_test_name = name + "_wrapped_test"
-
-    _karma_web_test(
-        name = wrapped_test_name,
-        args = args,
-        flaky = flaky,
-        local = local,
-        shard_count = shard_count,
-        size = size,
-        tags = wrapped_test_tags,
-        timeout = timeout,
-        visibility = ["//visibility:private"],
-        **remaining_keyword_args
-    )
-
-    web_test_suite(
-        name = name,
-        launcher = ":" + wrapped_test_name,
-        args = args,
-        browsers = browsers,
-        browser_overrides = browser_overrides,
-        config = config,
-        data = web_test_data,
-        flaky = flaky,
-        local = local,
-        shard_count = shard_count,
-        size = size,
-        tags = tags + [
-            # Users don't need to know that this tag is required to run under ibazel
-            "ibazel_notify_changes",
-        ],
-        test = wrapped_test_name,
-        test_suite_tags = test_suite_tags,
-        timeout = timeout,
-        visibility = visibility,
-    )
diff --git a/internal/karma/package.bzl b/internal/karma/package.bzl
deleted file mode 100644
index ed31fee..0000000
--- a/internal/karma/package.bzl
+++ /dev/null
@@ -1,46 +0,0 @@
-# Copyright 2018 The Bazel Authors. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Package file which defines npm_bazel_karma dependencies
-"""
-
-load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
-
-def rules_karma_dependencies():
-    """
-    Fetch our transitive dependencies.
-
-    If the user wants to get a different version of these, they can just fetch it
-    from their WORKSPACE before calling this function, or not call this function at all.
-    """
-
-    # TypeScript compiler runs on node.js runtime
-    _maybe(
-        http_archive,
-        name = "build_bazel_rules_nodejs",
-        urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/0.18.5/rules_nodejs-0.18.5.tar.gz"],
-        sha256 = "c8cd6a77433f7d3bb1f4ac87f15822aa102989f8e9eb1907ca0cad718573985b",
-    )
-
-    # ts_web_test depends on the web testing rules to provision browsers.
-    _maybe(
-        http_archive,
-        name = "io_bazel_rules_webtesting",
-        urls = ["https://github.com/bazelbuild/rules_webtesting/releases/download/0.3.0/rules_webtesting.tar.gz"],
-        sha256 = "1c0900547bdbe33d22aa258637dc560ce6042230e41e9ea9dad5d7d2fca8bc42",
-    )
-
-def _maybe(repo_rule, name, **kwargs):
-    if name not in native.existing_rules():
-        repo_rule(name = name, **kwargs)
diff --git a/internal/karma/package.json b/internal/karma/package.json
deleted file mode 100644
index 5f71978..0000000
--- a/internal/karma/package.json
+++ /dev/null
@@ -1,47 +0,0 @@
-{
-  "name": "@bazel/karma",
-  "description": "Karma rules for Bazel",
-  "homepage": "https://github.com/bazelbuild/rules_typescript",
-  "license": "Apache-2.0",
-  "version": "0.0.0-PLACEHOLDER",
-  "keywords": [
-    "karma",
-    "bazel"
-  ],
-  "main": "./index.js",
-  "typings": "./index.d.ts",
-  "bin": {
-    "karma": "./karma.js"
-  },
-  "dependencies": {
-    "jasmine-core": "2.8.0",
-    "karma": "^4.0.0",
-    "karma-chrome-launcher": "2.2.0",
-    "karma-firefox-launcher": "1.1.0",
-    "karma-jasmine": "1.1.1",
-    "karma-requirejs": "1.1.0",
-    "karma-sauce-launcher": "2.0.2",
-    "karma-sourcemap-loader": "0.3.7",
-    "requirejs": "2.3.5",
-    "semver": "5.6.0",
-    "tmp": "0.0.33"
-  },
-  "devDependencies": {
-    "@bazel/bazel": "~0.22.0",
-    "@types/node": "7.0.18",
-    "protobufjs": "5.0.3",
-    "semver": "5.6.0",
-    "source-map-support": "0.5.9",
-    "tsickle": "0.33.1",
-    "tsutils": "2.27.2",
-    "typescript": "~3.1.6",
-    "jasmine-core": "2.8.0"
-  },
-  "bazelWorkspaces": {
-    "npm_bazel_karma": {
-      "version": "0.0.0-PLACEHOLDER",
-      "compatVersion": "0.0.0-COMPAT_VERSION",
-      "rootPath": "."
-    }
-  }
-}
diff --git a/internal/karma/ts_web_test.bzl b/internal/karma/ts_web_test.bzl
deleted file mode 100644
index ab5329b..0000000
--- a/internal/karma/ts_web_test.bzl
+++ /dev/null
@@ -1,201 +0,0 @@
-# Copyright 2017 The Bazel Authors. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-"Unit testing in a browser"
-
-load("@io_bazel_rules_webtesting//web/internal:constants.bzl", "DEFAULT_WRAPPED_TEST_TAGS")
-load("@io_bazel_rules_webtesting//web:web.bzl", "web_test_suite")
-load(":karma_web_test.bzl", "KARMA_GENERIC_WEB_TEST_ATTRS", "run_karma_web_test")
-
-# Using generic karma_web_test attributes under the hood
-TS_WEB_TEST_ATTRS = dict(KARMA_GENERIC_WEB_TEST_ATTRS, **{})
-
-def _ts_web_test_impl(ctx):
-    # Using karma_web_test under the hood
-    runfiles = run_karma_web_test(ctx)
-
-    return [DefaultInfo(
-        files = depset([ctx.outputs.executable]),
-        runfiles = runfiles,
-        executable = ctx.outputs.executable,
-    )]
-
-_ts_web_test = rule(
-    implementation = _ts_web_test_impl,
-    test = True,
-    executable = True,
-    attrs = TS_WEB_TEST_ATTRS,
-)
-
-def ts_web_test(
-        srcs = [],
-        deps = [],
-        data = [],
-        configuration_env_vars = [],
-        bootstrap = [],
-        runtime_deps = [],
-        static_files = [],
-        tags = [],
-        **kwargs):
-    """Runs unit tests in a browser.
-
-    When executed under `bazel test`, this uses a headless browser for speed.
-    This is also because `bazel test` allows multiple targets to be tested together,
-    and we don't want to open a Chrome window on your machine for each one. Also,
-    under `bazel test` the test will execute and immediately terminate.
-
-    Running under `ibazel test` gives you a "watch mode" for your tests. The rule is
-    optimized for this case - the test runner server will stay running and just
-    re-serve the up-to-date JavaScript source bundle.
-
-    To debug a single test target, run it with `bazel run` instead. This will open a
-    browser window on your computer. Also you can use any other browser by opening
-    the URL printed when the test starts up. The test will remain running until you
-    cancel the `bazel run` command.
-
-    This rule will use your system Chrome. Your environment must specify CHROME_BIN
-    so that the rule will know which Chrome binary to run.
-
-    Currently this rule uses Karma as the test runner under the hood, but this is
-    an implementation detail. We might switch to another runner like Jest in the future.
-
-    Args:
-      srcs: A list of JavaScript test files
-      deps: Other targets which produce JavaScript such as `ts_library`
-      data: Runtime dependencies
-      configuration_env_vars: Pass these configuration environment variables to the resulting binary.
-          Chooses a subset of the configuration environment variables (taken from ctx.var), which also
-          includes anything specified via the --define flag.
-          Note, this can lead to different outputs produced by this rule.
-      bootstrap: JavaScript files to include *before* the module loader (require.js).
-          For example, you can include Reflect,js for TypeScript decorator metadata reflection,
-          or UMD bundles for third-party libraries.
-      runtime_deps: Dependencies which should be loaded after the module loader but before the srcs and deps.
-          These should be a list of targets which produce JavaScript such as `ts_library`.
-          The files will be loaded in the same order they are declared by that rule.
-      static_files: Arbitrary files which are available to be served on request.
-          Files are served at:
-          `/base/<WORKSPACE_NAME>/<path-to-file>`, e.g.
-          `/base/npm_bazel_typescript/examples/testing/static_script.js`
-      tags: Standard Bazel tags, this macro adds tags for ibazel support as well as
-          `browser:chromium-system` to allow for filtering on systems with no
-          system Chrome.
-      **kwargs: Passed through to `ts_web_test`
-    """
-
-    _ts_web_test(
-        srcs = srcs,
-        deps = deps,
-        data = data,
-        configuration_env_vars = configuration_env_vars,
-        bootstrap = bootstrap,
-        runtime_deps = runtime_deps,
-        static_files = static_files,
-        tags = tags + [
-            # Users don't need to know that this tag is required to run under ibazel
-            "ibazel_notify_changes",
-            # Always attach this label to allow filtering, eg. envs w/ no browser
-            "browser:chromium-system",
-        ],
-        **kwargs
-    )
-
-def ts_web_test_suite(
-        name,
-        browsers = ["@io_bazel_rules_webtesting//browsers:chromium-local"],
-        args = None,
-        browser_overrides = None,
-        config = None,
-        flaky = None,
-        local = None,
-        shard_count = None,
-        size = None,
-        tags = [],
-        test_suite_tags = None,
-        timeout = None,
-        visibility = None,
-        web_test_data = [],
-        wrapped_test_tags = None,
-        **remaining_keyword_args):
-    """Defines a test_suite of web_test targets that wrap a ts_web_test target.
-
-    This macro also accepts all parameters in ts_web_test. See ts_web_test docs for
-    details.
-
-    Args:
-      name: The base name of the test.
-      browsers: A sequence of labels specifying the browsers to use.
-      args: Args for web_test targets generated by this extension.
-      browser_overrides: Dictionary; optional; default is an empty dictionary. A
-        dictionary mapping from browser names to browser-specific web_test
-        attributes, such as shard_count, flakiness, timeout, etc. For example:
-        {'//browsers:chrome-native': {'shard_count': 3, 'flaky': 1}
-         '//browsers:firefox-native': {'shard_count': 1, 'timeout': 100}}.
-      config: Label; optional; Configuration of web test features.
-      flaky: A boolean specifying that the test is flaky. If set, the test will
-        be retried up to 3 times (default: 0)
-      local: boolean; optional.
-      shard_count: The number of test shards to use per browser. (default: 1)
-      size: A string specifying the test size. (default: 'large')
-      tags: A list of test tag strings to apply to each generated web_test_suite target.
-        This macro adds a couple for ibazel.
-      test_suite_tags: A list of tag strings for the generated test_suite.
-      timeout: A string specifying the test timeout (default: computed from size)
-      visibility: List of labels; optional.
-      web_test_data: Data dependencies for the web_test_suite.
-      wrapped_test_tags: A list of test tag strings to use for the wrapped test
-      **remaining_keyword_args: Arguments for the wrapped test target.
-    """
-
-    # Check explicitly for None so that users can set this to the empty list
-    if wrapped_test_tags == None:
-        wrapped_test_tags = DEFAULT_WRAPPED_TEST_TAGS
-
-    size = size or "large"
-
-    wrapped_test_name = name + "_wrapped_test"
-
-    _ts_web_test(
-        name = wrapped_test_name,
-        args = args,
-        flaky = flaky,
-        local = local,
-        shard_count = shard_count,
-        size = size,
-        tags = wrapped_test_tags,
-        timeout = timeout,
-        visibility = ["//visibility:private"],
-        **remaining_keyword_args
-    )
-
-    web_test_suite(
-        name = name,
-        launcher = ":" + wrapped_test_name,
-        args = args,
-        browsers = browsers,
-        browser_overrides = browser_overrides,
-        config = config,
-        data = web_test_data,
-        flaky = flaky,
-        local = local,
-        shard_count = shard_count,
-        size = size,
-        tags = tags + [
-            # Users don't need to know that this tag is required to run under ibazel
-            "ibazel_notify_changes",
-        ],
-        test = wrapped_test_name,
-        test_suite_tags = test_suite_tags,
-        timeout = timeout,
-        visibility = visibility,
-    )
diff --git a/internal/karma/tsconfig.json b/internal/karma/tsconfig.json
deleted file mode 100644
index bce2c5c..0000000
--- a/internal/karma/tsconfig.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
-  "compilerOptions": {
-    // Explicitly set types settings so typescript doesn't auto-discover types.
-    // If all types are discovered then all types need to be included as deps
-    // or typescript may error out with TS2688: Cannot find type definition file for 'foo'.
-    "types": ["node"]
- }
-}
-
diff --git a/internal/karma/web_test.bzl b/internal/karma/web_test.bzl
deleted file mode 100644
index 7ebb58b..0000000
--- a/internal/karma/web_test.bzl
+++ /dev/null
@@ -1,40 +0,0 @@
-# Copyright 2017 The Bazel Authors. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-"Common web_test attributes"
-
-load("@build_bazel_rules_nodejs//internal/common:sources_aspect.bzl", "sources_aspect")
-
-# Attributes shared by any web_test rule (ts_web_test, karma_web_test, protractor_web_test)
-COMMON_WEB_TEST_ATTRS = {
-    "srcs": attr.label_list(
-        doc = "A list of JavaScript test files",
-        allow_files = [".js"],
-    ),
-    "configuration_env_vars": attr.string_list(
-        doc = """Pass these configuration environment variables to the resulting binary.
-        Chooses a subset of the configuration environment variables (taken from ctx.var), which also
-        includes anything specified via the --define flag.
-        Note, this can lead to different outputs produced by this rule.""",
-        default = [],
-    ),
-    "data": attr.label_list(
-        doc = "Runtime dependencies",
-        allow_files = True,
-    ),
-    "deps": attr.label_list(
-        doc = "Other targets which produce JavaScript such as `ts_library`",
-        allow_files = True,
-        aspects = [sources_aspect],
-    ),
-}
diff --git a/internal/karma/yarn.lock b/internal/karma/yarn.lock
deleted file mode 100644
index 1d21df6..0000000
--- a/internal/karma/yarn.lock
+++ /dev/null
@@ -1,2320 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-"@bazel/bazel-darwin_x64@0.22.0":
-  version "0.22.0"
-  resolved "https://registry.yarnpkg.com/@bazel/bazel-darwin_x64/-/bazel-darwin_x64-0.22.0.tgz#a2bea5922dba9a32554a218ba4849a200115b248"
-  integrity sha512-LFxkyQgPATeB64z/1IvOWZhK+lc3JVHejbmdo96qB4lsoD8zselvOlgHvVXxlAjRxVZ9mlmXDvDRDyaXyyRdwA==
-
-"@bazel/bazel-linux_x64@0.22.0":
-  version "0.22.0"
-  resolved "https://registry.yarnpkg.com/@bazel/bazel-linux_x64/-/bazel-linux_x64-0.22.0.tgz#12e5884f2a7b7f3b62afbef9f8da4de0976f3bc8"
-  integrity sha512-xDs8cb2bbGZ9uvzYZOzCVrMBywzRhLj0J/t+py+FYZj+VO5B3wVg9eUf6nWWR0oJ2mzvToI9h31t2tNdqwy2kQ==
-
-"@bazel/bazel-win32_x64@0.22.0":
-  version "0.22.0"
-  resolved "https://registry.yarnpkg.com/@bazel/bazel-win32_x64/-/bazel-win32_x64-0.22.0.tgz#a8a65986639583a8cc7b018e001aedfdafe41b50"
-  integrity sha512-FbJaXVDoCLnpIFLnPHFkQdfriYPXfnfQNuf9EXMliERdRuoeBVbwEZfwcuArxZWNFus7bD8QiTj0XzKVWO+Wbw==
-
-"@bazel/bazel@~0.22.0":
-  version "0.22.0"
-  resolved "https://registry.yarnpkg.com/@bazel/bazel/-/bazel-0.22.0.tgz#feb0f2d82f9d169cb47951d95d55e512eda72bc9"
-  integrity sha512-uaXZsfCXOASBXzmge56akRIhJnKYdShn1X3AdEBzq2NNCf2llkc1H25gKGm4BfuWDBXRbXDMmcXup+fw39h+WQ==
-  optionalDependencies:
-    "@bazel/bazel-darwin_x64" "0.22.0"
-    "@bazel/bazel-linux_x64" "0.22.0"
-    "@bazel/bazel-win32_x64" "0.22.0"
-
-"@types/node@7.0.18":
-  version "7.0.18"
-  resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.18.tgz#cd67f27d3dc0cfb746f0bdd5e086c4c5d55be173"
-  integrity sha1-zWfyfT3Az7dG8L3V4IbExdVb4XM=
-
-abbrev@1:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
-  integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
-
-accepts@~1.3.4:
-  version "1.3.5"
-  resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2"
-  integrity sha1-63d99gEXI6OxTopywIBcjoZ0a9I=
-  dependencies:
-    mime-types "~2.1.18"
-    negotiator "0.6.1"
-
-adm-zip@~0.4.3:
-  version "0.4.13"
-  resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.13.tgz#597e2f8cc3672151e1307d3e95cddbc75672314a"
-  integrity sha512-fERNJX8sOXfel6qCBCMPvZLzENBEhZTzKqg6vrOW5pvoEaQuJhRU4ndTAh6lHOxn1I6jnz2NHra56ZODM751uw==
-
-after@0.8.2:
-  version "0.8.2"
-  resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f"
-  integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=
-
-agent-base@^4.1.0:
-  version "4.2.1"
-  resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9"
-  integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==
-  dependencies:
-    es6-promisify "^5.0.0"
-
-ansi-regex@^2.0.0:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
-  integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
-
-ansi-regex@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
-  integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
-
-anymatch@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
-  integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==
-  dependencies:
-    micromatch "^3.1.4"
-    normalize-path "^2.1.1"
-
-aproba@^1.0.3:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
-  integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
-
-are-we-there-yet@~1.1.2:
-  version "1.1.5"
-  resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
-  integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==
-  dependencies:
-    delegates "^1.0.0"
-    readable-stream "^2.0.6"
-
-arr-diff@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
-  integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
-
-arr-flatten@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
-  integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
-
-arr-union@^3.1.0:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
-  integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
-
-array-slice@^0.2.3:
-  version "0.2.3"
-  resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5"
-  integrity sha1-3Tz7gO15c6dRF82sabC5nshhhvU=
-
-array-unique@^0.2.1:
-  version "0.2.1"
-  resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
-  integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=
-
-array-unique@^0.3.2:
-  version "0.3.2"
-  resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
-  integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
-
-arraybuffer.slice@~0.0.7:
-  version "0.0.7"
-  resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675"
-  integrity sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==
-
-ascli@~1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/ascli/-/ascli-1.0.1.tgz#bcfa5974a62f18e81cabaeb49732ab4a88f906bc"
-  integrity sha1-vPpZdKYvGOgcq660lzKrSoj5Brw=
-  dependencies:
-    colour "~0.7.1"
-    optjs "~3.2.2"
-
-assign-symbols@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
-  integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
-
-async-each@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
-  integrity sha1-GdOGodntxufByF04iu28xW0zYC0=
-
-async-limiter@~1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8"
-  integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==
-
-async@^2.1.2:
-  version "2.6.1"
-  resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610"
-  integrity sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==
-  dependencies:
-    lodash "^4.17.10"
-
-atob@^2.1.1:
-  version "2.1.2"
-  resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
-  integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
-
-backo2@1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947"
-  integrity sha1-MasayLEpNjRj41s+u2n038+6eUc=
-
-balanced-match@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
-  integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
-
-base64-arraybuffer@0.1.5:
-  version "0.1.5"
-  resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8"
-  integrity sha1-c5JncZI7Whl0etZmqlzUv5xunOg=
-
-base64id@1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6"
-  integrity sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=
-
-base@^0.11.1:
-  version "0.11.2"
-  resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
-  integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
-  dependencies:
-    cache-base "^1.0.1"
-    class-utils "^0.3.5"
-    component-emitter "^1.2.1"
-    define-property "^1.0.0"
-    isobject "^3.0.1"
-    mixin-deep "^1.2.0"
-    pascalcase "^0.1.1"
-
-better-assert@~1.0.0:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522"
-  integrity sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=
-  dependencies:
-    callsite "1.0.0"
-
-binary-extensions@^1.0.0:
-  version "1.12.0"
-  resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.12.0.tgz#c2d780f53d45bba8317a8902d4ceeaf3a6385b14"
-  integrity sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==
-
-blob@0.0.5:
-  version "0.0.5"
-  resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683"
-  integrity sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==
-
-bluebird@^3.3.0:
-  version "3.5.3"
-  resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7"
-  integrity sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==
-
-body-parser@^1.16.1:
-  version "1.18.3"
-  resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.3.tgz#5b292198ffdd553b3a0f20ded0592b956955c8b4"
-  integrity sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=
-  dependencies:
-    bytes "3.0.0"
-    content-type "~1.0.4"
-    debug "2.6.9"
-    depd "~1.1.2"
-    http-errors "~1.6.3"
-    iconv-lite "0.4.23"
-    on-finished "~2.3.0"
-    qs "6.5.2"
-    raw-body "2.3.3"
-    type-is "~1.6.16"
-
-brace-expansion@^1.1.7:
-  version "1.1.11"
-  resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
-  integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
-  dependencies:
-    balanced-match "^1.0.0"
-    concat-map "0.0.1"
-
-braces@^0.1.2:
-  version "0.1.5"
-  resolved "https://registry.yarnpkg.com/braces/-/braces-0.1.5.tgz#c085711085291d8b75fdd74eab0f8597280711e6"
-  integrity sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=
-  dependencies:
-    expand-range "^0.1.0"
-
-braces@^2.3.0, braces@^2.3.1:
-  version "2.3.2"
-  resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
-  integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
-  dependencies:
-    arr-flatten "^1.1.0"
-    array-unique "^0.3.2"
-    extend-shallow "^2.0.1"
-    fill-range "^4.0.0"
-    isobject "^3.0.1"
-    repeat-element "^1.1.2"
-    snapdragon "^0.8.1"
-    snapdragon-node "^2.0.1"
-    split-string "^3.0.2"
-    to-regex "^3.0.1"
-
-buffer-alloc-unsafe@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0"
-  integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==
-
-buffer-alloc@^1.2.0:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec"
-  integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==
-  dependencies:
-    buffer-alloc-unsafe "^1.1.0"
-    buffer-fill "^1.0.0"
-
-buffer-fill@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c"
-  integrity sha1-+PeLdniYiO858gXNY39o5wISKyw=
-
-buffer-from@^1.0.0:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
-  integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
-
-bytebuffer@~5:
-  version "5.0.1"
-  resolved "https://registry.yarnpkg.com/bytebuffer/-/bytebuffer-5.0.1.tgz#582eea4b1a873b6d020a48d58df85f0bba6cfddd"
-  integrity sha1-WC7qSxqHO20CCkjVjfhfC7ps/d0=
-  dependencies:
-    long "~3"
-
-bytes@3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
-  integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=
-
-cache-base@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
-  integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
-  dependencies:
-    collection-visit "^1.0.0"
-    component-emitter "^1.2.1"
-    get-value "^2.0.6"
-    has-value "^1.0.0"
-    isobject "^3.0.1"
-    set-value "^2.0.0"
-    to-object-path "^0.3.0"
-    union-value "^1.0.0"
-    unset-value "^1.0.0"
-
-callsite@1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20"
-  integrity sha1-KAOY5dZkvXQDi28JBRU+borxvCA=
-
-camelcase@^2.0.1:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
-  integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=
-
-chokidar@^2.0.3:
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.4.tgz#356ff4e2b0e8e43e322d18a372460bbcf3accd26"
-  integrity sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==
-  dependencies:
-    anymatch "^2.0.0"
-    async-each "^1.0.0"
-    braces "^2.3.0"
-    glob-parent "^3.1.0"
-    inherits "^2.0.1"
-    is-binary-path "^1.0.0"
-    is-glob "^4.0.0"
-    lodash.debounce "^4.0.8"
-    normalize-path "^2.1.1"
-    path-is-absolute "^1.0.0"
-    readdirp "^2.0.0"
-    upath "^1.0.5"
-  optionalDependencies:
-    fsevents "^1.2.2"
-
-chownr@^1.1.1:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494"
-  integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==
-
-circular-json@^0.5.5:
-  version "0.5.9"
-  resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.5.9.tgz#932763ae88f4f7dead7a0d09c8a51a4743a53b1d"
-  integrity sha512-4ivwqHpIFJZBuhN3g/pEcdbnGUywkBblloGbkglyloVjjR3uT6tieI89MVOfbP2tHX5sgb01FuLgAOzebNlJNQ==
-
-class-utils@^0.3.5:
-  version "0.3.6"
-  resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
-  integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
-  dependencies:
-    arr-union "^3.1.0"
-    define-property "^0.2.5"
-    isobject "^3.0.0"
-    static-extend "^0.1.1"
-
-cliui@^3.0.3:
-  version "3.2.0"
-  resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
-  integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=
-  dependencies:
-    string-width "^1.0.1"
-    strip-ansi "^3.0.1"
-    wrap-ansi "^2.0.0"
-
-code-point-at@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
-  integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
-
-collection-visit@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
-  integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=
-  dependencies:
-    map-visit "^1.0.0"
-    object-visit "^1.0.0"
-
-colors@^1.1.0:
-  version "1.3.3"
-  resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.3.tgz#39e005d546afe01e01f9c4ca8fa50f686a01205d"
-  integrity sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==
-
-colour@~0.7.1:
-  version "0.7.1"
-  resolved "https://registry.yarnpkg.com/colour/-/colour-0.7.1.tgz#9cb169917ec5d12c0736d3e8685746df1cadf778"
-  integrity sha1-nLFpkX7F0SwHNtPoaFdG3xyt93g=
-
-combine-lists@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/combine-lists/-/combine-lists-1.0.1.tgz#458c07e09e0d900fc28b70a3fec2dacd1d2cb7f6"
-  integrity sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=
-  dependencies:
-    lodash "^4.5.0"
-
-component-bind@1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1"
-  integrity sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=
-
-component-emitter@1.2.1, component-emitter@^1.2.1:
-  version "1.2.1"
-  resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
-  integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=
-
-component-inherit@0.0.3:
-  version "0.0.3"
-  resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143"
-  integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=
-
-concat-map@0.0.1:
-  version "0.0.1"
-  resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
-  integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
-
-connect@^3.6.0:
-  version "3.6.6"
-  resolved "https://registry.yarnpkg.com/connect/-/connect-3.6.6.tgz#09eff6c55af7236e137135a72574858b6786f524"
-  integrity sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=
-  dependencies:
-    debug "2.6.9"
-    finalhandler "1.1.0"
-    parseurl "~1.3.2"
-    utils-merge "1.0.1"
-
-console-control-strings@^1.0.0, console-control-strings@~1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
-  integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
-
-content-type@~1.0.4:
-  version "1.0.4"
-  resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
-  integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
-
-cookie@0.3.1:
-  version "0.3.1"
-  resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
-  integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=
-
-copy-descriptor@^0.1.0:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
-  integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
-
-core-js@^2.2.0:
-  version "2.6.3"
-  resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.3.tgz#4b70938bdffdaf64931e66e2db158f0892289c49"
-  integrity sha512-l00tmFFZOBHtYhN4Cz7k32VM7vTn3rE2ANjQDxdEN6zmXZ/xq1jQuutnmHvMG1ZJ7xd72+TA5YpUK8wz3rWsfQ==
-
-core-js@~2.3.0:
-  version "2.3.0"
-  resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.3.0.tgz#fab83fbb0b2d8dc85fa636c4b9d34c75420c6d65"
-  integrity sha1-+rg/uwstjchfpjbEudNMdUIMbWU=
-
-core-util-is@~1.0.0:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
-  integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
-
-custom-event@~1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425"
-  integrity sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=
-
-date-format@^1.2.0:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/date-format/-/date-format-1.2.0.tgz#615e828e233dd1ab9bb9ae0950e0ceccfa6ecad8"
-  integrity sha1-YV6CjiM90aubua4JUODOzPpuytg=
-
-debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3:
-  version "2.6.9"
-  resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
-  integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
-  dependencies:
-    ms "2.0.0"
-
-debug@=3.1.0, debug@~3.1.0:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
-  integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
-  dependencies:
-    ms "2.0.0"
-
-debug@^3.1.0:
-  version "3.2.6"
-  resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
-  integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
-  dependencies:
-    ms "^2.1.1"
-
-decamelize@^1.1.1:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
-  integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
-
-decode-uri-component@^0.2.0:
-  version "0.2.0"
-  resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
-  integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
-
-deep-extend@^0.6.0:
-  version "0.6.0"
-  resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
-  integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
-
-define-property@^0.2.5:
-  version "0.2.5"
-  resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
-  integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=
-  dependencies:
-    is-descriptor "^0.1.0"
-
-define-property@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
-  integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY=
-  dependencies:
-    is-descriptor "^1.0.0"
-
-define-property@^2.0.2:
-  version "2.0.2"
-  resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
-  integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
-  dependencies:
-    is-descriptor "^1.0.2"
-    isobject "^3.0.1"
-
-delegates@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
-  integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
-
-depd@~1.1.2:
-  version "1.1.2"
-  resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
-  integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
-
-detect-libc@^1.0.2:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
-  integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
-
-di@^0.0.1:
-  version "0.0.1"
-  resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c"
-  integrity sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=
-
-dom-serialize@^2.2.0:
-  version "2.2.1"
-  resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b"
-  integrity sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=
-  dependencies:
-    custom-event "~1.0.0"
-    ent "~2.2.0"
-    extend "^3.0.0"
-    void-elements "^2.0.0"
-
-ee-first@1.1.1:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
-  integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
-
-encodeurl@~1.0.1:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
-  integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
-
-engine.io-client@~3.2.0:
-  version "3.2.1"
-  resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.2.1.tgz#6f54c0475de487158a1a7c77d10178708b6add36"
-  integrity sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==
-  dependencies:
-    component-emitter "1.2.1"
-    component-inherit "0.0.3"
-    debug "~3.1.0"
-    engine.io-parser "~2.1.1"
-    has-cors "1.1.0"
-    indexof "0.0.1"
-    parseqs "0.0.5"
-    parseuri "0.0.5"
-    ws "~3.3.1"
-    xmlhttprequest-ssl "~1.5.4"
-    yeast "0.1.2"
-
-engine.io-parser@~2.1.0, engine.io-parser@~2.1.1:
-  version "2.1.3"
-  resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.1.3.tgz#757ab970fbf2dfb32c7b74b033216d5739ef79a6"
-  integrity sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==
-  dependencies:
-    after "0.8.2"
-    arraybuffer.slice "~0.0.7"
-    base64-arraybuffer "0.1.5"
-    blob "0.0.5"
-    has-binary2 "~1.0.2"
-
-engine.io@~3.2.0:
-  version "3.2.1"
-  resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.2.1.tgz#b60281c35484a70ee0351ea0ebff83ec8c9522a2"
-  integrity sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==
-  dependencies:
-    accepts "~1.3.4"
-    base64id "1.0.0"
-    cookie "0.3.1"
-    debug "~3.1.0"
-    engine.io-parser "~2.1.0"
-    ws "~3.3.1"
-
-ent@~2.2.0:
-  version "2.2.0"
-  resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d"
-  integrity sha1-6WQhkyWiHQX0RGai9obtbOX13R0=
-
-es6-promise@^4.0.3:
-  version "4.2.5"
-  resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.5.tgz#da6d0d5692efb461e082c14817fe2427d8f5d054"
-  integrity sha512-n6wvpdE43VFtJq+lUDYDBFUwV8TZbuGXLV4D6wKafg13ldznKsyEvatubnmUe31zcvelSzOHF+XbaT+Bl9ObDg==
-
-es6-promise@~3.0.2:
-  version "3.0.2"
-  resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.0.2.tgz#010d5858423a5f118979665f46486a95c6ee2bb6"
-  integrity sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=
-
-es6-promisify@^5.0.0:
-  version "5.0.0"
-  resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203"
-  integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=
-  dependencies:
-    es6-promise "^4.0.3"
-
-escape-html@~1.0.3:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
-  integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
-
-eventemitter3@^3.0.0:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163"
-  integrity sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==
-
-expand-braces@^0.1.1:
-  version "0.1.2"
-  resolved "https://registry.yarnpkg.com/expand-braces/-/expand-braces-0.1.2.tgz#488b1d1d2451cb3d3a6b192cfc030f44c5855fea"
-  integrity sha1-SIsdHSRRyz06axks/AMPRMWFX+o=
-  dependencies:
-    array-slice "^0.2.3"
-    array-unique "^0.2.1"
-    braces "^0.1.2"
-
-expand-brackets@^2.1.4:
-  version "2.1.4"
-  resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
-  integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI=
-  dependencies:
-    debug "^2.3.3"
-    define-property "^0.2.5"
-    extend-shallow "^2.0.1"
-    posix-character-classes "^0.1.0"
-    regex-not "^1.0.0"
-    snapdragon "^0.8.1"
-    to-regex "^3.0.1"
-
-expand-range@^0.1.0:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-0.1.1.tgz#4cb8eda0993ca56fa4f41fc42f3cbb4ccadff044"
-  integrity sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=
-  dependencies:
-    is-number "^0.1.1"
-    repeat-string "^0.2.2"
-
-extend-shallow@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
-  integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=
-  dependencies:
-    is-extendable "^0.1.0"
-
-extend-shallow@^3.0.0, extend-shallow@^3.0.2:
-  version "3.0.2"
-  resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
-  integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
-  dependencies:
-    assign-symbols "^1.0.0"
-    is-extendable "^1.0.1"
-
-extend@^3.0.0:
-  version "3.0.2"
-  resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
-  integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
-
-extglob@^2.0.4:
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
-  integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
-  dependencies:
-    array-unique "^0.3.2"
-    define-property "^1.0.0"
-    expand-brackets "^2.1.4"
-    extend-shallow "^2.0.1"
-    fragment-cache "^0.2.1"
-    regex-not "^1.0.0"
-    snapdragon "^0.8.1"
-    to-regex "^3.0.1"
-
-fill-range@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
-  integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=
-  dependencies:
-    extend-shallow "^2.0.1"
-    is-number "^3.0.0"
-    repeat-string "^1.6.1"
-    to-regex-range "^2.1.0"
-
-finalhandler@1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5"
-  integrity sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=
-  dependencies:
-    debug "2.6.9"
-    encodeurl "~1.0.1"
-    escape-html "~1.0.3"
-    on-finished "~2.3.0"
-    parseurl "~1.3.2"
-    statuses "~1.3.1"
-    unpipe "~1.0.0"
-
-flatted@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.0.tgz#55122b6536ea496b4b44893ee2608141d10d9916"
-  integrity sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==
-
-follow-redirects@^1.0.0:
-  version "1.6.1"
-  resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.6.1.tgz#514973c44b5757368bad8bddfe52f81f015c94cb"
-  integrity sha512-t2JCjbzxQpWvbhts3l6SH1DKzSrx8a+SsaVf4h6bG4kOXUuPYS/kg2Lr4gQSb7eemaHqJkOThF1BGyjlUkO1GQ==
-  dependencies:
-    debug "=3.1.0"
-
-for-in@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
-  integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
-
-fragment-cache@^0.2.1:
-  version "0.2.1"
-  resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
-  integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=
-  dependencies:
-    map-cache "^0.2.2"
-
-fs-access@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/fs-access/-/fs-access-1.0.1.tgz#d6a87f262271cefebec30c553407fb995da8777a"
-  integrity sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=
-  dependencies:
-    null-check "^1.0.0"
-
-fs-minipass@^1.2.5:
-  version "1.2.5"
-  resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d"
-  integrity sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==
-  dependencies:
-    minipass "^2.2.1"
-
-fs.realpath@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
-  integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
-
-fsevents@^1.2.2:
-  version "1.2.7"
-  resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.7.tgz#4851b664a3783e52003b3c66eb0eee1074933aa4"
-  integrity sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==
-  dependencies:
-    nan "^2.9.2"
-    node-pre-gyp "^0.10.0"
-
-gauge@~2.7.3:
-  version "2.7.4"
-  resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
-  integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
-  dependencies:
-    aproba "^1.0.3"
-    console-control-strings "^1.0.0"
-    has-unicode "^2.0.0"
-    object-assign "^4.1.0"
-    signal-exit "^3.0.0"
-    string-width "^1.0.1"
-    strip-ansi "^3.0.1"
-    wide-align "^1.1.0"
-
-get-value@^2.0.3, get-value@^2.0.6:
-  version "2.0.6"
-  resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
-  integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
-
-glob-parent@^3.1.0:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae"
-  integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=
-  dependencies:
-    is-glob "^3.1.0"
-    path-dirname "^1.0.0"
-
-glob@^7.0.5, glob@^7.1.1, glob@^7.1.3:
-  version "7.1.3"
-  resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
-  integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==
-  dependencies:
-    fs.realpath "^1.0.0"
-    inflight "^1.0.4"
-    inherits "2"
-    minimatch "^3.0.4"
-    once "^1.3.0"
-    path-is-absolute "^1.0.0"
-
-graceful-fs@^4.1.11, graceful-fs@^4.1.2:
-  version "4.1.15"
-  resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00"
-  integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==
-
-has-binary2@~1.0.2:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d"
-  integrity sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==
-  dependencies:
-    isarray "2.0.1"
-
-has-cors@1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39"
-  integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=
-
-has-unicode@^2.0.0:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
-  integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
-
-has-value@^0.3.1:
-  version "0.3.1"
-  resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
-  integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=
-  dependencies:
-    get-value "^2.0.3"
-    has-values "^0.1.4"
-    isobject "^2.0.0"
-
-has-value@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
-  integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=
-  dependencies:
-    get-value "^2.0.6"
-    has-values "^1.0.0"
-    isobject "^3.0.0"
-
-has-values@^0.1.4:
-  version "0.1.4"
-  resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
-  integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E=
-
-has-values@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
-  integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=
-  dependencies:
-    is-number "^3.0.0"
-    kind-of "^4.0.0"
-
-http-errors@1.6.3, http-errors@~1.6.3:
-  version "1.6.3"
-  resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d"
-  integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=
-  dependencies:
-    depd "~1.1.2"
-    inherits "2.0.3"
-    setprototypeof "1.1.0"
-    statuses ">= 1.4.0 < 2"
-
-http-proxy@^1.13.0:
-  version "1.17.0"
-  resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.17.0.tgz#7ad38494658f84605e2f6db4436df410f4e5be9a"
-  integrity sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==
-  dependencies:
-    eventemitter3 "^3.0.0"
-    follow-redirects "^1.0.0"
-    requires-port "^1.0.0"
-
-https-proxy-agent@^2.2.1:
-  version "2.2.1"
-  resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0"
-  integrity sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==
-  dependencies:
-    agent-base "^4.1.0"
-    debug "^3.1.0"
-
-iconv-lite@0.4.23:
-  version "0.4.23"
-  resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63"
-  integrity sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==
-  dependencies:
-    safer-buffer ">= 2.1.2 < 3"
-
-iconv-lite@^0.4.4:
-  version "0.4.24"
-  resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
-  integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
-  dependencies:
-    safer-buffer ">= 2.1.2 < 3"
-
-ignore-walk@^3.0.1:
-  version "3.0.1"
-  resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8"
-  integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==
-  dependencies:
-    minimatch "^3.0.4"
-
-immediate@~3.0.5:
-  version "3.0.6"
-  resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b"
-  integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=
-
-indexof@0.0.1:
-  version "0.0.1"
-  resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
-  integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=
-
-inflight@^1.0.4:
-  version "1.0.6"
-  resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
-  integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
-  dependencies:
-    once "^1.3.0"
-    wrappy "1"
-
-inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@~2.0.1, inherits@~2.0.3:
-  version "2.0.3"
-  resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
-  integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
-
-ini@~1.3.0:
-  version "1.3.5"
-  resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
-  integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
-
-invert-kv@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
-  integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY=
-
-is-accessor-descriptor@^0.1.6:
-  version "0.1.6"
-  resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
-  integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=
-  dependencies:
-    kind-of "^3.0.2"
-
-is-accessor-descriptor@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
-  integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
-  dependencies:
-    kind-of "^6.0.0"
-
-is-binary-path@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
-  integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=
-  dependencies:
-    binary-extensions "^1.0.0"
-
-is-buffer@^1.1.5:
-  version "1.1.6"
-  resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
-  integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
-
-is-data-descriptor@^0.1.4:
-  version "0.1.4"
-  resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
-  integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=
-  dependencies:
-    kind-of "^3.0.2"
-
-is-data-descriptor@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
-  integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
-  dependencies:
-    kind-of "^6.0.0"
-
-is-descriptor@^0.1.0:
-  version "0.1.6"
-  resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
-  integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
-  dependencies:
-    is-accessor-descriptor "^0.1.6"
-    is-data-descriptor "^0.1.4"
-    kind-of "^5.0.0"
-
-is-descriptor@^1.0.0, is-descriptor@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
-  integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
-  dependencies:
-    is-accessor-descriptor "^1.0.0"
-    is-data-descriptor "^1.0.0"
-    kind-of "^6.0.2"
-
-is-extendable@^0.1.0, is-extendable@^0.1.1:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
-  integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
-
-is-extendable@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
-  integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
-  dependencies:
-    is-plain-object "^2.0.4"
-
-is-extglob@^2.1.0, is-extglob@^2.1.1:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
-  integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
-
-is-fullwidth-code-point@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
-  integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
-  dependencies:
-    number-is-nan "^1.0.0"
-
-is-fullwidth-code-point@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
-  integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
-
-is-glob@^3.1.0:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
-  integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=
-  dependencies:
-    is-extglob "^2.1.0"
-
-is-glob@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0"
-  integrity sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=
-  dependencies:
-    is-extglob "^2.1.1"
-
-is-number@^0.1.1:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/is-number/-/is-number-0.1.1.tgz#69a7af116963d47206ec9bd9b48a14216f1e3806"
-  integrity sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=
-
-is-number@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
-  integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=
-  dependencies:
-    kind-of "^3.0.2"
-
-is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4:
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
-  integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
-  dependencies:
-    isobject "^3.0.1"
-
-is-windows@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
-  integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
-
-isarray@1.0.0, isarray@~1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
-  integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
-
-isarray@2.0.1:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e"
-  integrity sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=
-
-isbinaryfile@^3.0.0:
-  version "3.0.3"
-  resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.3.tgz#5d6def3edebf6e8ca8cae9c30183a804b5f8be80"
-  integrity sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==
-  dependencies:
-    buffer-alloc "^1.2.0"
-
-isexe@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
-  integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
-
-isobject@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
-  integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
-  dependencies:
-    isarray "1.0.0"
-
-isobject@^3.0.0, isobject@^3.0.1:
-  version "3.0.1"
-  resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
-  integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
-
-jasmine-core@2.8.0:
-  version "2.8.0"
-  resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.8.0.tgz#bcc979ae1f9fd05701e45e52e65d3a5d63f1a24e"
-  integrity sha1-vMl5rh+f0FcB5F5S5l06XWPxok4=
-
-jszip@^3.1.3:
-  version "3.1.5"
-  resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.1.5.tgz#e3c2a6c6d706ac6e603314036d43cd40beefdf37"
-  integrity sha512-5W8NUaFRFRqTOL7ZDDrx5qWHJyBXy6velVudIzQUSoqAAYqzSh2Z7/m0Rf1QbmQJccegD0r+YZxBjzqoBiEeJQ==
-  dependencies:
-    core-js "~2.3.0"
-    es6-promise "~3.0.2"
-    lie "~3.1.0"
-    pako "~1.0.2"
-    readable-stream "~2.0.6"
-
-karma-chrome-launcher@2.2.0:
-  version "2.2.0"
-  resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz#cf1b9d07136cc18fe239327d24654c3dbc368acf"
-  integrity sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==
-  dependencies:
-    fs-access "^1.0.0"
-    which "^1.2.1"
-
-karma-firefox-launcher@1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/karma-firefox-launcher/-/karma-firefox-launcher-1.1.0.tgz#2c47030452f04531eb7d13d4fc7669630bb93339"
-  integrity sha512-LbZ5/XlIXLeQ3cqnCbYLn+rOVhuMIK9aZwlP6eOLGzWdo1UVp7t6CN3DP4SafiRLjexKwHeKHDm0c38Mtd3VxA==
-
-karma-jasmine@1.1.1:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-1.1.1.tgz#6fe840e75a11600c9d91e84b33c458e1c46a3529"
-  integrity sha1-b+hA51oRYAydkehLM8RY4cRqNSk=
-
-karma-requirejs@1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/karma-requirejs/-/karma-requirejs-1.1.0.tgz#fddae2cb87d7ebc16fb0222893564d7fee578798"
-  integrity sha1-/driy4fX68FvsCIok1ZNf+5Xh5g=
-
-karma-sauce-launcher@2.0.2:
-  version "2.0.2"
-  resolved "https://registry.yarnpkg.com/karma-sauce-launcher/-/karma-sauce-launcher-2.0.2.tgz#dbf98e70d86bf287b03a537cf637eb7aefa975c3"
-  integrity sha512-jLUFaJhHMcKpxFWUesyWYihzM5FvQiJsDwGcCtKeOy2lsWhkVw0V0Byqb1d+wU6myU1mribBtsIcub23HS4kWA==
-  dependencies:
-    sauce-connect-launcher "^1.2.4"
-    saucelabs "^1.5.0"
-    selenium-webdriver "^4.0.0-alpha.1"
-
-karma-sourcemap-loader@0.3.7:
-  version "0.3.7"
-  resolved "https://registry.yarnpkg.com/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz#91322c77f8f13d46fed062b042e1009d4c4505d8"
-  integrity sha1-kTIsd/jxPUb+0GKwQuEAnUxFBdg=
-  dependencies:
-    graceful-fs "^4.1.2"
-
-karma@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/karma/-/karma-4.0.0.tgz#f28e38a2b66243fde3f98e12a8dcaa2c6ff8ca9c"
-  integrity sha512-EFoFs3F6G0BcUGPNOn/YloGOb3h09hzTguyXlg6loHlKY76qbJikkcyPk43m2kfRF65TUGda/mig29QQtyhm1g==
-  dependencies:
-    bluebird "^3.3.0"
-    body-parser "^1.16.1"
-    chokidar "^2.0.3"
-    colors "^1.1.0"
-    combine-lists "^1.0.0"
-    connect "^3.6.0"
-    core-js "^2.2.0"
-    di "^0.0.1"
-    dom-serialize "^2.2.0"
-    expand-braces "^0.1.1"
-    flatted "^2.0.0"
-    glob "^7.1.1"
-    graceful-fs "^4.1.2"
-    http-proxy "^1.13.0"
-    isbinaryfile "^3.0.0"
-    lodash "^4.17.5"
-    log4js "^3.0.0"
-    mime "^2.3.1"
-    minimatch "^3.0.2"
-    optimist "^0.6.1"
-    qjobs "^1.1.4"
-    range-parser "^1.2.0"
-    rimraf "^2.6.0"
-    safe-buffer "^5.0.1"
-    socket.io "2.1.1"
-    source-map "^0.6.1"
-    tmp "0.0.33"
-    useragent "2.3.0"
-
-kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
-  version "3.2.2"
-  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
-  integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=
-  dependencies:
-    is-buffer "^1.1.5"
-
-kind-of@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
-  integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc=
-  dependencies:
-    is-buffer "^1.1.5"
-
-kind-of@^5.0.0:
-  version "5.1.0"
-  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
-  integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
-
-kind-of@^6.0.0, kind-of@^6.0.2:
-  version "6.0.2"
-  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051"
-  integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==
-
-lcid@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
-  integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=
-  dependencies:
-    invert-kv "^1.0.0"
-
-lie@~3.1.0:
-  version "3.1.1"
-  resolved "https://registry.yarnpkg.com/lie/-/lie-3.1.1.tgz#9a436b2cc7746ca59de7a41fa469b3efb76bd87e"
-  integrity sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=
-  dependencies:
-    immediate "~3.0.5"
-
-lodash.debounce@^4.0.8:
-  version "4.0.8"
-  resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
-  integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168=
-
-lodash@^4.16.6, lodash@^4.17.10, lodash@^4.17.5, lodash@^4.5.0:
-  version "4.17.11"
-  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
-  integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==
-
-log4js@^3.0.0:
-  version "3.0.6"
-  resolved "https://registry.yarnpkg.com/log4js/-/log4js-3.0.6.tgz#e6caced94967eeeb9ce399f9f8682a4b2b28c8ff"
-  integrity sha512-ezXZk6oPJCWL483zj64pNkMuY/NcRX5MPiB0zE6tjZM137aeusrOnW1ecxgF9cmwMWkBMhjteQxBPoZBh9FDxQ==
-  dependencies:
-    circular-json "^0.5.5"
-    date-format "^1.2.0"
-    debug "^3.1.0"
-    rfdc "^1.1.2"
-    streamroller "0.7.0"
-
-long@~3:
-  version "3.2.0"
-  resolved "https://registry.yarnpkg.com/long/-/long-3.2.0.tgz#d821b7138ca1cb581c172990ef14db200b5c474b"
-  integrity sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s=
-
-lru-cache@4.1.x:
-  version "4.1.5"
-  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
-  integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==
-  dependencies:
-    pseudomap "^1.0.2"
-    yallist "^2.1.2"
-
-map-cache@^0.2.2:
-  version "0.2.2"
-  resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
-  integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
-
-map-visit@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
-  integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=
-  dependencies:
-    object-visit "^1.0.0"
-
-media-typer@0.3.0:
-  version "0.3.0"
-  resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
-  integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
-
-micromatch@^3.1.10, micromatch@^3.1.4:
-  version "3.1.10"
-  resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
-  integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
-  dependencies:
-    arr-diff "^4.0.0"
-    array-unique "^0.3.2"
-    braces "^2.3.1"
-    define-property "^2.0.2"
-    extend-shallow "^3.0.2"
-    extglob "^2.0.4"
-    fragment-cache "^0.2.1"
-    kind-of "^6.0.2"
-    nanomatch "^1.2.9"
-    object.pick "^1.3.0"
-    regex-not "^1.0.0"
-    snapdragon "^0.8.1"
-    to-regex "^3.0.2"
-
-mime-db@~1.37.0:
-  version "1.37.0"
-  resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.37.0.tgz#0b6a0ce6fdbe9576e25f1f2d2fde8830dc0ad0d8"
-  integrity sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==
-
-mime-types@~2.1.18:
-  version "2.1.21"
-  resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.21.tgz#28995aa1ecb770742fe6ae7e58f9181c744b3f96"
-  integrity sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==
-  dependencies:
-    mime-db "~1.37.0"
-
-mime@^2.3.1:
-  version "2.4.0"
-  resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.0.tgz#e051fd881358585f3279df333fe694da0bcffdd6"
-  integrity sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==
-
-minimatch@^3.0.2, minimatch@^3.0.4:
-  version "3.0.4"
-  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
-  integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
-  dependencies:
-    brace-expansion "^1.1.7"
-
-minimist@0.0.8:
-  version "0.0.8"
-  resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
-  integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
-
-minimist@^1.2.0:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
-  integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
-
-minimist@~0.0.1:
-  version "0.0.10"
-  resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
-  integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=
-
-minipass@^2.2.1, minipass@^2.3.4:
-  version "2.3.5"
-  resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848"
-  integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==
-  dependencies:
-    safe-buffer "^5.1.2"
-    yallist "^3.0.0"
-
-minizlib@^1.1.1:
-  version "1.2.1"
-  resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614"
-  integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==
-  dependencies:
-    minipass "^2.2.1"
-
-mixin-deep@^1.2.0:
-  version "1.3.1"
-  resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe"
-  integrity sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==
-  dependencies:
-    for-in "^1.0.2"
-    is-extendable "^1.0.1"
-
-mkdirp@^0.5.0, mkdirp@^0.5.1:
-  version "0.5.1"
-  resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
-  integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
-  dependencies:
-    minimist "0.0.8"
-
-ms@2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
-  integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
-
-ms@^2.1.1:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
-  integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
-
-nan@^2.9.2:
-  version "2.12.1"
-  resolved "https://registry.yarnpkg.com/nan/-/nan-2.12.1.tgz#7b1aa193e9aa86057e3c7bbd0ac448e770925552"
-  integrity sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==
-
-nanomatch@^1.2.9:
-  version "1.2.13"
-  resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
-  integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
-  dependencies:
-    arr-diff "^4.0.0"
-    array-unique "^0.3.2"
-    define-property "^2.0.2"
-    extend-shallow "^3.0.2"
-    fragment-cache "^0.2.1"
-    is-windows "^1.0.2"
-    kind-of "^6.0.2"
-    object.pick "^1.3.0"
-    regex-not "^1.0.0"
-    snapdragon "^0.8.1"
-    to-regex "^3.0.1"
-
-needle@^2.2.1:
-  version "2.2.4"
-  resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e"
-  integrity sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA==
-  dependencies:
-    debug "^2.1.2"
-    iconv-lite "^0.4.4"
-    sax "^1.2.4"
-
-negotiator@0.6.1:
-  version "0.6.1"
-  resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9"
-  integrity sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=
-
-node-pre-gyp@^0.10.0:
-  version "0.10.3"
-  resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc"
-  integrity sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A==
-  dependencies:
-    detect-libc "^1.0.2"
-    mkdirp "^0.5.1"
-    needle "^2.2.1"
-    nopt "^4.0.1"
-    npm-packlist "^1.1.6"
-    npmlog "^4.0.2"
-    rc "^1.2.7"
-    rimraf "^2.6.1"
-    semver "^5.3.0"
-    tar "^4"
-
-nopt@^4.0.1:
-  version "4.0.1"
-  resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d"
-  integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=
-  dependencies:
-    abbrev "1"
-    osenv "^0.1.4"
-
-normalize-path@^2.1.1:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
-  integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=
-  dependencies:
-    remove-trailing-separator "^1.0.1"
-
-npm-bundled@^1.0.1:
-  version "1.0.5"
-  resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.5.tgz#3c1732b7ba936b3a10325aef616467c0ccbcc979"
-  integrity sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g==
-
-npm-packlist@^1.1.6:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.2.0.tgz#55a60e793e272f00862c7089274439a4cc31fc7f"
-  integrity sha512-7Mni4Z8Xkx0/oegoqlcao/JpPCPEMtUvsmB0q7mgvlMinykJLSRTYuFqoQLYgGY8biuxIeiHO+QNJKbCfljewQ==
-  dependencies:
-    ignore-walk "^3.0.1"
-    npm-bundled "^1.0.1"
-
-npmlog@^4.0.2:
-  version "4.1.2"
-  resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
-  integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
-  dependencies:
-    are-we-there-yet "~1.1.2"
-    console-control-strings "~1.1.0"
-    gauge "~2.7.3"
-    set-blocking "~2.0.0"
-
-null-check@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/null-check/-/null-check-1.0.0.tgz#977dffd7176012b9ec30d2a39db5cf72a0439edd"
-  integrity sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=
-
-number-is-nan@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
-  integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
-
-object-assign@^4.1.0:
-  version "4.1.1"
-  resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
-  integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
-
-object-component@0.0.3:
-  version "0.0.3"
-  resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291"
-  integrity sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=
-
-object-copy@^0.1.0:
-  version "0.1.0"
-  resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
-  integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw=
-  dependencies:
-    copy-descriptor "^0.1.0"
-    define-property "^0.2.5"
-    kind-of "^3.0.3"
-
-object-visit@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
-  integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=
-  dependencies:
-    isobject "^3.0.0"
-
-object.pick@^1.3.0:
-  version "1.3.0"
-  resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
-  integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=
-  dependencies:
-    isobject "^3.0.1"
-
-on-finished@~2.3.0:
-  version "2.3.0"
-  resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
-  integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=
-  dependencies:
-    ee-first "1.1.1"
-
-once@^1.3.0:
-  version "1.4.0"
-  resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
-  integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
-  dependencies:
-    wrappy "1"
-
-optimist@^0.6.1:
-  version "0.6.1"
-  resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
-  integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY=
-  dependencies:
-    minimist "~0.0.1"
-    wordwrap "~0.0.2"
-
-optjs@~3.2.2:
-  version "3.2.2"
-  resolved "https://registry.yarnpkg.com/optjs/-/optjs-3.2.2.tgz#69a6ce89c442a44403141ad2f9b370bd5bb6f4ee"
-  integrity sha1-aabOicRCpEQDFBrS+bNwvVu29O4=
-
-os-homedir@^1.0.0:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
-  integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
-
-os-locale@^1.4.0:
-  version "1.4.0"
-  resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9"
-  integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=
-  dependencies:
-    lcid "^1.0.0"
-
-os-tmpdir@^1.0.0, os-tmpdir@~1.0.1, os-tmpdir@~1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
-  integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
-
-osenv@^0.1.4:
-  version "0.1.5"
-  resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
-  integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==
-  dependencies:
-    os-homedir "^1.0.0"
-    os-tmpdir "^1.0.0"
-
-pako@~1.0.2:
-  version "1.0.8"
-  resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.8.tgz#6844890aab9c635af868ad5fecc62e8acbba3ea4"
-  integrity sha512-6i0HVbUfcKaTv+EG8ZTr75az7GFXcLYk9UyLEg7Notv/Ma+z/UG3TCoz6GiNeOrn1E/e63I0X/Hpw18jHOTUnA==
-
-parseqs@0.0.5:
-  version "0.0.5"
-  resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d"
-  integrity sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=
-  dependencies:
-    better-assert "~1.0.0"
-
-parseuri@0.0.5:
-  version "0.0.5"
-  resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a"
-  integrity sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=
-  dependencies:
-    better-assert "~1.0.0"
-
-parseurl@~1.3.2:
-  version "1.3.2"
-  resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3"
-  integrity sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=
-
-pascalcase@^0.1.1:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
-  integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
-
-path-dirname@^1.0.0:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
-  integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=
-
-path-is-absolute@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
-  integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
-
-posix-character-classes@^0.1.0:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
-  integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
-
-process-nextick-args@~1.0.6:
-  version "1.0.7"
-  resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
-  integrity sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=
-
-process-nextick-args@~2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
-  integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==
-
-protobufjs@5.0.3:
-  version "5.0.3"
-  resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-5.0.3.tgz#e4dfe9fb67c90b2630d15868249bcc4961467a17"
-  integrity sha512-55Kcx1MhPZX0zTbVosMQEO5R6/rikNXd9b6RQK4KSPcrSIIwoXTtebIczUrXlwaSrbz4x8XUVThGPob1n8I4QA==
-  dependencies:
-    ascli "~1"
-    bytebuffer "~5"
-    glob "^7.0.5"
-    yargs "^3.10.0"
-
-pseudomap@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
-  integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
-
-qjobs@^1.1.4:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071"
-  integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==
-
-qs@6.5.2:
-  version "6.5.2"
-  resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
-  integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
-
-range-parser@^1.2.0:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e"
-  integrity sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=
-
-raw-body@2.3.3:
-  version "2.3.3"
-  resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3"
-  integrity sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==
-  dependencies:
-    bytes "3.0.0"
-    http-errors "1.6.3"
-    iconv-lite "0.4.23"
-    unpipe "1.0.0"
-
-rc@^1.2.7:
-  version "1.2.8"
-  resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
-  integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
-  dependencies:
-    deep-extend "^0.6.0"
-    ini "~1.3.0"
-    minimist "^1.2.0"
-    strip-json-comments "~2.0.1"
-
-readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.3.0:
-  version "2.3.6"
-  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
-  integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
-  dependencies:
-    core-util-is "~1.0.0"
-    inherits "~2.0.3"
-    isarray "~1.0.0"
-    process-nextick-args "~2.0.0"
-    safe-buffer "~5.1.1"
-    string_decoder "~1.1.1"
-    util-deprecate "~1.0.1"
-
-readable-stream@~2.0.6:
-  version "2.0.6"
-  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e"
-  integrity sha1-j5A0HmilPMySh4jaz80Rs265t44=
-  dependencies:
-    core-util-is "~1.0.0"
-    inherits "~2.0.1"
-    isarray "~1.0.0"
-    process-nextick-args "~1.0.6"
-    string_decoder "~0.10.x"
-    util-deprecate "~1.0.1"
-
-readdirp@^2.0.0:
-  version "2.2.1"
-  resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525"
-  integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==
-  dependencies:
-    graceful-fs "^4.1.11"
-    micromatch "^3.1.10"
-    readable-stream "^2.0.2"
-
-regex-not@^1.0.0, regex-not@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
-  integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
-  dependencies:
-    extend-shallow "^3.0.2"
-    safe-regex "^1.1.0"
-
-remove-trailing-separator@^1.0.1:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
-  integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8=
-
-repeat-element@^1.1.2:
-  version "1.1.3"
-  resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce"
-  integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==
-
-repeat-string@^0.2.2:
-  version "0.2.2"
-  resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-0.2.2.tgz#c7a8d3236068362059a7e4651fc6884e8b1fb4ae"
-  integrity sha1-x6jTI2BoNiBZp+RlH8aITosftK4=
-
-repeat-string@^1.6.1:
-  version "1.6.1"
-  resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
-  integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
-
-requirejs@2.3.5:
-  version "2.3.5"
-  resolved "https://registry.yarnpkg.com/requirejs/-/requirejs-2.3.5.tgz#617b9acbbcb336540ef4914d790323a8d4b861b0"
-  integrity sha512-svnO+aNcR/an9Dpi44C7KSAy5fFGLtmPbaaCeQaklUz8BQhS64tWWIIlvEA5jrWICzlO/X9KSzSeXFnZdBu8nw==
-
-requires-port@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
-  integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=
-
-resolve-url@^0.2.1:
-  version "0.2.1"
-  resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
-  integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
-
-ret@~0.1.10:
-  version "0.1.15"
-  resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
-  integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
-
-rfdc@^1.1.2:
-  version "1.1.2"
-  resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.1.2.tgz#e6e72d74f5dc39de8f538f65e00c36c18018e349"
-  integrity sha512-92ktAgvZhBzYTIK0Mja9uen5q5J3NRVMoDkJL2VMwq6SXjVCgqvQeVP2XAaUY6HT+XpQYeLSjb3UoitBryKmdA==
-
-rimraf@^2.5.4, rimraf@^2.6.0, rimraf@^2.6.1:
-  version "2.6.3"
-  resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
-  integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
-  dependencies:
-    glob "^7.1.3"
-
-safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
-  version "5.1.2"
-  resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
-  integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
-
-safe-regex@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
-  integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4=
-  dependencies:
-    ret "~0.1.10"
-
-"safer-buffer@>= 2.1.2 < 3":
-  version "2.1.2"
-  resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
-  integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
-
-sauce-connect-launcher@^1.2.4:
-  version "1.2.4"
-  resolved "https://registry.yarnpkg.com/sauce-connect-launcher/-/sauce-connect-launcher-1.2.4.tgz#8d38f85242a9fbede1b2303b559f7e20c5609a1c"
-  integrity sha512-X2vfwulR6brUGiicXKxPm1GJ7dBEeP1II450Uv4bHGrcGOapZNgzJvn9aioea5IC5BPp/7qjKdE3xbbTBIVXMA==
-  dependencies:
-    adm-zip "~0.4.3"
-    async "^2.1.2"
-    https-proxy-agent "^2.2.1"
-    lodash "^4.16.6"
-    rimraf "^2.5.4"
-
-saucelabs@^1.5.0:
-  version "1.5.0"
-  resolved "https://registry.yarnpkg.com/saucelabs/-/saucelabs-1.5.0.tgz#9405a73c360d449b232839919a86c396d379fd9d"
-  integrity sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ==
-  dependencies:
-    https-proxy-agent "^2.2.1"
-
-sax@>=0.6.0, sax@^1.2.4:
-  version "1.2.4"
-  resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
-  integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
-
-selenium-webdriver@^4.0.0-alpha.1:
-  version "4.0.0-alpha.1"
-  resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-4.0.0-alpha.1.tgz#cc93415e21d2dc1dfd85dfc5f6b55f3ac53933b1"
-  integrity sha512-z88rdjHAv3jmTZ7KSGUkTvo4rGzcDGMq0oXWHNIDK96Gs31JKVdu9+FMtT4KBrVoibg8dUicJDok6GnqqttO5Q==
-  dependencies:
-    jszip "^3.1.3"
-    rimraf "^2.5.4"
-    tmp "0.0.30"
-    xml2js "^0.4.17"
-
-semver@5.6.0, semver@^5.3.0:
-  version "5.6.0"
-  resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004"
-  integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==
-
-set-blocking@~2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
-  integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
-
-set-value@^0.4.3:
-  version "0.4.3"
-  resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1"
-  integrity sha1-fbCPnT0i3H945Trzw79GZuzfzPE=
-  dependencies:
-    extend-shallow "^2.0.1"
-    is-extendable "^0.1.1"
-    is-plain-object "^2.0.1"
-    to-object-path "^0.3.0"
-
-set-value@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274"
-  integrity sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==
-  dependencies:
-    extend-shallow "^2.0.1"
-    is-extendable "^0.1.1"
-    is-plain-object "^2.0.3"
-    split-string "^3.0.1"
-
-setprototypeof@1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
-  integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==
-
-signal-exit@^3.0.0:
-  version "3.0.2"
-  resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
-  integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
-
-snapdragon-node@^2.0.1:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
-  integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
-  dependencies:
-    define-property "^1.0.0"
-    isobject "^3.0.0"
-    snapdragon-util "^3.0.1"
-
-snapdragon-util@^3.0.1:
-  version "3.0.1"
-  resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
-  integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
-  dependencies:
-    kind-of "^3.2.0"
-
-snapdragon@^0.8.1:
-  version "0.8.2"
-  resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
-  integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
-  dependencies:
-    base "^0.11.1"
-    debug "^2.2.0"
-    define-property "^0.2.5"
-    extend-shallow "^2.0.1"
-    map-cache "^0.2.2"
-    source-map "^0.5.6"
-    source-map-resolve "^0.5.0"
-    use "^3.1.0"
-
-socket.io-adapter@~1.1.0:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz#2a805e8a14d6372124dd9159ad4502f8cb07f06b"
-  integrity sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=
-
-socket.io-client@2.1.1:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.1.1.tgz#dcb38103436ab4578ddb026638ae2f21b623671f"
-  integrity sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==
-  dependencies:
-    backo2 "1.0.2"
-    base64-arraybuffer "0.1.5"
-    component-bind "1.0.0"
-    component-emitter "1.2.1"
-    debug "~3.1.0"
-    engine.io-client "~3.2.0"
-    has-binary2 "~1.0.2"
-    has-cors "1.1.0"
-    indexof "0.0.1"
-    object-component "0.0.3"
-    parseqs "0.0.5"
-    parseuri "0.0.5"
-    socket.io-parser "~3.2.0"
-    to-array "0.1.4"
-
-socket.io-parser@~3.2.0:
-  version "3.2.0"
-  resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.2.0.tgz#e7c6228b6aa1f814e6148aea325b51aa9499e077"
-  integrity sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==
-  dependencies:
-    component-emitter "1.2.1"
-    debug "~3.1.0"
-    isarray "2.0.1"
-
-socket.io@2.1.1:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.1.1.tgz#a069c5feabee3e6b214a75b40ce0652e1cfb9980"
-  integrity sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==
-  dependencies:
-    debug "~3.1.0"
-    engine.io "~3.2.0"
-    has-binary2 "~1.0.2"
-    socket.io-adapter "~1.1.0"
-    socket.io-client "2.1.1"
-    socket.io-parser "~3.2.0"
-
-source-map-resolve@^0.5.0:
-  version "0.5.2"
-  resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259"
-  integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==
-  dependencies:
-    atob "^2.1.1"
-    decode-uri-component "^0.2.0"
-    resolve-url "^0.2.1"
-    source-map-url "^0.4.0"
-    urix "^0.1.0"
-
-source-map-support@0.5.9:
-  version "0.5.9"
-  resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f"
-  integrity sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==
-  dependencies:
-    buffer-from "^1.0.0"
-    source-map "^0.6.0"
-
-source-map-url@^0.4.0:
-  version "0.4.0"
-  resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
-  integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=
-
-source-map@^0.5.6:
-  version "0.5.7"
-  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
-  integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
-
-source-map@^0.6.0, source-map@^0.6.1:
-  version "0.6.1"
-  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
-  integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
-
-source-map@^0.7.3:
-  version "0.7.3"
-  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
-  integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
-
-split-string@^3.0.1, split-string@^3.0.2:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
-  integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
-  dependencies:
-    extend-shallow "^3.0.0"
-
-static-extend@^0.1.1:
-  version "0.1.2"
-  resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
-  integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=
-  dependencies:
-    define-property "^0.2.5"
-    object-copy "^0.1.0"
-
-"statuses@>= 1.4.0 < 2":
-  version "1.5.0"
-  resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
-  integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
-
-statuses@~1.3.1:
-  version "1.3.1"
-  resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e"
-  integrity sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=
-
-streamroller@0.7.0:
-  version "0.7.0"
-  resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-0.7.0.tgz#a1d1b7cf83d39afb0d63049a5acbf93493bdf64b"
-  integrity sha512-WREzfy0r0zUqp3lGO096wRuUp7ho1X6uo/7DJfTlEi0Iv/4gT7YHqXDjKC2ioVGBZtE8QzsQD9nx1nIuoZ57jQ==
-  dependencies:
-    date-format "^1.2.0"
-    debug "^3.1.0"
-    mkdirp "^0.5.1"
-    readable-stream "^2.3.0"
-
-string-width@^1.0.1:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
-  integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
-  dependencies:
-    code-point-at "^1.0.0"
-    is-fullwidth-code-point "^1.0.0"
-    strip-ansi "^3.0.0"
-
-"string-width@^1.0.2 || 2":
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
-  integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
-  dependencies:
-    is-fullwidth-code-point "^2.0.0"
-    strip-ansi "^4.0.0"
-
-string_decoder@~0.10.x:
-  version "0.10.31"
-  resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
-  integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=
-
-string_decoder@~1.1.1:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
-  integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
-  dependencies:
-    safe-buffer "~5.1.0"
-
-strip-ansi@^3.0.0, strip-ansi@^3.0.1:
-  version "3.0.1"
-  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
-  integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
-  dependencies:
-    ansi-regex "^2.0.0"
-
-strip-ansi@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
-  integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
-  dependencies:
-    ansi-regex "^3.0.0"
-
-strip-json-comments@~2.0.1:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
-  integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
-
-tar@^4:
-  version "4.4.8"
-  resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d"
-  integrity sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==
-  dependencies:
-    chownr "^1.1.1"
-    fs-minipass "^1.2.5"
-    minipass "^2.3.4"
-    minizlib "^1.1.1"
-    mkdirp "^0.5.0"
-    safe-buffer "^5.1.2"
-    yallist "^3.0.2"
-
-tmp@0.0.30:
-  version "0.0.30"
-  resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.30.tgz#72419d4a8be7d6ce75148fd8b324e593a711c2ed"
-  integrity sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=
-  dependencies:
-    os-tmpdir "~1.0.1"
-
-tmp@0.0.33, tmp@0.0.x:
-  version "0.0.33"
-  resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
-  integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
-  dependencies:
-    os-tmpdir "~1.0.2"
-
-to-array@0.1.4:
-  version "0.1.4"
-  resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890"
-  integrity sha1-F+bBH3PdTz10zaek/zI46a2b+JA=
-
-to-object-path@^0.3.0:
-  version "0.3.0"
-  resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
-  integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=
-  dependencies:
-    kind-of "^3.0.2"
-
-to-regex-range@^2.1.0:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
-  integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=
-  dependencies:
-    is-number "^3.0.0"
-    repeat-string "^1.6.1"
-
-to-regex@^3.0.1, to-regex@^3.0.2:
-  version "3.0.2"
-  resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
-  integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
-  dependencies:
-    define-property "^2.0.2"
-    extend-shallow "^3.0.2"
-    regex-not "^1.0.2"
-    safe-regex "^1.1.0"
-
-tsickle@0.33.1:
-  version "0.33.1"
-  resolved "https://registry.yarnpkg.com/tsickle/-/tsickle-0.33.1.tgz#eee4ebabeda3bcd8afc32cee34c822cbe3e839ec"
-  integrity sha512-SpW2G3PvDGs4a5sMXPlWnCWHWRviWjSlI3U0734e3fU3U39VAE0NPr8M3W1cuL/OU/YXheYipGeEwtIJ5k0NHQ==
-  dependencies:
-    minimist "^1.2.0"
-    mkdirp "^0.5.1"
-    source-map "^0.7.3"
-
-tslib@^1.8.1:
-  version "1.9.3"
-  resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286"
-  integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==
-
-tsutils@2.27.2:
-  version "2.27.2"
-  resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.27.2.tgz#60ba88a23d6f785ec4b89c6e8179cac9b431f1c7"
-  integrity sha512-qf6rmT84TFMuxAKez2pIfR8UCai49iQsfB7YWVjV1bKpy/d0PWT5rEOSM6La9PiHZ0k1RRZQiwVdVJfQ3BPHgg==
-  dependencies:
-    tslib "^1.8.1"
-
-type-is@~1.6.16:
-  version "1.6.16"
-  resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194"
-  integrity sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==
-  dependencies:
-    media-typer "0.3.0"
-    mime-types "~2.1.18"
-
-typescript@~3.1.6:
-  version "3.1.6"
-  resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.1.6.tgz#b6543a83cfc8c2befb3f4c8fba6896f5b0c9be68"
-  integrity sha512-tDMYfVtvpb96msS1lDX9MEdHrW4yOuZ4Kdc4Him9oU796XldPYF/t2+uKoX0BBa0hXXwDlqYQbXY5Rzjzc5hBA==
-
-ultron@~1.1.0:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c"
-  integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==
-
-union-value@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4"
-  integrity sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=
-  dependencies:
-    arr-union "^3.1.0"
-    get-value "^2.0.6"
-    is-extendable "^0.1.1"
-    set-value "^0.4.3"
-
-unpipe@1.0.0, unpipe@~1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
-  integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
-
-unset-value@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
-  integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=
-  dependencies:
-    has-value "^0.3.1"
-    isobject "^3.0.0"
-
-upath@^1.0.5:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd"
-  integrity sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==
-
-urix@^0.1.0:
-  version "0.1.0"
-  resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
-  integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
-
-use@^3.1.0:
-  version "3.1.1"
-  resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
-  integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
-
-useragent@2.3.0:
-  version "2.3.0"
-  resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.3.0.tgz#217f943ad540cb2128658ab23fc960f6a88c9972"
-  integrity sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==
-  dependencies:
-    lru-cache "4.1.x"
-    tmp "0.0.x"
-
-util-deprecate@~1.0.1:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
-  integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
-
-utils-merge@1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
-  integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=
-
-void-elements@^2.0.0:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec"
-  integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=
-
-which@^1.2.1:
-  version "1.3.1"
-  resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
-  integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
-  dependencies:
-    isexe "^2.0.0"
-
-wide-align@^1.1.0:
-  version "1.1.3"
-  resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
-  integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==
-  dependencies:
-    string-width "^1.0.2 || 2"
-
-window-size@^0.1.4:
-  version "0.1.4"
-  resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876"
-  integrity sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=
-
-wordwrap@~0.0.2:
-  version "0.0.3"
-  resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
-  integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc=
-
-wrap-ansi@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
-  integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=
-  dependencies:
-    string-width "^1.0.1"
-    strip-ansi "^3.0.1"
-
-wrappy@1:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
-  integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
-
-ws@~3.3.1:
-  version "3.3.3"
-  resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2"
-  integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==
-  dependencies:
-    async-limiter "~1.0.0"
-    safe-buffer "~5.1.0"
-    ultron "~1.1.0"
-
-xml2js@^0.4.17:
-  version "0.4.19"
-  resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7"
-  integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==
-  dependencies:
-    sax ">=0.6.0"
-    xmlbuilder "~9.0.1"
-
-xmlbuilder@~9.0.1:
-  version "9.0.7"
-  resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d"
-  integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=
-
-xmlhttprequest-ssl@~1.5.4:
-  version "1.5.5"
-  resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e"
-  integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=
-
-y18n@^3.2.0:
-  version "3.2.1"
-  resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
-  integrity sha1-bRX7qITAhnnA136I53WegR4H+kE=
-
-yallist@^2.1.2:
-  version "2.1.2"
-  resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
-  integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=
-
-yallist@^3.0.0, yallist@^3.0.2:
-  version "3.0.3"
-  resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9"
-  integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==
-
-yargs@^3.10.0:
-  version "3.32.0"
-  resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.32.0.tgz#03088e9ebf9e756b69751611d2a5ef591482c995"
-  integrity sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=
-  dependencies:
-    camelcase "^2.0.1"
-    cliui "^3.0.3"
-    decamelize "^1.1.1"
-    os-locale "^1.4.0"
-    string-width "^1.0.1"
-    window-size "^0.1.4"
-    y18n "^3.2.0"
-
-yeast@0.1.2:
-  version "0.1.2"
-  resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419"
-  integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk=
diff --git a/internal/protobufjs/BUILD.bazel b/internal/protobufjs/BUILD.bazel
deleted file mode 100644
index ae06e17..0000000
--- a/internal/protobufjs/BUILD.bazel
+++ /dev/null
@@ -1,69 +0,0 @@
-# Copyright 2018 The Bazel Authors. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-load("@build_bazel_rules_nodejs//:defs.bzl", "nodejs_binary")
-
-package(default_visibility = ["//visibility:public"])
-
-exports_files([
-    "node_modules/protobufjs/dist/minimal/protobuf.min.js",
-    # Exported to be consumed for generating skydoc.
-    "ts_proto_library.bzl",
-])
-
-nodejs_binary(
-    name = "pbjs",
-    data = [
-        "@build_bazel_rules_typescript_protobufs_compiletime_deps//protobufjs",
-        # these deps are needed even tho they are not automatic transitive deps of
-        # protobufjs since if they are not in the runfiles then protobufjs attempts to
-        # run `npm install` at runtime to get thhem which fails as it tries to access
-        # the npm cache outside of the sandbox
-        "@build_bazel_rules_typescript_protobufs_compiletime_deps//semver",
-        "@build_bazel_rules_typescript_protobufs_compiletime_deps//chalk",
-        "@build_bazel_rules_typescript_protobufs_compiletime_deps//glob",
-        "@build_bazel_rules_typescript_protobufs_compiletime_deps//jsdoc",
-        "@build_bazel_rules_typescript_protobufs_compiletime_deps//minimist",
-        "@build_bazel_rules_typescript_protobufs_compiletime_deps//tmp",
-        "@build_bazel_rules_typescript_protobufs_compiletime_deps//uglify-js",
-        "@build_bazel_rules_typescript_protobufs_compiletime_deps//espree",
-        "@build_bazel_rules_typescript_protobufs_compiletime_deps//escodegen",
-        "@build_bazel_rules_typescript_protobufs_compiletime_deps//estraverse",
-    ],
-    entry_point = "protobufjs/bin/pbjs",
-    install_source_map_support = False,
-)
-
-nodejs_binary(
-    name = "pbts",
-    data = [
-        "@build_bazel_rules_typescript_protobufs_compiletime_deps//protobufjs",
-        # these deps are needed even tho they are not automatic transitive deps of
-        # protobufjs since if they are not in the runfiles then protobufjs attempts to
-        # run `npm install` at runtime to get thhem which fails as it tries to access
-        # the npm cache outside of the sandbox
-        "@build_bazel_rules_typescript_protobufs_compiletime_deps//semver",
-        "@build_bazel_rules_typescript_protobufs_compiletime_deps//chalk",
-        "@build_bazel_rules_typescript_protobufs_compiletime_deps//glob",
-        "@build_bazel_rules_typescript_protobufs_compiletime_deps//jsdoc",
-        "@build_bazel_rules_typescript_protobufs_compiletime_deps//minimist",
-        "@build_bazel_rules_typescript_protobufs_compiletime_deps//tmp",
-        "@build_bazel_rules_typescript_protobufs_compiletime_deps//uglify-js",
-        "@build_bazel_rules_typescript_protobufs_compiletime_deps//espree",
-        "@build_bazel_rules_typescript_protobufs_compiletime_deps//escodegen",
-        "@build_bazel_rules_typescript_protobufs_compiletime_deps//estraverse",
-    ],
-    entry_point = "protobufjs/bin/pbts",
-    install_source_map_support = False,
-)
diff --git a/internal/protobufjs/package.json b/internal/protobufjs/package.json
deleted file mode 100644
index 7d669f6..0000000
--- a/internal/protobufjs/package.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
-  "name": "protobufjs",
-  "version": "1.0.0",
-  "main": "index.js",
-  "license": "MIT",
-  "devDependencies": {
-    "chalk": "^1.1.3",
-    "escodegen": "^1.9.0",
-    "espree": "^3.5.3",
-    "estraverse": "^4.2.0",
-    "glob": "^7.1.2",
-    "jsdoc": "^3.5.5",
-    "minimist": "^1.2.0",
-    "protobufjs": "Use HEAD to pick up fix for https://github.com/dcodeIO/protobuf.js/pull/1018",
-    "protobufjs": "github:dcodeIO/protobuf.js#65d113b0079fa2570837f3cf95268ce24714a248",
-    "semver": "^5.5.0",
-    "tmp": "0.0.33",
-    "uglify-js": "^2.8.29"
-  }
-}
diff --git a/internal/protobufjs/ts_proto_library.bzl b/internal/protobufjs/ts_proto_library.bzl
deleted file mode 100644
index 807dea0..0000000
--- a/internal/protobufjs/ts_proto_library.bzl
+++ /dev/null
@@ -1,193 +0,0 @@
-# Copyright 2017 The Bazel Authors. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-"Protocol Buffers"
-
-def _run_pbjs(actions, executable, output_name, proto_files, suffix = ".js", wrap = "amd", amd_name = ""):
-    js_file = actions.declare_file(output_name + suffix)
-
-    # Create an intermediate file so that we can do some manipulation of the
-    # generated .js output that makes it compatible with our named AMD loading.
-    js_tmpl_file = actions.declare_file(output_name + suffix + ".tmpl")
-
-    # Reference of arguments:
-    # https://github.com/dcodeIO/ProtoBuf.js/#pbjs-for-javascript
-    args = actions.args()
-    args.add_all(["--target", "static-module"])
-    args.add_all(["--wrap", wrap])
-    args.add("--strict-long")  # Force usage of Long type with int64 fields
-    args.add_all(["--out", js_file.path + ".tmpl"])
-    args.add_all(proto_files)
-
-    actions.run(
-        executable = executable._pbjs,
-        inputs = proto_files,
-        outputs = [js_tmpl_file],
-        arguments = [args],
-    )
-
-    actions.expand_template(
-        template = js_tmpl_file,
-        output = js_file,
-        substitutions = {
-            # convert anonymous AMD module
-            #  define(["protobufjs/minimal"], function($protobuf) {
-            # to named
-            #  define("wksp/path/to/module", ["protobufjs/minimal"], ...
-            "define([": "define('%s/%s', [" % (amd_name, output_name),
-        },
-    )
-    return js_file
-
-def _run_pbts(actions, executable, js_file):
-    ts_file = actions.declare_file(js_file.basename[:-len(".closure.js")] + ".d.ts")
-
-    # Reference of arguments:
-    # https://github.com/dcodeIO/ProtoBuf.js/#pbts-for-typescript
-    args = actions.args()
-    args.add_all(["--out", ts_file.path])
-    args.add(js_file.path)
-
-    actions.run(
-        executable = executable._pbts,
-        progress_message = "Generating typings from %s" % js_file.short_path,
-        inputs = [js_file],
-        outputs = [ts_file],
-        arguments = [args],
-    )
-    return ts_file
-
-def _ts_proto_library(ctx):
-    sources = depset()
-    for dep in ctx.attr.deps:
-        if not hasattr(dep, "proto"):
-            fail("ts_proto_library dep %s must be a proto_library rule" % dep.label)
-
-        # TODO(alexeagle): go/new-proto-library suggests
-        # > should not parse .proto files. Instead, they should use the descriptor
-        # > set output from proto_library
-        # but protobuf.js doesn't seem to accept that bin format
-        sources = depset(transitive = [sources, dep.proto.transitive_sources])
-
-    output_name = ctx.attr.output_name or ctx.label.name
-
-    js_es5 = _run_pbjs(
-        ctx.actions,
-        ctx.executable,
-        output_name,
-        sources,
-        amd_name = "/".join([p for p in [
-            ctx.workspace_name,
-            ctx.label.package,
-        ] if p]),
-    )
-    js_es6 = _run_pbjs(
-        ctx.actions,
-        ctx.executable,
-        output_name,
-        sources,
-        suffix = ".closure.js",
-        wrap = "es6",
-    )
-    dts = _run_pbts(ctx.actions, ctx.executable, js_es6)
-
-    # Return a structure that is compatible with the deps[] of a ts_library.
-    return struct(
-        files = depset([dts]),
-        typescript = struct(
-            declarations = depset([dts]),
-            transitive_declarations = depset([dts]),
-            type_blacklisted_declarations = depset(),
-            es5_sources = depset([js_es5]),
-            es6_sources = depset([js_es6]),
-            transitive_es5_sources = depset(),
-            transitive_es6_sources = depset([js_es6]),
-        ),
-    )
-
-ts_proto_library = rule(
-    implementation = _ts_proto_library,
-    attrs = {
-        "output_name": attr.string(
-            doc = """Name of the resulting module, which you will import from.
-            If not specified, the name will match the target's name.""",
-        ),
-        "deps": attr.label_list(doc = "proto_library targets"),
-        "_pbjs": attr.label(
-            default = Label("//internal/protobufjs:pbjs"),
-            executable = True,
-            cfg = "host",
-        ),
-        "_pbts": attr.label(
-            default = Label("//internal/protobufjs:pbts"),
-            executable = True,
-            cfg = "host",
-        ),
-    },
-)
-"""
-Wraps https://github.com/dcodeIO/protobuf.js for use in Bazel.
-
-`ts_proto_library` has identical outputs to `ts_library`, so it can be used anywhere
-a `ts_library` can appear, such as in the `deps[]` of another `ts_library`.
-
-Example:
-
-```
-load("@npm_bazel_typescript//:defs.bzl", "ts_library", "ts_proto_library")
-
-proto_library(
-    name = "car_proto",
-    srcs = ["car.proto"],
-)
-
-ts_proto_library(
-    name = "car",
-    deps = [":car_proto"],
-)
-
-ts_library(
-    name = "test_lib",
-    testonly = True,
-    srcs = ["car.spec.ts"],
-    deps = [":car"],
-)
-```
-
-Note in this example we named the `ts_proto_library` rule `car` so that the
-result will be `car.d.ts`. This means our TypeScript code can just
-`import {symbols} from './car'`. Use the `output_name` attribute if you want to
-name the rule differently from the output file.
-
-The JavaScript produced by protobuf.js has a runtime dependency on a support library.
-Under devmode (e.g. `ts_devserver`, `ts_web_test_suite`) you'll need to include these scripts
-in the `bootstrap` phase (before Require.js loads). You can use the label
-`@npm_bazel_typescript//:protobufjs_bootstrap_scripts` to reference these scripts
-in the `bootstrap` attribute of `ts_web_test_suite` or `ts_devserver`.
-
-To complete the example above, you could write a `ts_web_test_suite`:
-
-```
-load("@npm_bazel_karma//:defs.bzl", "ts_web_test_suite")
-
-ts_web_test_suite(
-    name = "test",
-    deps = ["test_lib"],
-    bootstrap = ["@npm_bazel_typescript//:protobufjs_bootstrap_scripts"],
-    browsers = [
-      "@io_bazel_rules_webtesting//browsers:chromium-local",
-      "@io_bazel_rules_webtesting//browsers:firefox-local",
-    ],
-)
-```
-"""
diff --git a/internal/protobufjs/yarn.lock b/internal/protobufjs/yarn.lock
deleted file mode 100644
index caa7100..0000000
--- a/internal/protobufjs/yarn.lock
+++ /dev/null
@@ -1,467 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2":
-  version "1.1.2"
-  resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf"
-
-"@protobufjs/base64@^1.1.2":
-  version "1.1.2"
-  resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735"
-
-"@protobufjs/codegen@^2.0.4":
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb"
-
-"@protobufjs/eventemitter@^1.1.0":
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70"
-
-"@protobufjs/fetch@^1.1.0":
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45"
-  dependencies:
-    "@protobufjs/aspromise" "^1.1.1"
-    "@protobufjs/inquire" "^1.1.0"
-
-"@protobufjs/float@^1.0.2":
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1"
-
-"@protobufjs/inquire@^1.1.0":
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089"
-
-"@protobufjs/path@^1.1.2":
-  version "1.1.2"
-  resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d"
-
-"@protobufjs/pool@^1.1.0":
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54"
-
-"@protobufjs/utf8@^1.1.0":
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570"
-
-"@types/long@^3.0.32":
-  version "3.0.32"
-  resolved "https://registry.yarnpkg.com/@types/long/-/long-3.0.32.tgz#f4e5af31e9e9b196d8e5fca8a5e2e20aa3d60b69"
-
-"@types/node@^8.9.4":
-  version "8.10.10"
-  resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.10.tgz#fec07bc2ad549d9e6d2f7aa0fb0be3491b83163a"
-
-acorn-jsx@^3.0.0:
-  version "3.0.1"
-  resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b"
-  dependencies:
-    acorn "^3.0.4"
-
-acorn@^3.0.4:
-  version "3.3.0"
-  resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
-
-acorn@^5.5.0:
-  version "5.5.3"
-  resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.3.tgz#f473dd47e0277a08e28e9bec5aeeb04751f0b8c9"
-
-align-text@^0.1.1, align-text@^0.1.3:
-  version "0.1.4"
-  resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
-  dependencies:
-    kind-of "^3.0.2"
-    longest "^1.0.1"
-    repeat-string "^1.5.2"
-
-ansi-regex@^2.0.0:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
-
-ansi-styles@^2.2.1:
-  version "2.2.1"
-  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
-
-babylon@7.0.0-beta.19:
-  version "7.0.0-beta.19"
-  resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.19.tgz#e928c7e807e970e0536b078ab3e0c48f9e052503"
-
-balanced-match@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
-
-bluebird@~3.5.0:
-  version "3.5.1"
-  resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9"
-
-brace-expansion@^1.1.7:
-  version "1.1.11"
-  resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
-  dependencies:
-    balanced-match "^1.0.0"
-    concat-map "0.0.1"
-
-camelcase@^1.0.2:
-  version "1.2.1"
-  resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
-
-catharsis@~0.8.9:
-  version "0.8.9"
-  resolved "https://registry.yarnpkg.com/catharsis/-/catharsis-0.8.9.tgz#98cc890ca652dd2ef0e70b37925310ff9e90fc8b"
-  dependencies:
-    underscore-contrib "~0.3.0"
-
-center-align@^0.1.1:
-  version "0.1.3"
-  resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
-  dependencies:
-    align-text "^0.1.3"
-    lazy-cache "^1.0.3"
-
-chalk@^1.1.3:
-  version "1.1.3"
-  resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
-  dependencies:
-    ansi-styles "^2.2.1"
-    escape-string-regexp "^1.0.2"
-    has-ansi "^2.0.0"
-    strip-ansi "^3.0.0"
-    supports-color "^2.0.0"
-
-cliui@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
-  dependencies:
-    center-align "^0.1.1"
-    right-align "^0.1.1"
-    wordwrap "0.0.2"
-
-concat-map@0.0.1:
-  version "0.0.1"
-  resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
-
-decamelize@^1.0.0:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
-
-deep-is@~0.1.3:
-  version "0.1.3"
-  resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
-
-escape-string-regexp@^1.0.2, escape-string-regexp@~1.0.5:
-  version "1.0.5"
-  resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
-
-escodegen@^1.9.0:
-  version "1.9.1"
-  resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.1.tgz#dbae17ef96c8e4bedb1356f4504fa4cc2f7cb7e2"
-  dependencies:
-    esprima "^3.1.3"
-    estraverse "^4.2.0"
-    esutils "^2.0.2"
-    optionator "^0.8.1"
-  optionalDependencies:
-    source-map "~0.6.1"
-
-espree@^3.5.3:
-  version "3.5.4"
-  resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7"
-  dependencies:
-    acorn "^5.5.0"
-    acorn-jsx "^3.0.0"
-
-esprima@^3.1.3:
-  version "3.1.3"
-  resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
-
-estraverse@^4.2.0:
-  version "4.2.0"
-  resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
-
-esutils@^2.0.2:
-  version "2.0.2"
-  resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
-
-fast-levenshtein@~2.0.4:
-  version "2.0.6"
-  resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
-
-fs.realpath@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
-
-glob@^7.1.2:
-  version "7.1.2"
-  resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
-  dependencies:
-    fs.realpath "^1.0.0"
-    inflight "^1.0.4"
-    inherits "2"
-    minimatch "^3.0.4"
-    once "^1.3.0"
-    path-is-absolute "^1.0.0"
-
-graceful-fs@^4.1.9:
-  version "4.1.11"
-  resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
-
-has-ansi@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
-  dependencies:
-    ansi-regex "^2.0.0"
-
-inflight@^1.0.4:
-  version "1.0.6"
-  resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
-  dependencies:
-    once "^1.3.0"
-    wrappy "1"
-
-inherits@2:
-  version "2.0.3"
-  resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
-
-is-buffer@^1.1.5:
-  version "1.1.6"
-  resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
-
-js2xmlparser@~3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/js2xmlparser/-/js2xmlparser-3.0.0.tgz#3fb60eaa089c5440f9319f51760ccd07e2499733"
-  dependencies:
-    xmlcreate "^1.0.1"
-
-jsdoc@^3.5.5:
-  version "3.5.5"
-  resolved "https://registry.yarnpkg.com/jsdoc/-/jsdoc-3.5.5.tgz#484521b126e81904d632ff83ec9aaa096708fa4d"
-  dependencies:
-    babylon "7.0.0-beta.19"
-    bluebird "~3.5.0"
-    catharsis "~0.8.9"
-    escape-string-regexp "~1.0.5"
-    js2xmlparser "~3.0.0"
-    klaw "~2.0.0"
-    marked "~0.3.6"
-    mkdirp "~0.5.1"
-    requizzle "~0.2.1"
-    strip-json-comments "~2.0.1"
-    taffydb "2.6.2"
-    underscore "~1.8.3"
-
-kind-of@^3.0.2:
-  version "3.2.2"
-  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
-  dependencies:
-    is-buffer "^1.1.5"
-
-klaw@~2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/klaw/-/klaw-2.0.0.tgz#59c128e0dc5ce410201151194eeb9cbf858650f6"
-  dependencies:
-    graceful-fs "^4.1.9"
-
-lazy-cache@^1.0.3:
-  version "1.0.4"
-  resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
-
-levn@~0.3.0:
-  version "0.3.0"
-  resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
-  dependencies:
-    prelude-ls "~1.1.2"
-    type-check "~0.3.2"
-
-long@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28"
-
-longest@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
-
-marked@~0.3.6:
-  version "0.3.19"
-  resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.19.tgz#5d47f709c4c9fc3c216b6d46127280f40b39d790"
-
-minimatch@^3.0.4:
-  version "3.0.4"
-  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
-  dependencies:
-    brace-expansion "^1.1.7"
-
-minimist@0.0.8:
-  version "0.0.8"
-  resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
-
-minimist@^1.2.0:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
-
-mkdirp@~0.5.1:
-  version "0.5.1"
-  resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
-  dependencies:
-    minimist "0.0.8"
-
-once@^1.3.0:
-  version "1.4.0"
-  resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
-  dependencies:
-    wrappy "1"
-
-optionator@^0.8.1:
-  version "0.8.2"
-  resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
-  dependencies:
-    deep-is "~0.1.3"
-    fast-levenshtein "~2.0.4"
-    levn "~0.3.0"
-    prelude-ls "~1.1.2"
-    type-check "~0.3.2"
-    wordwrap "~1.0.0"
-
-os-tmpdir@~1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
-
-path-is-absolute@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
-
-prelude-ls@~1.1.2:
-  version "1.1.2"
-  resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
-
-"protobufjs@github:dcodeIO/protobuf.js#65d113b0079fa2570837f3cf95268ce24714a248":
-  version "6.8.7"
-  resolved "https://codeload.github.com/dcodeIO/protobuf.js/tar.gz/65d113b0079fa2570837f3cf95268ce24714a248"
-  dependencies:
-    "@protobufjs/aspromise" "^1.1.2"
-    "@protobufjs/base64" "^1.1.2"
-    "@protobufjs/codegen" "^2.0.4"
-    "@protobufjs/eventemitter" "^1.1.0"
-    "@protobufjs/fetch" "^1.1.0"
-    "@protobufjs/float" "^1.0.2"
-    "@protobufjs/inquire" "^1.1.0"
-    "@protobufjs/path" "^1.1.2"
-    "@protobufjs/pool" "^1.1.0"
-    "@protobufjs/utf8" "^1.1.0"
-    "@types/long" "^3.0.32"
-    "@types/node" "^8.9.4"
-    long "^4.0.0"
-
-repeat-string@^1.5.2:
-  version "1.6.1"
-  resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
-
-requizzle@~0.2.1:
-  version "0.2.1"
-  resolved "https://registry.yarnpkg.com/requizzle/-/requizzle-0.2.1.tgz#6943c3530c4d9a7e46f1cddd51c158fc670cdbde"
-  dependencies:
-    underscore "~1.6.0"
-
-right-align@^0.1.1:
-  version "0.1.3"
-  resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
-  dependencies:
-    align-text "^0.1.1"
-
-semver@^5.5.0:
-  version "5.5.0"
-  resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"
-
-source-map@~0.5.1:
-  version "0.5.7"
-  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
-
-source-map@~0.6.1:
-  version "0.6.1"
-  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
-
-strip-ansi@^3.0.0:
-  version "3.0.1"
-  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
-  dependencies:
-    ansi-regex "^2.0.0"
-
-strip-json-comments@~2.0.1:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
-
-supports-color@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
-
-taffydb@2.6.2:
-  version "2.6.2"
-  resolved "https://registry.yarnpkg.com/taffydb/-/taffydb-2.6.2.tgz#7cbcb64b5a141b6a2efc2c5d2c67b4e150b2a268"
-
-tmp@0.0.33:
-  version "0.0.33"
-  resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
-  dependencies:
-    os-tmpdir "~1.0.2"
-
-type-check@~0.3.2:
-  version "0.3.2"
-  resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
-  dependencies:
-    prelude-ls "~1.1.2"
-
-uglify-js@^2.8.29:
-  version "2.8.29"
-  resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd"
-  dependencies:
-    source-map "~0.5.1"
-    yargs "~3.10.0"
-  optionalDependencies:
-    uglify-to-browserify "~1.0.0"
-
-uglify-to-browserify@~1.0.0:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
-
-underscore-contrib@~0.3.0:
-  version "0.3.0"
-  resolved "https://registry.yarnpkg.com/underscore-contrib/-/underscore-contrib-0.3.0.tgz#665b66c24783f8fa2b18c9f8cbb0e2c7d48c26c7"
-  dependencies:
-    underscore "1.6.0"
-
-underscore@1.6.0, underscore@~1.6.0:
-  version "1.6.0"
-  resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.6.0.tgz#8b38b10cacdef63337b8b24e4ff86d45aea529a8"
-
-underscore@~1.8.3:
-  version "1.8.3"
-  resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022"
-
-window-size@0.1.0:
-  version "0.1.0"
-  resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
-
-wordwrap@0.0.2:
-  version "0.0.2"
-  resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
-
-wordwrap@~1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
-
-wrappy@1:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
-
-xmlcreate@^1.0.1:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/xmlcreate/-/xmlcreate-1.0.2.tgz#fa6bf762a60a413fb3dd8f4b03c5b269238d308f"
-
-yargs@~3.10.0:
-  version "3.10.0"
-  resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
-  dependencies:
-    camelcase "^1.0.2"
-    cliui "^2.1.0"
-    decamelize "^1.0.0"
-    window-size "0.1.0"
diff --git a/internal/ts_config.bzl b/internal/ts_config.bzl
deleted file mode 100644
index db56b39..0000000
--- a/internal/ts_config.bzl
+++ /dev/null
@@ -1,44 +0,0 @@
-# Copyright 2017 The Bazel Authors. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"tsconfig.json files using extends"
-
-TsConfigInfo = provider()
-
-def _ts_config_impl(ctx):
-    files = depset([ctx.file.src])
-    return [DefaultInfo(files = files), TsConfigInfo(deps = ctx.files.deps)]
-
-ts_config = rule(
-    implementation = _ts_config_impl,
-    attrs = {
-        "src": attr.label(
-            doc = """The tsconfig.json file passed to the TypeScript compiler""",
-            allow_single_file = True,
-            mandatory = True,
-        ),
-        "deps": attr.label_list(
-            doc = """Additional tsconfig.json files referenced via extends""",
-            allow_files = True,
-            mandatory = True,
-        ),
-    },
-)
-"""Allows a tsconfig.json file to extend another file.
-
-Normally, you just give a single `tsconfig.json` file as the tsconfig attribute
-of a `ts_library` rule. However, if your `tsconfig.json` uses the `extends`
-feature from TypeScript, then the Bazel implementation needs to know about that
-extended configuration file as well, to pass them both to the TypeScript compiler.
-"""
diff --git a/internal/ts_repositories.bzl b/internal/ts_repositories.bzl
index 16c3e40..e37ca2f 100644
--- a/internal/ts_repositories.bzl
+++ b/internal/ts_repositories.bzl
@@ -35,27 +35,6 @@
     # 0.16.8: ng_package fix for packaging binary files
     check_rules_nodejs_version("0.16.8")
 
-    # Included here for backward compatability for downstream repositories
-    # that use @build_bazel_rules_typescript_tsc_wrapped_deps such as rxjs.
-    # @build_bazel_rules_typescript_tsc_wrapped_deps is not used locally.
-    yarn_install(
-        name = "build_bazel_rules_typescript_tsc_wrapped_deps",
-        package_json = "@npm_bazel_typescript//internal:tsc_wrapped/package.json",
-        yarn_lock = "@npm_bazel_typescript//internal:tsc_wrapped/yarn.lock",
-    )
-
-    yarn_install(
-        name = "build_bazel_rules_typescript_devserver_deps",
-        package_json = "@npm_bazel_typescript//internal/devserver:package.json",
-        yarn_lock = "@npm_bazel_typescript//internal/devserver:yarn.lock",
-    )
-
-    yarn_install(
-        name = "build_bazel_rules_typescript_protobufs_compiletime_deps",
-        package_json = "@npm_bazel_typescript//internal/protobufjs:package.json",
-        yarn_lock = "@npm_bazel_typescript//internal/protobufjs:yarn.lock",
-    )
-
 # BEGIN-DEV-ONLY
 def ts_setup_dev_workspace():
     """
diff --git a/internal/tsc_wrapped/yarn.lock b/internal/tsc_wrapped/yarn.lock
index af6b06f..de1c0b0 100644
--- a/internal/tsc_wrapped/yarn.lock
+++ b/internal/tsc_wrapped/yarn.lock
@@ -36,13 +36,18 @@
   integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
 
 brace-expansion@^1.1.7:
-  version "1.1.8"
-  resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292"
-  integrity sha1-wHshHHyVLsH479Uad+8NHTmQopI=
+  version "1.1.11"
+  resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+  integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
   dependencies:
     balanced-match "^1.0.0"
     concat-map "0.0.1"
 
+buffer-from@^1.0.0:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
+  integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
+
 bytebuffer@~5:
   version "5.0.1"
   resolved "https://registry.yarnpkg.com/bytebuffer/-/bytebuffer-5.0.1.tgz#582eea4b1a873b6d020a48d58df85f0bba6cfddd"
@@ -207,10 +212,11 @@
     yargs "^3.10.0"
 
 source-map-support@^0.5.0:
-  version "0.5.3"
-  resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.3.tgz#2b3d5fff298cfa4d1afd7d4352d569e9a0158e76"
-  integrity sha512-eKkTgWYeBOQqFGXRfKabMFdnWepo51vWqEdoeikaEPFiJC7MCU5j2h4+6Q8npkZTeLGbSyecZvRxiSoWl3rh+w==
+  version "0.5.10"
+  resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.10.tgz#2214080bc9d51832511ee2bab96e3c2f9353120c"
+  integrity sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==
   dependencies:
+    buffer-from "^1.0.0"
     source-map "^0.6.0"
 
 source-map@^0.6.0:
@@ -252,9 +258,9 @@
     source-map-support "^0.5.0"
 
 tslib@^1.8.1:
-  version "1.9.0"
-  resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.0.tgz#e37a86fda8cbbaf23a057f473c9f4dc64e5fc2e8"
-  integrity sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ==
+  version "1.9.3"
+  resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286"
+  integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==
 
 tsutils@2.27.2:
   version "2.27.2"
diff --git a/internal/tsetse/tests/ban_expect_truthy_promise/BUILD b/internal/tsetse/tests/ban_expect_truthy_promise/BUILD
index 46b5590..2e59f91 100644
--- a/internal/tsetse/tests/ban_expect_truthy_promise/BUILD
+++ b/internal/tsetse/tests/ban_expect_truthy_promise/BUILD
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-load("//internal:defaults.bzl", "ts_library")
+load("//javascript/typescript:build_defs.bzl", "ts_library")
 
 licenses(["notice"])  # Apache 2.0
 
diff --git a/internal/tsetse/tests/ban_promise_as_condition/BUILD b/internal/tsetse/tests/ban_promise_as_condition/BUILD
index 83817bd..47e09ec 100644
--- a/internal/tsetse/tests/ban_promise_as_condition/BUILD
+++ b/internal/tsetse/tests/ban_promise_as_condition/BUILD
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-load("//internal:defaults.bzl", "ts_library")
+load("//javascript/typescript:build_defs.bzl", "ts_library")
 
 licenses(["notice"])  # Apache 2.0
 
diff --git a/internal/tsetse/tests/check_return_value/BUILD b/internal/tsetse/tests/check_return_value/BUILD
index 502aa27..c09ea5f 100644
--- a/internal/tsetse/tests/check_return_value/BUILD
+++ b/internal/tsetse/tests/check_return_value/BUILD
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-load("//internal:defaults.bzl", "ts_library")
+load("//javascript/typescript:build_defs.bzl", "ts_library")
 
 licenses(["notice"])  # Apache 2.0
 
diff --git a/internal/tsetse/tests/equals_nan/BUILD b/internal/tsetse/tests/equals_nan/BUILD
index 6fad147..7dc5959 100644
--- a/internal/tsetse/tests/equals_nan/BUILD
+++ b/internal/tsetse/tests/equals_nan/BUILD
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-load("//internal:defaults.bzl", "ts_library")
+load("//javascript/typescript:build_defs.bzl", "ts_library")
 
 licenses(["notice"])  # Apache 2.0
 
diff --git a/internal/tsetse/tests/must_use_promises/BUILD b/internal/tsetse/tests/must_use_promises/BUILD
index 9f88bd5..bc8c34b 100644
--- a/internal/tsetse/tests/must_use_promises/BUILD
+++ b/internal/tsetse/tests/must_use_promises/BUILD
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-load("//internal:defaults.bzl", "ts_library")
+load("//javascript/typescript:build_defs.bzl", "ts_library")
 
 licenses(["notice"])  # Apache 2.0
 
diff --git a/package.bzl b/package.bzl
index e19ba50..ae42990 100644
--- a/package.bzl
+++ b/package.bzl
@@ -12,19 +12,11 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-"""Package file which defines npm_bazel_typescript dependencies
+"""Package file which defines build dependencies
 """
 
 load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
 
-def rules_typescript_dependencies():
-    print("""DEPRECATION WARNING:
-    rules_typescript_dependencies is no longer needed, and will be removed in a future release.
-    We assume you will fetch rules_nodejs in your WORKSPACE file, and no other dependencies remain here.
-    Simply remove any calls to this function and the corresponding call to
-      load("@npm_bazel_typescript//:package.bzl", "rules_typescript_dependencies")
-    """)
-
 def rules_typescript_dev_dependencies():
     """
     Fetch dependencies needed for local development.
@@ -38,11 +30,11 @@
     _maybe(
         http_archive,
         name = "build_bazel_rules_nodejs",
-        urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/0.18.5/rules_nodejs-0.18.5.tar.gz"],
-        sha256 = "c8cd6a77433f7d3bb1f4ac87f15822aa102989f8e9eb1907ca0cad718573985b",
+        sha256 = "213dcf7e72f3acd4d1e369b7a356f3e5d9560f380bd655b13b7c0ea425d7c419",
+        urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/0.27.9/rules_nodejs-0.27.9.tar.gz"],
     )
 
-    # For running skylint
+    # For protocol buffers
     _maybe(
         http_archive,
         name = "io_bazel",
@@ -80,29 +72,6 @@
         sha256 = "9176a7df34dbed2cf5171eb56271868824560364e60644348219f852f593ae79",
     )
 
-    # io_bazel_rules_webtesting depends on bazel_skylib. It is installed by
-    # web_test_repositories() but we depend on it here in case users don't call
-    # web_test_repositories(). This will get cleaned up by https://github.com/bazelbuild/rules_typescript/pull/374
-    # which introduces npm_bazel_karma with its own defs.bzl file
-    # that will allow this dep to be removed from rules_typescript_dependencies()
-    _maybe(
-        http_archive,
-        name = "bazel_skylib",
-        url = "https://github.com/bazelbuild/bazel-skylib/archive/d7c5518fa061ae18a20d00b14082705d3d2d885d.zip",
-        strip_prefix = "bazel-skylib-d7c5518fa061ae18a20d00b14082705d3d2d885d",
-    )
-
-    #############################################
-    # Dependencies for generating documentation #
-    #############################################
-
-    http_archive(
-        name = "io_bazel_rules_sass",
-        urls = ["https://github.com/bazelbuild/rules_sass/archive/8ccf4f1c351928b55d5dddf3672e3667f6978d60.zip"],  # 2018-11-23
-        strip_prefix = "rules_sass-8ccf4f1c351928b55d5dddf3672e3667f6978d60",
-        sha256 = "894d7928df8da85e263d743c8434d4c10ab0a3f0708fed0d53394e688e3faf70",
-    )
-
 def _maybe(repo_rule, name, **kwargs):
     if name not in native.existing_rules():
         repo_rule(name = name, **kwargs)
diff --git a/package.json b/package.json
index b0579be..3d4a646 100644
--- a/package.json
+++ b/package.json
@@ -10,7 +10,7 @@
         "@bazel/bazel": "~0.22.0",
         "@bazel/buildifier": "^0.20.0",
         "@bazel/ibazel": "^0.2.0",
-        "@bazel/typescript": "0.19.1",
+        "@bazel/typescript": "0.27.9",
         "@types/jasmine": "^2.8.2",
         "@types/long": "^4.0.0",
         "@types/node": "7.0.18",
diff --git a/protractor.conf.js b/protractor.conf.js
deleted file mode 100644
index ae5555b..0000000
--- a/protractor.conf.js
+++ /dev/null
@@ -1,13 +0,0 @@
-exports.config = {
-  suites: {
-    app: 'bazel-bin/examples/app/*_e2e_test.js',
-    protocol_buffers: 'bazel-bin/examples/protocol_buffers/*_e2e_test.js',
-  },
-  capabilities: {
-    browserName: 'chrome',
-    chromeOptions: {args: ['--no-sandbox']}
-  },
-  directConnect: true,
-  baseUrl: 'http://localhost:8080/',
-  framework: 'jasmine',
-};
diff --git a/ts_auto_deps/ts_auto_deps.js b/ts_auto_deps/ts_auto_deps.js
deleted file mode 100644
index 68f4f7e..0000000
--- a/ts_auto_deps/ts_auto_deps.js
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/usr/bin/env node
-
-// This file is a shim to execute the ts_auto_deps binary from the right platform-specific package.
-const os = require('os');
-const fs = require('fs');
-const path = require('path');
-const spawnSync = require('child_process').spawnSync;
-
-/**
- * @return '.exe' for Windows and '' for all other platforms
- */
-function getNativeBinaryExt() {
-  return os.platform() === 'win32' ? '.exe' : '';
-}
-
-/**
- * @return the native `ts_auto_deps` binary for the current platform
- * @throws when the `ts_auto_deps` executable can not be found
- */
-function getNativeBinary() {
-  try {
-    return require.resolve(`./ts_auto_deps-${os.platform()}_${os.arch()}${getNativeBinaryExt()}`);
-  } catch (e) {
-    const message = 'ts_auto_deps executable not found for your platform: ' +
-        `(${os.platform()}_${os.arch()})\n`;
-    throw new Error(message);
-  }
-}
-
-/** Starts a new synchronous child process that runs with the specified arguments. */
-const spawnedProcess = spawnSync(getNativeBinary(), process.argv.slice(2), {stdio: 'inherit'});
-
-// Ensure that this wrapper script exits with the same exit code as the child process.
-process.exit(spawnedProcess.status);
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 0000000..5164862
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,12 @@
+{
+    "compilerOptions": {
+      "strict": true,
+      "lib": ["es2015.promise", "dom", "es5"],
+      // Explicitly set types settings so typescript doesn't auto-discover types.
+      // If all types are discovered then all types need to be included as deps
+      // or typescript may error out with TS2688: Cannot find type definition file for 'foo'.
+      "types": []
+   }
+  }
+  
+  
\ No newline at end of file
diff --git a/version.bzl b/version.bzl
deleted file mode 100644
index 35f5df8..0000000
--- a/version.bzl
+++ /dev/null
@@ -1 +0,0 @@
-COMPAT_VERSION = "0.25.0"
diff --git a/yarn.lock b/yarn.lock
index eb75663..6d1c539 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -49,14 +49,14 @@
   resolved "https://registry.yarnpkg.com/@bazel/ibazel/-/ibazel-0.2.0.tgz#c119aef4344a789cef5e792caaee52264123e71c"
   integrity sha1-wRmu9DRKeJzvXnksqu5SJkEj5xw=
 
-"@bazel/typescript@0.19.1":
-  version "0.19.1"
-  resolved "https://registry.yarnpkg.com/@bazel/typescript/-/typescript-0.19.1.tgz#61dd57c0ab8a6c9930d2463d44e9522ec007fe3a"
-  integrity sha512-rNpNNRAQmtb+AdX5CvLzDGOADO2PRbZWoQfd7I2NXTuWk8BaJEb0D5W+WxQGcNim6qTUD1JLAknfOVYICf3OaQ==
+"@bazel/typescript@0.27.9":
+  version "0.27.9"
+  resolved "https://registry.yarnpkg.com/@bazel/typescript/-/typescript-0.27.9.tgz#6cd6a7162167bec67cfae3a3b973a6bfe8c65f3e"
+  integrity sha512-o/MDGV2YNHMrsxJMpjWHQwezR7jlh7LJ+7FEmzG/LrepRtyYdaDev5bRhVn2XxnD7cPDx8zvyer35NJTnK0hnw==
   dependencies:
-    protobufjs "5.0.0"
+    protobufjs "5.0.3"
+    semver "5.6.0"
     source-map-support "0.5.9"
-    tsickle "0.28.0"
     tsutils "2.27.2"
 
 "@types/jasmine@^2.8.2":
@@ -1179,17 +1179,6 @@
     is-glob "^3.1.0"
     path-dirname "^1.0.0"
 
-glob@^5.0.10:
-  version "5.0.15"
-  resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"
-  integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=
-  dependencies:
-    inflight "^1.0.4"
-    inherits "2"
-    minimatch "2 || 3"
-    once "^1.3.0"
-    path-is-absolute "^1.0.0"
-
 glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.0.6:
   version "7.1.2"
   resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
@@ -1924,7 +1913,7 @@
   resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.0.tgz#e051fd881358585f3279df333fe694da0bcffdd6"
   integrity sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==
 
-"minimatch@2 || 3", minimatch@^3.0.2, minimatch@^3.0.4:
+minimatch@^3.0.2, minimatch@^3.0.4:
   version "3.0.4"
   resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
   integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
@@ -2271,16 +2260,6 @@
   resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
   integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==
 
-protobufjs@5.0.0:
-  version "5.0.0"
-  resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-5.0.0.tgz#4223063233ea96ac063ca2b554035204db524fa1"
-  integrity sha1-QiMGMjPqlqwGPKK1VANSBNtST6E=
-  dependencies:
-    ascli "~1"
-    bytebuffer "~5"
-    glob "^5.0.10"
-    yargs "^3.10.0"
-
 protobufjs@5.0.3:
   version "5.0.3"
   resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-5.0.3.tgz#e4dfe9fb67c90b2630d15868249bcc4961467a17"
@@ -2762,14 +2741,6 @@
     buffer-from "^1.0.0"
     source-map "^0.6.0"
 
-source-map-support@^0.5.0:
-  version "0.5.6"
-  resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.6.tgz#4435cee46b1aab62b8e8610ce60f788091c51c13"
-  integrity sha512-N4KXEz7jcKqPf2b2vZF11lQIz9W5ZMuUcIOGj243lduidkf2fjkVKJS9vNxVWn3u/uxX38AcE8U9nnH9FPcq+g==
-  dependencies:
-    buffer-from "^1.0.0"
-    source-map "^0.6.0"
-
 source-map-support@~0.4.0:
   version "0.4.18"
   resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f"
@@ -3003,16 +2974,6 @@
   resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.0.tgz#5846786237b4239014f05db156b643212d4c6f36"
   integrity sha512-DlX6dR0lOIRDFxI0mjL9IYg6OTncLm/Zt+JiBhE5OlFcAR8yc9S7FFXU9so0oda47frdM/JFsk7UjNt9vscKcg==
 
-tsickle@0.28.0:
-  version "0.28.0"
-  resolved "https://registry.yarnpkg.com/tsickle/-/tsickle-0.28.0.tgz#6cd6fa004766c6ad9261b599c83866ee97cc7875"
-  integrity sha512-cb/Z4NlKMPGiIIbgmklfBJIxDl4EQoYqC+0/BnPxZWzWcUvikeOHFkkkEmabJVqKh47jUqOwU/uMAu6UvhicZg==
-  dependencies:
-    minimist "^1.2.0"
-    mkdirp "^0.5.1"
-    source-map "^0.6.0"
-    source-map-support "^0.5.0"
-
 tsickle@0.33.1:
   version "0.33.1"
   resolved "https://registry.yarnpkg.com/tsickle/-/tsickle-0.33.1.tgz#eee4ebabeda3bcd8afc32cee34c822cbe3e839ec"