From 226fa67a022bba93c8fe2e5c632f6418516ce2ff Mon Sep 17 00:00:00 2001
From: Paul Melnikow <github@paulmelnikow.com>
Date: Mon, 21 Jan 2019 15:41:24 -0500
Subject: [PATCH] Create shortcut for BaseService-related imports (#2809)

Continue to implement #2698:

- Add `core/base-service/index.js` (but hold off on moving the things it imports)
- Add shortcuts in `services/index.js` for Base*Service, errors, and deprecatedService. This file will be streamlined later to avoid cluttering it with rarely used bits.
- Apply consistent ordering of imports and use of `module.exports` in testers.
- Remove some renaming of imports.
- Remove obsolete tests here and there.
---
 core/base-service/index.js                    | 35 ++++++++++++
 doc/TUTORIAL.md                               | 23 +++++---
 doc/deprecating-badges.md                     |  7 ++-
 doc/rewriting-services.md                     |  4 +-
 doc/service-tests.md                          | 14 ++++-
 services/amo/amo.tester.js                    |  2 +-
 services/ansible/ansible-quality.service.js   |  3 +-
 services/ansible/ansible-quality.tester.js    |  2 +-
 services/ansible/ansible-role.service.js      |  2 +-
 services/ansible/ansible-role.tester.js       |  2 +-
 services/apm/apm.service.js                   |  3 +-
 services/apm/apm.tester.js                    |  2 +-
 services/appveyor/appveyor-base.js            |  2 +-
 services/appveyor/appveyor-ci.tester.js       |  2 +-
 services/appveyor/appveyor-tests.tester.js    |  2 +-
 services/aur/aur.service.js                   |  3 +-
 services/aur/aur.tester.js                    |  2 +-
 services/azure-devops/azure-devops-base.js    |  3 +-
 .../azure-devops-build.service.js             |  2 +-
 .../azure-devops/azure-devops-build.tester.js |  2 +-
 .../azure-devops-coverage.tester.js           |  2 +-
 .../azure-devops-release.tester.js            |  2 +-
 .../azure-devops/azure-devops-tests.tester.js |  2 +-
 services/beerpay/beerpay.service.js           |  2 +-
 services/beerpay/beerpay.tester.js            |  2 +-
 services/bintray/bintray.service.js           |  2 +-
 services/bintray/bintray.tester.js            |  2 +-
 .../bitbucket/bitbucket-issues.service.js     |  2 +-
 .../bitbucket/bitbucket-pipelines.service.js  |  2 +-
 .../bitbucket-pull-request.service.js         |  2 +-
 services/bitbucket/bitbucket.tester.js        |  2 +-
 services/bithound/bithound.service.js         |  2 +-
 services/bithound/bithound.tester.js          |  2 +-
 services/bitrise/bitrise.tester.js            |  2 +-
 services/bountysource/bountysource.service.js |  2 +-
 services/bountysource/bountysource.tester.js  |  2 +-
 services/bower/bower-base.js                  |  2 +-
 services/bower/bower-version.service.js       |  2 +-
 services/bower/bower.tester.js                |  2 +-
 services/bstats/bstats-players.service.js     |  4 +-
 services/bstats/bstats-players.tester.js      |  2 +-
 services/bstats/bstats-servers.service.js     |  4 +-
 services/bstats/bstats-servers.tester.js      |  2 +-
 services/bugzilla/bugzilla.tester.js          |  2 +-
 services/buildkite/buildkite.tester.js        |  4 +-
 services/bundlephobia/bundlephobia.service.js |  2 +-
 services/bundlephobia/bundlephobia.tester.js  |  2 +-
 services/cauditor/cauditor.service.js         |  2 +-
 services/cauditor/cauditor.tester.js          |  2 +-
 services/cdnjs/cdnjs.service.js               |  3 +-
 services/cdnjs/cdnjs.tester.js                |  2 +-
 services/chocolatey/chocolatey.tester.js      | 51 +----------------
 .../chrome-web-store.tester.js                |  3 +-
 .../cii-best-practices.service.js             |  2 +-
 .../cii-best-practices.tester.js              |  4 +-
 services/circleci/circleci.service.js         |  2 +-
 services/circleci/circleci.tester.js          |  2 +-
 services/clojars/clojars-downloads.service.js |  4 +-
 services/clojars/clojars-downloads.tester.js  |  2 +-
 services/clojars/clojars-version.service.js   |  3 +-
 services/clojars/clojars-version.tester.js    |  2 +-
 services/cocoapods/cocoapods-apps.service.js  |  2 +-
 services/cocoapods/cocoapods-apps.tester.js   |  2 +-
 .../cocoapods/cocoapods-downloads.service.js  |  2 +-
 .../cocoapods/cocoapods-downloads.tester.js   |  3 +-
 .../cocoapods/cocoapods-license.tester.js     |  2 +-
 .../cocoapods/cocoapods-metrics.tester.js     |  2 +-
 .../cocoapods/cocoapods-platform.tester.js    |  2 +-
 .../cocoapods/cocoapods-version.tester.js     |  2 +-
 services/codacy/codacy-coverage.service.js    |  4 +-
 services/codacy/codacy-coverage.tester.js     |  2 +-
 services/codacy/codacy-grade.service.js       |  2 +-
 services/codacy/codacy-grade.tester.js        |  2 +-
 services/codeclimate/codeclimate.tester.js    |  2 +-
 services/codecov/codecov.tester.js            |  2 +-
 services/codeship/codeship.tester.js          |  2 +-
 services/codetally/codetally.service.js       |  2 +-
 services/codetally/codetally.tester.js        |  2 +-
 services/conda/conda-base.js                  |  2 +-
 services/conda/conda.tester.js                |  2 +-
 .../continuousphp/continuousphp.tester.js     |  2 +-
 services/cookbook/cookbook.tester.js          |  2 +-
 services/coveralls/coveralls.tester.js        |  2 +-
 .../coverity/coverity-on-demand.service.js    |  2 +-
 .../coverity/coverity-on-demand.tester.js     |  2 +-
 services/coverity/coverity-scan.service.js    |  2 +-
 services/coverity/coverity-scan.tester.js     |  2 +-
 services/cpan/cpan-license.tester.js          |  2 +-
 services/cpan/cpan-version.tester.js          |  2 +-
 services/cpan/cpan.js                         |  2 +-
 services/cran/cran.service.js                 |  2 +-
 services/cran/cran.tester.js                  |  2 +-
 services/crates/crates-base.js                |  2 +-
 services/crates/crates-downloads.tester.js    |  2 +-
 services/crates/crates-license.tester.js      |  2 +-
 services/crates/crates-version.tester.js      |  2 +-
 services/ctan/ctan.service.js                 |  2 +-
 services/ctan/ctan.tester.js                  |  2 +-
 services/date/date.service.js                 |  2 +-
 services/date/date.tester.js                  |  8 ++-
 services/david/david.tester.js                |  2 +-
 services/debug/debug.service.js               |  2 +-
 services/debug/debug.tester.js                |  2 +-
 services/dependabot/dependabot.service.js     |  2 +-
 services/dependabot/dependabot.tester.js      | 12 ++--
 services/depfu/depfu.service.js               |  2 +-
 services/depfu/depfu.tester.js                |  2 +-
 services/discord/discord.service.js           |  2 +-
 services/discord/discord.tester.js            |  2 +-
 services/discourse/discourse.tester.js        |  2 +-
 services/dockbit/dockbit.service.js           |  2 +-
 services/dockbit/dockbit.tester.js            |  2 +-
 services/docker/docker-automated.service.js   |  2 +-
 services/docker/docker-automated.tester.js    |  2 +-
 services/docker/docker-build.service.js       |  2 +-
 services/docker/docker-build.tester.js        |  2 +-
 services/docker/docker-pulls.service.js       |  2 +-
 services/docker/docker-pulls.tester.js        |  2 +-
 services/docker/docker-stars.service.js       |  4 +-
 services/docker/docker-stars.tester.js        |  4 +-
 services/dotnetstatus/dotnetstatus.service.js |  2 +-
 services/dotnetstatus/dotnetstatus.tester.js  |  2 +-
 services/dub/dub-download.service.js          |  8 +--
 services/dub/dub-download.tester.js           |  2 +-
 services/dub/dub-license.service.js           |  2 +-
 services/dub/dub-license.tester.js            |  2 +-
 services/dub/dub-version.service.js           |  2 +-
 services/dub/dub-version.tester.js            |  2 +-
 services/dynamic/dynamic-json.service.js      |  3 +-
 services/dynamic/dynamic-json.tester.js       |  2 +-
 services/dynamic/dynamic-xml.service.js       |  3 +-
 services/dynamic/dynamic-xml.tester.js        |  2 +-
 services/dynamic/dynamic-yaml.service.js      |  3 +-
 services/dynamic/dynamic-yaml.tester.js       |  2 +-
 .../eclipse-marketplace-base.js               |  2 +-
 .../eclipse-marketplace-downloads.tester.js   |  2 +-
 .../eclipse-marketplace-favorites.tester.js   |  2 +-
 .../eclipse-marketplace-license.tester.js     |  2 +-
 .../eclipse-marketplace-update.tester.js      |  2 +-
 .../eclipse-marketplace-version.tester.js     |  2 +-
 services/elm-package/elm-package.service.js   |  2 +-
 services/elm-package/elm-package.tester.js    |  2 +-
 services/f-droid/f-droid.service.js           |  7 +--
 services/f-droid/f-droid.tester.js            |  2 +-
 services/flip/flip.service.js                 |  2 +-
 services/flip/flip.tester.js                  |  2 +-
 services/gem/gem-downloads.service.js         | 10 +---
 services/gem/gem-downloads.tester.js          |  2 +-
 services/gem/gem-owner.service.js             |  2 +-
 services/gem/gem-owner.tester.js              |  2 +-
 services/gem/gem-rank.service.js              |  8 +--
 services/gem/gem-rank.tester.js               |  2 +-
 services/gem/gem-version.service.js           |  3 +-
 services/gem/gem-version.tester.js            |  2 +-
 services/gemnasium/gemnasium.service.js       |  2 +-
 services/gemnasium/gemnasium.tester.js        |  2 +-
 services/github/github-auth-service.js        |  2 +-
 .../github/github-commit-activity.tester.js   |  2 +-
 .../github/github-commit-status.tester.js     |  2 +-
 .../github/github-commits-since.tester.js     |  2 +-
 services/github/github-common-fetch.js        |  2 +-
 services/github/github-contributors.tester.js |  2 +-
 services/github/github-downloads.tester.js    |  2 +-
 services/github/github-followers.tester.js    |  2 +-
 services/github/github-forks.tester.js        |  2 +-
 services/github/github-issue-detail.tester.js |  2 +-
 services/github/github-issues.tester.js       |  2 +-
 services/github/github-languages.tester.js    |  2 +-
 services/github/github-last-commit.tester.js  |  2 +-
 services/github/github-license.tester.js      |  2 +-
 services/github/github-manifest.tester.js     |  2 +-
 services/github/github-package-json.tester.js |  2 +-
 .../github-pull-request-check-state.tester.js |  2 +-
 services/github/github-release.tester.js      |  2 +-
 services/github/github-repo-size.tester.js    |  2 +-
 services/github/github-search.tester.js       |  2 +-
 services/github/github-size.tester.js         |  2 +-
 services/github/github-stars.tester.js        |  2 +-
 services/github/github-tag.tester.js          |  2 +-
 services/github/github-watchers.tester.js     |  2 +-
 .../gitlab/gitlab-pipeline-status.service.js  |  5 +-
 .../gitlab/gitlab-pipeline-status.tester.js   |  2 +-
 services/gitter/gitter.tester.js              |  2 +-
 services/gratipay/gratipay.service.js         |  2 +-
 services/gratipay/gratipay.tester.js          |  2 +-
 services/hackage/hackage.tester.js            |  2 +-
 services/hexpm/hexpm.service.js               | 14 ++---
 services/hexpm/hexpm.tester.js                |  2 +-
 services/homebrew/homebrew.tester.js          |  2 +-
 services/imagelayers/imagelayers.service.js   |  2 +-
 services/imagelayers/imagelayers.tester.js    |  2 +-
 services/index.js                             |  9 ++-
 services/issuestats/issuestats.service.js     |  2 +-
 services/issuestats/issuestats.tester.js      |  2 +-
 services/itunes/itunes.service.js             |  3 +-
 services/itunes/itunes.tester.js              |  2 +-
 services/jenkins/jenkins-coverage.service.js  |  2 +-
 services/jenkins/jenkins-coverage.tester.js   |  2 +-
 .../jenkins-plugin-installs.service.js        |  3 +-
 .../jenkins/jenkins-plugin-installs.tester.js |  2 +-
 .../jenkins/jenkins-plugin-version.tester.js  |  2 +-
 services/jetbrains/jetbrains-base.js          |  3 +-
 services/jetbrains/jetbrains.tester.js        |  2 +-
 services/jira/jira-base.js                    |  2 +-
 services/jira/jira-issue.tester.js            |  2 +-
 services/jira/jira-sprint.tester.js           |  2 +-
 services/jitpack/jitpack.tester.js            |  2 +-
 .../leanpub/leanpub-book-summary.service.js   |  2 +-
 .../leanpub/leanpub-book-summary.tester.js    |  2 +-
 services/lgtm/lgtm.tester.js                  |  6 +-
 services/liberapay/liberapay.tester.js        | 15 +++--
 services/librariesio/librariesio-base.js      |  3 +-
 .../librariesio-dependencies.tester.js        |  2 +-
 .../librariesio-dependent-repos.tester.js     |  2 +-
 .../librariesio-dependents.tester.js          |  2 +-
 .../librariesio-sourcerank.tester.js          |  2 +-
 services/libscore/libscore.service.js         |  2 +-
 services/libscore/libscore.tester.js          |  2 +-
 services/luarocks/luarocks.tester.js          |  2 +-
 services/magnumci/magnumci.service.js         |  2 +-
 services/magnumci/magnumci.tester.js          |  2 +-
 services/maintenance/maintenance.tester.js    |  2 +-
 services/matrix/matrix.service.js             |  5 +-
 services/matrix/matrix.tester.js              |  2 +-
 .../maven-central/maven-central.tester.js     |  2 +-
 .../maven-metadata/maven-metadata.tester.js   |  7 +--
 services/microbadger/microbadger.tester.js    |  2 +-
 services/myget/myget.tester.js                | 57 ++-----------------
 services/nexus/nexus.service.js               |  5 +-
 services/nexus/nexus.tester.js                |  2 +-
 services/node/node.tester.js                  |  2 +-
 services/npm/npm-base.js                      |  3 +-
 services/npm/npm-collaborators.tester.js      |  2 +-
 services/npm/npm-dependency-version.tester.js |  2 +-
 services/npm/npm-downloads.service.js         |  2 +-
 services/npm/npm-downloads.tester.js          |  2 +-
 services/npm/npm-license.tester.js            |  2 +-
 services/npm/npm-type-definitions.tester.js   |  2 +-
 services/npm/npm-version.service.js           |  2 +-
 services/npm/npm-version.tester.js            |  2 +-
 services/nsp/nsp.service.js                   |  2 +-
 services/nsp/nsp.tester.js                    |  2 +-
 services/nuget/nuget-v2-service-family.js     |  4 +-
 services/nuget/nuget-v3-service-family.js     |  3 +-
 services/nuget/nuget.tester.js                |  5 +-
 .../opencollective-all.tester.js              |  2 +-
 .../opencollective-backers.tester.js          |  2 +-
 .../opencollective/opencollective-base.js     |  2 +-
 .../opencollective-by-tier.tester.js          |  2 +-
 .../opencollective-sponsors.tester.js         |  2 +-
 services/osslifecycle/osslifecycle.service.js |  3 +-
 services/osslifecycle/osslifecycle.tester.js  |  9 ++-
 .../packagecontrol/packagecontrol.tester.js   |  8 ++-
 services/packagist/packagist.tester.js        |  7 +--
 services/php-eye/php-eye-hhvm.tester.js       |  9 +--
 .../php-eye/php-eye-php-version.tester.js     |  7 +--
 .../powershellgallery.service.js              |  6 +-
 .../powershellgallery.tester.js               |  2 +-
 services/pub/pub.tester.js                    |  5 +-
 .../puppetforge/puppetforge-modules.tester.js |  2 +-
 services/pypi/pypi-base.js                    |  2 +-
 services/pypi/pypi-downloads.service.js       |  2 +-
 services/pypi/pypi.tester.js                  |  2 +-
 services/readthedocs/readthedocs.service.js   |  3 +-
 services/readthedocs/readthedocs.tester.js    |  2 +-
 services/redmine/redmine.service.js           |  2 +-
 services/redmine/redmine.tester.js            |  8 ++-
 services/requires/requires.service.js         |  2 +-
 services/requires/requires.tester.js          |  2 +-
 services/resharper/resharper.tester.js        |  2 +-
 services/scrutinizer/scrutinizer.tester.js    | 10 ++--
 services/shippable/shippable.service.js       |  3 +-
 services/shippable/shippable.tester.js        |  2 +-
 services/snap-ci/snap-ci.service.js           |  2 +-
 services/snap-ci/snap-ci.tester.js            |  2 +-
 services/snyk/snyk-vulnerability-base.js      |  2 +-
 .../snyk/snyk-vulnerability-github.tester.js  |  2 +-
 .../snyk/snyk-vulnerability-npm.service.js    |  2 +-
 .../snyk/snyk-vulnerability-npm.tester.js     |  2 +-
 services/sonarqube/sonarqube.tester.js        |  2 +-
 services/sourceforge/sourceforge.tester.js    |  2 +-
 services/sourcegraph/sourcegraph.service.js   |  2 +-
 services/sourcegraph/sourcegraph.tester.js    |  3 +-
 services/spiget/spiget-base.js                |  2 +-
 .../spiget/spiget-download-size.tester.js     |  2 +-
 services/spiget/spiget-downloads.service.js   |  2 +-
 services/spiget/spiget-downloads.tester.js    |  2 +-
 .../spiget/spiget-latest-version.service.js   |  5 +-
 .../spiget/spiget-latest-version.tester.js    |  2 +-
 services/spiget/spiget-rating.service.js      |  3 +-
 services/spiget/spiget-rating.tester.js       |  3 +-
 .../spiget/spiget-tested-versions.tester.js   |  5 +-
 .../stackexchange-monthlyquestions.service.js |  4 +-
 .../stackexchange-monthlyquestions.tester.js  |  2 +-
 .../stackexchange-reputation.service.js       |  4 +-
 .../stackexchange-reputation.tester.js        |  2 +-
 .../stackexchange-taginfo.service.js          |  4 +-
 .../stackexchange-taginfo.tester.js           |  2 +-
 services/static-badge/static-badge.tester.js  |  2 +-
 services/steam/steam-base.js                  |  2 +-
 services/steam/steam-workshop.service.js      |  6 +-
 services/steam/steam-workshop.tester.js       |  2 +-
 services/suggest/suggest.tester.js            |  7 +--
 services/swagger/swagger.service.js           |  2 +-
 services/swagger/swagger.tester.js            |  2 +-
 services/symfony/symfony-insight.service.js   |  3 +-
 services/symfony/symfony-insight.tester.js    |  3 +-
 services/teamcity/teamcity-base.js            |  2 +-
 services/teamcity/teamcity-build.tester.js    |  2 +-
 .../teamcity/teamcity-coverage.service.js     |  4 +-
 services/teamcity/teamcity-coverage.tester.js |  2 +-
 services/travis/travis-build.service.js       |  3 +-
 services/travis/travis-build.tester.js        |  2 +-
 services/travis/travis-php-version.tester.js  |  2 +-
 services/twitter/twitter.tester.js            |  9 +--
 services/uptimerobot/uptimerobot-base.js      |  3 +-
 .../uptimerobot/uptimerobot-ratio.tester.js   |  2 +-
 .../uptimerobot/uptimerobot-status.tester.js  |  2 +-
 .../vaadin-directory.tester.js                |  9 +--
 services/versioneye/versioneye.service.js     |  2 +-
 services/versioneye/versioneye.tester.js      |  2 +-
 .../visual-studio-marketplace-base.js         |  3 +-
 ...ual-studio-marketplace-downloads.tester.js |  2 +-
 ...visual-studio-marketplace-rating.tester.js |  2 +-
 ...isual-studio-marketplace-version.tester.js |  2 +-
 services/waffle/waffle.tester.js              |  2 +-
 services/website/website.tester.js            |  2 +-
 services/wercker/wercker.service.js           |  2 +-
 services/wercker/wercker.tester.js            |  2 +-
 services/wheelmap/wheelmap.service.js         |  3 +-
 services/wheelmap/wheelmap.tester.js          |  2 +-
 services/wordpress/wordpress-base.js          |  4 +-
 .../wordpress/wordpress-downloads.service.js  |  7 +--
 .../wordpress/wordpress-downloads.tester.js   |  2 +-
 .../wordpress/wordpress-platform.service.js   |  4 +-
 .../wordpress/wordpress-platform.tester.js    |  8 +--
 services/wordpress/wordpress-rating.tester.js |  2 +-
 .../wordpress/wordpress-version.tester.js     |  8 +--
 338 files changed, 511 insertions(+), 593 deletions(-)
 create mode 100644 core/base-service/index.js

diff --git a/core/base-service/index.js b/core/base-service/index.js
new file mode 100644
index 0000000000..85fce21a5f
--- /dev/null
+++ b/core/base-service/index.js
@@ -0,0 +1,35 @@
+'use strict'
+
+const BaseService = require('../../services/base')
+const BaseJsonService = require('../../services/base-json')
+const NonMemoryCachingBaseService = require('../../services/base-non-memory-caching')
+const BaseStaticService = require('../../services/base-static')
+const BaseSvgScrapingService = require('../../services/base-svg-scraping')
+const BaseXmlService = require('../../services/base-xml')
+const BaseYamlService = require('../../services/base-yaml')
+
+const deprecatedService = require('../../services/deprecated-service')
+
+const {
+  NotFound,
+  InvalidResponse,
+  Inaccessible,
+  InvalidParameter,
+  Deprecated,
+} = require('../../services/errors')
+
+module.exports = {
+  BaseService,
+  BaseJsonService,
+  NonMemoryCachingBaseService,
+  BaseStaticService,
+  BaseSvgScrapingService,
+  BaseXmlService,
+  BaseYamlService,
+  deprecatedService,
+  NotFound,
+  InvalidResponse,
+  Inaccessible,
+  InvalidParameter,
+  Deprecated,
+}
diff --git a/doc/TUTORIAL.md b/doc/TUTORIAL.md
index d52569bcce..4d58aea59c 100644
--- a/doc/TUTORIAL.md
+++ b/doc/TUTORIAL.md
@@ -110,7 +110,7 @@ As a first step we will look at the code for an example which generates a badge
 ```js
 'use strict'                                         // (1)
 
-const BaseService = require('../base')               // (2)
+const { BaseService } = require('..')                // (2)
 
 module.exports = class Example extends BaseService { // (3)
 
@@ -134,7 +134,7 @@ module.exports = class Example extends BaseService { // (3)
 Description of the code:
 
 1. We declare strict mode at the start of each file. This prevents certain classes of error such as undeclared variables.
-2. Our service badge class will extend `BaseService` so we need to require it. We declare variables with `const` and `let` in preference to `var`.
+2. Our service badge class will extend `BaseService` so we need to require it. Variables are declared with `const` and `let` in preference to `var`.
 3. Our module must export a class which extends `BaseService`.
 4. `route()` declares the URL path at which the service operates. It also maps components of the URL path to handler parameters.
     * `base` defines the first part of the URL that doesn't change, e.g. `/example/`.
@@ -170,8 +170,8 @@ This example is based on the [Ruby Gems version](https://github.com/badges/shiel
 ```js
 'use strict'                                                    // (1)
 
-const BaseJsonService = require('../base-json')                 // (2)
-const { renderVersionBadge } = require('../../lib/version')     // (3)
+const { renderVersionBadge } = require('../../lib/version')     // (2)
+const { BaseJsonService } = require('..')                       // (3)
 
 const Joi = require('joi')                                      // (4)
 const schema = Joi.object({                                     // (4)
@@ -212,13 +212,13 @@ module.exports = class GemVersion extends BaseJsonService {     // (5)
 
 Description of the code:
 1. As with the first example, we declare strict mode at the start of each file.
-2. Our badge will query a JSON API so we will extend `BaseJsonService` instead of `BaseService`. This contains some helpers to reduce the need for boilerplate when calling a JSON API.
-3. In this case we are making a version badge, which is a common pattern. Instead of directly returning an object in this badge we will use a helper function to format our data consistently. There are a variety of helper functions to help with common tasks in `/lib`. Some useful generic helpers can be found in:
+2. In this case we are making a version badge, which is a common pattern. Instead of directly returning an object in this badge we will use a helper function to format our data consistently. There are a variety of helper functions to help with common tasks in `/lib`. Some useful generic helpers can be found in:
     * [build-status.js](https://github.com/badges/shields/blob/master/lib/build-status.js)
     * [color-formatters.js](https://github.com/badges/shields/blob/master/lib/color-formatters.js)
     * [licenses.js](https://github.com/badges/shields/blob/master/lib/licenses.js)
     * [text-formatters.js](https://github.com/badges/shields/blob/master/lib/text-formatters.js)
     * [version.js](https://github.com/badges/shields/blob/master/lib/version.js)
+3. Our badge will query a JSON API so we will extend `BaseJsonService` instead of `BaseService`. This contains some helpers to reduce the need for boilerplate when calling a JSON API.
 4. We perform input validation by defining a schema which we expect the JSON we receive to conform to. This is done using [Joi](https://github.com/hapijs/joi). Defining a schema means we can ensure the JSON we receive meets our expectations and throw an error if we receive unexpected input without having to explicitly code validation checks. The schema also acts as a filter on the JSON object. Any properties we're going to reference need to be validated, otherwise they will be filtered out. In this case our schema declares that we expect to receive an object which must have a property called 'status', which is a string.
 5. Our module exports a class which extends `BaseJsonService`
 6. As with our previous badge, we need to declare a route. This time we will capture a variable called `gem`.
@@ -253,7 +253,16 @@ Specifically `BaseJsonService` will handle the following errors for us:
 * API returns a response which can't be parsed as JSON
 * API returns a response which doesn't validate against our schema
 
-Sometimes it may be necessary to manually throw an exception to deal with a non-standard error condition. If so, standard exceptions can be imported from [errors.js](https://github.com/badges/shields/blob/master/services/errors.js) and thrown.
+Sometimes it may be necessary to manually throw an exception to deal with a
+non-standard error condition. If so, there are several standard exceptions that can be used. These exceptions are defined in
+[errors.js](https://github.com/badges/shields/blob/master/services/errors.js)
+and can be imported via the import shortcut and then thrown:
+
+```js
+const { NotFound } = require('..')
+
+throw new NotFound({ prettyMessage: 'package not found' })
+```
 
 ### (4.4) Adding an Example to the Front Page
 
diff --git a/doc/deprecating-badges.md b/doc/deprecating-badges.md
index 98f2ba8f4e..d11f0c0ec4 100644
--- a/doc/deprecating-badges.md
+++ b/doc/deprecating-badges.md
@@ -40,10 +40,10 @@ module.exports = deprecatedService({
 
 Locate the test file(s) for the service, which can be found in `*.tester.js` files located in the service directory (`./services/:service-name/`), such as `./services/imagelayers/imagelayers.tester.js`.
 
-With `DeprecatedService` classes we cannot use the utility functions from `create-service-tester.js` so you will need to create the `ServiceTester` class directly. For example:
+With `DeprecatedService` classes we cannot use `createServiceTester()` so you will need to create the `ServiceTester` class directly. For example:
 
 ```js
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'imagelayers',
@@ -69,7 +69,8 @@ Here is an example of what the final result would look like for a test file:
 ```js
 'use strict'
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
+
 const t = (module.exports = new ServiceTester({
   id: 'imagelayers',
   title: 'ImageLayers',
diff --git a/doc/rewriting-services.md b/doc/rewriting-services.md
index 54c256a34e..aabac962fe 100644
--- a/doc/rewriting-services.md
+++ b/doc/rewriting-services.md
@@ -8,7 +8,7 @@ Meanwhile, the legacy services extend from an abstract
 adapter called [LegacyService][] which provides a place to put the
 `camp.route()` invocation. The wrapper extends from [BaseService][], so it
 supports badge examples via `category`, `examples`, and `route`. Setting `route`
-also enables `create-service-tester.js` to infer a service's base path, reducing
+also enables `createServiceTester()` to infer a service's base path, reducing
 boilerplate for [creating the tester][creating a tester].
 
 Legacy services look like:
@@ -278,7 +278,7 @@ https://github.com/hapijs/joi/blob/master/API.md
 Switch to `createServiceTester`:
 
 ```js
-const t = require('../create-service-tester')()
+const t = (module.exports = require('..').createServiceTester())
 ```
 
 This may require updating the URLs, which will be relative to the service's base
diff --git a/doc/service-tests.md b/doc/service-tests.md
index ad888ee734..3238efa6ec 100644
--- a/doc/service-tests.md
+++ b/doc/service-tests.md
@@ -37,11 +37,19 @@ We'll start by adding some boilerplate to our file:
 
 const Joi = require('joi')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 ```
 
-1. Import [Joi][] We'll use this to make assertions. This is the same library we use to define schema for validation in the main badge class.
-2. If our `.service.js` module exports a single class, we can `require('../create-service-tester')` and use convention to create a `ServiceTester` object. Calling this inside `services/wercker/wercker.tester.js` will create a `ServiceTester` object configured for the service exported in `services/wercker/wercker.service.js`. We will add our tests to this `ServiceTester` object `t`, which is exported from the module.
+1. Import [Joi][] We'll use this to make assertions. This is the same library
+   we use to define schema for validation in the main badge class.
+
+2. If our `.service.js` module exports a single class, we can
+   `require('..').createServiceTester()`, which uses convention to create a
+   `ServiceTester` object. Calling this inside
+   `services/wercker/wercker.tester.js` will create a `ServiceTester` object
+   configured for the service exported in `services/wercker/wercker.service.js`.
+   We will add our tests to this `ServiceTester` object `t`, which is exported
+   from the module.
 
 ### (2) Our First Test Case
 
diff --git a/services/amo/amo.tester.js b/services/amo/amo.tester.js
index 5e5d0eb4d2..d22e2d021c 100644
--- a/services/amo/amo.tester.js
+++ b/services/amo/amo.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const {
   isMetric,
   isStarRating,
diff --git a/services/ansible/ansible-quality.service.js b/services/ansible/ansible-quality.service.js
index 98c96498ac..16eed6a4f8 100644
--- a/services/ansible/ansible-quality.service.js
+++ b/services/ansible/ansible-quality.service.js
@@ -1,9 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
 const { floorCount } = require('../../lib/color-formatters')
-const { InvalidResponse } = require('../errors')
+const { BaseJsonService, InvalidResponse } = require('..')
 
 const ansibleContentSchema = Joi.object({
   quality_score: Joi.number()
diff --git a/services/ansible/ansible-quality.tester.js b/services/ansible/ansible-quality.tester.js
index b7563eafc5..cb9dced030 100644
--- a/services/ansible/ansible-quality.tester.js
+++ b/services/ansible/ansible-quality.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { nonNegativeInteger } = require('../validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('quality score (valid)')
   .get('/432.json')
diff --git a/services/ansible/ansible-role.service.js b/services/ansible/ansible-role.service.js
index bc8afb9703..e987da5574 100644
--- a/services/ansible/ansible-role.service.js
+++ b/services/ansible/ansible-role.service.js
@@ -1,9 +1,9 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
 const { downloadCount } = require('../../lib/color-formatters')
 const { metric } = require('../../lib/text-formatters')
+const { BaseJsonService } = require('..')
 const { nonNegativeInteger } = require('../validators')
 
 const ansibleRoleSchema = Joi.object({
diff --git a/services/ansible/ansible-role.tester.js b/services/ansible/ansible-role.tester.js
index cad57ee271..15168be3fc 100644
--- a/services/ansible/ansible-role.tester.js
+++ b/services/ansible/ansible-role.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isMetric } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/apm/apm.service.js b/services/apm/apm.service.js
index db481c54f7..9844927f34 100644
--- a/services/apm/apm.service.js
+++ b/services/apm/apm.service.js
@@ -4,8 +4,7 @@ const Joi = require('joi')
 const { renderLicenseBadge } = require('../../lib/licenses')
 const { renderVersionBadge } = require('../../lib/version')
 const { metric } = require('../../lib/text-formatters')
-const BaseJsonService = require('../base-json')
-const { InvalidResponse } = require('../errors')
+const { BaseJsonService, InvalidResponse } = require('..')
 const { nonNegativeInteger } = require('../validators')
 
 const keywords = ['atom']
diff --git a/services/apm/apm.tester.js b/services/apm/apm.tester.js
index 9e659f8788..6a425a0141 100644
--- a/services/apm/apm.tester.js
+++ b/services/apm/apm.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { invalidJSON } = require('../response-fixtures')
 const { isMetric, isVPlusTripleDottedVersion } = require('../test-validators')
 
diff --git a/services/appveyor/appveyor-base.js b/services/appveyor/appveyor-base.js
index c3e773a558..e8b1902434 100644
--- a/services/appveyor/appveyor-base.js
+++ b/services/appveyor/appveyor-base.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 const { nonNegativeInteger } = require('../validators')
 const { isBuildStatus } = require('../../lib/build-status')
 
diff --git a/services/appveyor/appveyor-ci.tester.js b/services/appveyor/appveyor-ci.tester.js
index d774955131..d5325bb8b2 100644
--- a/services/appveyor/appveyor-ci.tester.js
+++ b/services/appveyor/appveyor-ci.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isBuildStatus } = require('../../lib/build-status')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('CI status')
   .get('/gruntjs/grunt.json')
diff --git a/services/appveyor/appveyor-tests.tester.js b/services/appveyor/appveyor-tests.tester.js
index 71fe235649..4260c1e341 100644
--- a/services/appveyor/appveyor-tests.tester.js
+++ b/services/appveyor/appveyor-tests.tester.js
@@ -18,7 +18,7 @@ const isCompactCustomAppveyorTestTotals = Joi.string().regex(
   /^💃 [0-9]+( \| 🤦‍♀️ [0-9]+)?( \| 🤷 [0-9]+)?$/
 )
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Test status')
   .get('/NZSmartie/coap-net-iu0to.json')
diff --git a/services/aur/aur.service.js b/services/aur/aur.service.js
index 9a2e8fd93f..1b1e4d304a 100644
--- a/services/aur/aur.service.js
+++ b/services/aur/aur.service.js
@@ -3,8 +3,7 @@
 const Joi = require('joi')
 const { floorCount: floorCountColor } = require('../../lib/color-formatters')
 const { addv, metric } = require('../../lib/text-formatters')
-const BaseJsonService = require('../base-json')
-const { NotFound } = require('../errors')
+const { BaseJsonService, NotFound } = require('..')
 const { nonNegativeInteger } = require('../validators')
 
 const aurSchema = Joi.object({
diff --git a/services/aur/aur.tester.js b/services/aur/aur.tester.js
index 831200e464..216361f8d9 100644
--- a/services/aur/aur.tester.js
+++ b/services/aur/aur.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const {
   isVPlusDottedVersionNClausesWithOptionalSuffix,
   isMetric,
diff --git a/services/azure-devops/azure-devops-base.js b/services/azure-devops/azure-devops-base.js
index 2f56a4859e..a628e97fbf 100644
--- a/services/azure-devops/azure-devops-base.js
+++ b/services/azure-devops/azure-devops-base.js
@@ -1,8 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
-const { NotFound } = require('../errors')
+const { BaseJsonService, NotFound } = require('..')
 
 const latestBuildSchema = Joi.object({
   count: Joi.number().required(),
diff --git a/services/azure-devops/azure-devops-build.service.js b/services/azure-devops/azure-devops-build.service.js
index 80f6f420dd..ad61500d00 100644
--- a/services/azure-devops/azure-devops-build.service.js
+++ b/services/azure-devops/azure-devops-build.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const BaseSvgService = require('../base-svg-scraping')
-const { NotFound } = require('../errors')
+const { NotFound } = require('..')
 const { keywords, fetch } = require('./azure-devops-helpers')
 const { renderBuildStatusBadge } = require('../../lib/build-status')
 
diff --git a/services/azure-devops/azure-devops-build.tester.js b/services/azure-devops/azure-devops-build.tester.js
index dcc0f79f42..3d26683e31 100644
--- a/services/azure-devops/azure-devops-build.tester.js
+++ b/services/azure-devops/azure-devops-build.tester.js
@@ -6,7 +6,7 @@ const { isBuildStatus } = require('../../lib/build-status')
 // https://dev.azure.com/totodem/Shields.io is a public Azure DevOps project
 // solely created for Shields.io testing.
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('default branch')
   .get(
diff --git a/services/azure-devops/azure-devops-coverage.tester.js b/services/azure-devops/azure-devops-coverage.tester.js
index 95fd8895d3..2fff1e6d1a 100644
--- a/services/azure-devops/azure-devops-coverage.tester.js
+++ b/services/azure-devops/azure-devops-coverage.tester.js
@@ -53,7 +53,7 @@ const secondLinesCovStat = {
 const expCoverageSingleReport = '83%'
 const expCoverageMultipleReports = '77%'
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('default branch coverage')
   .get(`${uriPrefix}/${linuxDefinitionId}.json`)
diff --git a/services/azure-devops/azure-devops-release.tester.js b/services/azure-devops/azure-devops-release.tester.js
index d63042f102..72a213ece4 100644
--- a/services/azure-devops/azure-devops-release.tester.js
+++ b/services/azure-devops/azure-devops-release.tester.js
@@ -6,7 +6,7 @@ const { isBuildStatus } = require('../../lib/build-status')
 // https://dev.azure.com/totodem/Shields.io is a public Azure DevOps project
 // solely created for Shields.io testing.
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('release status is succeeded')
   .get(
diff --git a/services/azure-devops/azure-devops-tests.tester.js b/services/azure-devops/azure-devops-tests.tester.js
index 2ad733cb09..1cad65dc04 100644
--- a/services/azure-devops/azure-devops-tests.tester.js
+++ b/services/azure-devops/azure-devops-tests.tester.js
@@ -113,7 +113,7 @@ const isCompactCustomAzureDevOpsTestTotals = isAzureDevOpsTestTotals(
   true
 )
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('unknown build definition')
   .get(`${uriPrefix}/${nonExistentDefinitionId}.json`)
diff --git a/services/beerpay/beerpay.service.js b/services/beerpay/beerpay.service.js
index dc3e1cf6f9..8b2f991b26 100644
--- a/services/beerpay/beerpay.service.js
+++ b/services/beerpay/beerpay.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 
 const schema = Joi.object({
   total_amount: Joi.number()
diff --git a/services/beerpay/beerpay.tester.js b/services/beerpay/beerpay.tester.js
index 6632a1b2a6..82568ace5d 100644
--- a/services/beerpay/beerpay.tester.js
+++ b/services/beerpay/beerpay.tester.js
@@ -5,7 +5,7 @@ const { withRegex } = require('../test-validators')
 
 const amountOfMoney = withRegex(/^\$[0-9]+(\.[0-9]+)?/)
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('funding')
   .get('/hashdog/scrapfy-chrome-extension.json')
diff --git a/services/bintray/bintray.service.js b/services/bintray/bintray.service.js
index d5f71ff239..d71465eb16 100644
--- a/services/bintray/bintray.service.js
+++ b/services/bintray/bintray.service.js
@@ -3,8 +3,8 @@
 const Joi = require('joi')
 
 const { renderVersionBadge } = require('../../lib/version')
-const BaseJsonService = require('../base-json')
 const serverSecrets = require('../../lib/server-secrets')
+const { BaseJsonService } = require('..')
 
 const schema = Joi.object()
   .keys({
diff --git a/services/bintray/bintray.tester.js b/services/bintray/bintray.tester.js
index 63b8d73566..c84b3627c4 100644
--- a/services/bintray/bintray.tester.js
+++ b/services/bintray/bintray.tester.js
@@ -5,7 +5,7 @@ const {
   isVPlusDottedVersionNClausesWithOptionalSuffix,
 } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('version')
   .get('/asciidoctor/maven/asciidoctorj.json')
diff --git a/services/bitbucket/bitbucket-issues.service.js b/services/bitbucket/bitbucket-issues.service.js
index 0917b48f33..38bbca2941 100644
--- a/services/bitbucket/bitbucket-issues.service.js
+++ b/services/bitbucket/bitbucket-issues.service.js
@@ -1,8 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
 const { metric } = require('../../lib/text-formatters')
+const { BaseJsonService } = require('..')
 const { nonNegativeInteger } = require('../validators')
 
 const bitbucketIssuesSchema = Joi.object({
diff --git a/services/bitbucket/bitbucket-pipelines.service.js b/services/bitbucket/bitbucket-pipelines.service.js
index d1253d4581..f5c19eca69 100644
--- a/services/bitbucket/bitbucket-pipelines.service.js
+++ b/services/bitbucket/bitbucket-pipelines.service.js
@@ -1,8 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
 const { renderBuildStatusBadge } = require('../../lib/build-status')
+const { BaseJsonService } = require('..')
 
 const bitbucketPipelinesSchema = Joi.object({
   values: Joi.array()
diff --git a/services/bitbucket/bitbucket-pull-request.service.js b/services/bitbucket/bitbucket-pull-request.service.js
index 0c6f610984..496983e5bf 100644
--- a/services/bitbucket/bitbucket-pull-request.service.js
+++ b/services/bitbucket/bitbucket-pull-request.service.js
@@ -1,10 +1,10 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
 const serverSecrets = require('../../lib/server-secrets')
 const { metric } = require('../../lib/text-formatters')
 const { nonNegativeInteger } = require('../validators')
+const { BaseJsonService } = require('..')
 
 const bitbucketPullRequestSchema = Joi.object({
   size: nonNegativeInteger,
diff --git a/services/bitbucket/bitbucket.tester.js b/services/bitbucket/bitbucket.tester.js
index 75601ef8d3..b9c73f3d2c 100644
--- a/services/bitbucket/bitbucket.tester.js
+++ b/services/bitbucket/bitbucket.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const {
   mockBitbucketCreds,
   mockBitbucketServerCreds,
diff --git a/services/bithound/bithound.service.js b/services/bithound/bithound.service.js
index 7c090dee8d..0a301c300e 100644
--- a/services/bithound/bithound.service.js
+++ b/services/bithound/bithound.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const deprecatedService = require('../deprecated-service')
+const { deprecatedService } = require('..')
 
 // bitHound integration - deprecated as of July 2018
 module.exports = deprecatedService({
diff --git a/services/bithound/bithound.tester.js b/services/bithound/bithound.tester.js
index e4f65895f3..5a9057e0f5 100644
--- a/services/bithound/bithound.tester.js
+++ b/services/bithound/bithound.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'bithound',
diff --git a/services/bitrise/bitrise.tester.js b/services/bitrise/bitrise.tester.js
index 86fad8afb7..c978ab7077 100644
--- a/services/bitrise/bitrise.tester.js
+++ b/services/bitrise/bitrise.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'bitrise',
diff --git a/services/bountysource/bountysource.service.js b/services/bountysource/bountysource.service.js
index e6cd100d1b..5f8538dabd 100644
--- a/services/bountysource/bountysource.service.js
+++ b/services/bountysource/bountysource.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 const Joi = require('joi')
 const { nonNegativeInteger } = require('../validators')
 const { metric } = require('../../lib/text-formatters')
diff --git a/services/bountysource/bountysource.tester.js b/services/bountysource/bountysource.tester.js
index df7b218b6f..062aa4178c 100644
--- a/services/bountysource/bountysource.tester.js
+++ b/services/bountysource/bountysource.tester.js
@@ -1,8 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
 const { isMetric } = require('../test-validators')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'bountysource',
diff --git a/services/bower/bower-base.js b/services/bower/bower-base.js
index 3b73cf2c37..5f81de29bb 100644
--- a/services/bower/bower-base.js
+++ b/services/bower/bower-base.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 
 const schema = Joi.object()
   .keys({
diff --git a/services/bower/bower-version.service.js b/services/bower/bower-version.service.js
index 43b7d0c5ce..9b4bc2059f 100644
--- a/services/bower/bower-version.service.js
+++ b/services/bower/bower-version.service.js
@@ -2,7 +2,7 @@
 
 const BaseBowerService = require('./bower-base')
 const { renderVersionBadge } = require('../../lib/version')
-const { InvalidResponse } = require('../errors')
+const { InvalidResponse } = require('..')
 
 module.exports = class BowerVersion extends BaseBowerService {
   static get category() {
diff --git a/services/bower/bower.tester.js b/services/bower/bower.tester.js
index c67e2e84ae..7cd7068217 100644
--- a/services/bower/bower.tester.js
+++ b/services/bower/bower.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isVPlusDottedVersionAtLeastOne } = require('../test-validators')
 
 const isBowerPrereleaseVersion = Joi.string().regex(
diff --git a/services/bstats/bstats-players.service.js b/services/bstats/bstats-players.service.js
index d2966f725d..84b3ddd37e 100644
--- a/services/bstats/bstats-players.service.js
+++ b/services/bstats/bstats-players.service.js
@@ -1,9 +1,9 @@
 'use strict'
 
-const BaseJsonService = require('../base-json')
+const Joi = require('joi')
 const { metric } = require('../../lib/text-formatters')
+const { BaseJsonService } = require('..')
 
-const Joi = require('joi')
 const schema = Joi.array()
   .items(Joi.array().items([Joi.number().required(), Joi.number().required()]))
   .required()
diff --git a/services/bstats/bstats-players.tester.js b/services/bstats/bstats-players.tester.js
index a43b53cc45..637a65332e 100644
--- a/services/bstats/bstats-players.tester.js
+++ b/services/bstats/bstats-players.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isMetric } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Players')
   .get('/1.json')
diff --git a/services/bstats/bstats-servers.service.js b/services/bstats/bstats-servers.service.js
index d47b4cf7ac..6a5b71e928 100644
--- a/services/bstats/bstats-servers.service.js
+++ b/services/bstats/bstats-servers.service.js
@@ -1,9 +1,9 @@
 'use strict'
 
-const BaseJsonService = require('../base-json')
+const Joi = require('joi')
 const { metric } = require('../../lib/text-formatters')
+const { BaseJsonService } = require('..')
 
-const Joi = require('joi')
 const schema = Joi.array()
   .items(Joi.array().items([Joi.number().required(), Joi.number().required()]))
   .required()
diff --git a/services/bstats/bstats-servers.tester.js b/services/bstats/bstats-servers.tester.js
index 803db610af..34fda5a91d 100644
--- a/services/bstats/bstats-servers.tester.js
+++ b/services/bstats/bstats-servers.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isMetric } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Servers')
   .get('/1.json')
diff --git a/services/bugzilla/bugzilla.tester.js b/services/bugzilla/bugzilla.tester.js
index e746612920..cc2664efc6 100644
--- a/services/bugzilla/bugzilla.tester.js
+++ b/services/bugzilla/bugzilla.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const bzBugStatus = Joi.equal(
   'unconfirmed',
diff --git a/services/buildkite/buildkite.tester.js b/services/buildkite/buildkite.tester.js
index d4c4f8b201..9393761bf1 100644
--- a/services/buildkite/buildkite.tester.js
+++ b/services/buildkite/buildkite.tester.js
@@ -1,9 +1,9 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
-const { invalidJSON } = require('../response-fixtures')
 const { isBuildStatus } = require('../../lib/build-status')
+const { invalidJSON } = require('../response-fixtures')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'buildkite',
diff --git a/services/bundlephobia/bundlephobia.service.js b/services/bundlephobia/bundlephobia.service.js
index 9b8f283e1b..f27be57b54 100644
--- a/services/bundlephobia/bundlephobia.service.js
+++ b/services/bundlephobia/bundlephobia.service.js
@@ -1,8 +1,8 @@
 'use strict'
 
 const prettyBytes = require('pretty-bytes')
-const LegacyService = require('../legacy-service')
 const { makeBadgeData: getBadgeData } = require('../../lib/badge-data')
+const LegacyService = require('../legacy-service')
 
 const keywords = ['node']
 
diff --git a/services/bundlephobia/bundlephobia.tester.js b/services/bundlephobia/bundlephobia.tester.js
index 4a519e9395..f4c8305d5e 100644
--- a/services/bundlephobia/bundlephobia.tester.js
+++ b/services/bundlephobia/bundlephobia.tester.js
@@ -1,8 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
 const { isFileSize } = require('../test-validators')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'bundlephobia',
diff --git a/services/cauditor/cauditor.service.js b/services/cauditor/cauditor.service.js
index b7eb3ba1d7..697410537f 100644
--- a/services/cauditor/cauditor.service.js
+++ b/services/cauditor/cauditor.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const deprecatedService = require('../deprecated-service')
+const { deprecatedService } = require('..')
 
 module.exports = deprecatedService({
   category: 'other',
diff --git a/services/cauditor/cauditor.tester.js b/services/cauditor/cauditor.tester.js
index b387ac4a19..80e6a16e80 100644
--- a/services/cauditor/cauditor.tester.js
+++ b/services/cauditor/cauditor.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'cauditor',
diff --git a/services/cdnjs/cdnjs.service.js b/services/cdnjs/cdnjs.service.js
index 275c2110b6..c0754892de 100644
--- a/services/cdnjs/cdnjs.service.js
+++ b/services/cdnjs/cdnjs.service.js
@@ -2,8 +2,7 @@
 
 const Joi = require('joi')
 const { renderVersionBadge } = require('../../lib/version')
-const BaseJsonService = require('../base-json')
-const { NotFound } = require('../errors')
+const { BaseJsonService, NotFound } = require('..')
 
 const cdnjsSchema = Joi.object({
   // optional due to non-standard 'not found' condition
diff --git a/services/cdnjs/cdnjs.tester.js b/services/cdnjs/cdnjs.tester.js
index b79a697e80..6b4f5a833b 100644
--- a/services/cdnjs/cdnjs.tester.js
+++ b/services/cdnjs/cdnjs.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isVPlusTripleDottedVersion } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('cdnjs (valid)')
   .get('/jquery.json')
diff --git a/services/chocolatey/chocolatey.tester.js b/services/chocolatey/chocolatey.tester.js
index cf12328283..064d8d7e6e 100644
--- a/services/chocolatey/chocolatey.tester.js
+++ b/services/chocolatey/chocolatey.tester.js
@@ -1,7 +1,6 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
 const {
   isMetric,
   isVPlusDottedVersionNClauses,
@@ -12,7 +11,7 @@ const {
   nuGetV2VersionJsonFirstCharZero,
   nuGetV2VersionJsonFirstCharNotZero,
 } = require('../nuget-fixtures')
-const { invalidJSON } = require('../response-fixtures')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'chocolatey',
@@ -34,22 +33,6 @@ t.create('total downloads (not found)')
   .get('/dt/not-a-real-package.json')
   .expectJSON({ name: 'downloads', value: 'not found' })
 
-t.create('total downloads (connection error)')
-  .get('/dt/scriptcs.json')
-  .networkOff()
-  .expectJSON({ name: 'downloads', value: 'inaccessible' })
-
-t.create('total downloads (unexpected response)')
-  .get('/dt/scriptcs.json')
-  .intercept(nock =>
-    nock('https://www.chocolatey.org')
-      .get(
-        '/api/v2/Packages()?%24filter=Id%20eq%20%27scriptcs%27%20and%20IsLatestVersion%20eq%20true'
-      )
-      .reply(invalidJSON)
-  )
-  .expectJSON({ name: 'downloads', value: 'unparseable json response' })
-
 // version
 
 t.create('version (valid)')
@@ -110,22 +93,6 @@ t.create('version (not found)')
   .get('/v/not-a-real-package.json')
   .expectJSON({ name: 'chocolatey', value: 'not found' })
 
-t.create('version (connection error)')
-  .get('/v/scriptcs.json')
-  .networkOff()
-  .expectJSON({ name: 'chocolatey', value: 'inaccessible' })
-
-t.create('version (unexpected response)')
-  .get('/v/scriptcs.json')
-  .intercept(nock =>
-    nock('https://www.chocolatey.org')
-      .get(
-        '/api/v2/Packages()?%24filter=Id%20eq%20%27scriptcs%27%20and%20IsLatestVersion%20eq%20true'
-      )
-      .reply(invalidJSON)
-  )
-  .expectJSON({ name: 'chocolatey', value: 'unparseable json response' })
-
 // version (pre)
 
 t.create('version (pre) (valid)')
@@ -185,19 +152,3 @@ t.create('version (pre) (mocked, blue badge)')
 t.create('version (pre) (not found)')
   .get('/vpre/not-a-real-package.json')
   .expectJSON({ name: 'chocolatey', value: 'not found' })
-
-t.create('version (pre) (connection error)')
-  .get('/vpre/scriptcs.json')
-  .networkOff()
-  .expectJSON({ name: 'chocolatey', value: 'inaccessible' })
-
-t.create('version (pre) (unexpected response)')
-  .get('/vpre/scriptcs.json')
-  .intercept(nock =>
-    nock('https://www.chocolatey.org')
-      .get(
-        '/api/v2/Packages()?%24filter=Id%20eq%20%27scriptcs%27%20and%20IsAbsoluteLatestVersion%20eq%20true'
-      )
-      .reply(invalidJSON)
-  )
-  .expectJSON({ name: 'chocolatey', value: 'unparseable json response' })
diff --git a/services/chrome-web-store/chrome-web-store.tester.js b/services/chrome-web-store/chrome-web-store.tester.js
index e7a5888b5b..833d8c9042 100644
--- a/services/chrome-web-store/chrome-web-store.tester.js
+++ b/services/chrome-web-store/chrome-web-store.tester.js
@@ -1,13 +1,12 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
-
 const {
   isVPlusDottedVersionAtLeastOne,
   isStarRating,
   isMetric,
 } = require('../test-validators')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'chrome-web-store',
diff --git a/services/cii-best-practices/cii-best-practices.service.js b/services/cii-best-practices/cii-best-practices.service.js
index 18f2e194ac..3b99ef99dd 100644
--- a/services/cii-best-practices/cii-best-practices.service.js
+++ b/services/cii-best-practices/cii-best-practices.service.js
@@ -1,11 +1,11 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
 const {
   colorScale,
   coveragePercentage: coveragePercentageColor,
 } = require('../../lib/color-formatters')
+const { BaseJsonService } = require('..')
 
 const ciiBestPracticesSchema = Joi.object({
   badge_level: Joi.string().required(),
diff --git a/services/cii-best-practices/cii-best-practices.tester.js b/services/cii-best-practices/cii-best-practices.tester.js
index 32c90c4cd4..5c7a78aee2 100644
--- a/services/cii-best-practices/cii-best-practices.tester.js
+++ b/services/cii-best-practices/cii-best-practices.tester.js
@@ -1,9 +1,9 @@
 'use strict'
 
 const Joi = require('joi')
-const t = require('../create-service-tester')()
 const { withRegex } = require('../test-validators')
-module.exports = t
+
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('live: level known project')
   .get(`/level/1.json`)
diff --git a/services/circleci/circleci.service.js b/services/circleci/circleci.service.js
index 8df0b1b3a5..5bb6c6a876 100644
--- a/services/circleci/circleci.service.js
+++ b/services/circleci/circleci.service.js
@@ -1,11 +1,11 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
 const {
   isBuildStatus,
   renderBuildStatusBadge,
 } = require('../../lib/build-status')
+const { BaseJsonService } = require('..')
 
 const circleSchema = Joi.array()
   .items(Joi.object({ status: isBuildStatus }))
diff --git a/services/circleci/circleci.tester.js b/services/circleci/circleci.tester.js
index 7621a48d79..807e771442 100644
--- a/services/circleci/circleci.tester.js
+++ b/services/circleci/circleci.tester.js
@@ -1,8 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
 const { isBuildStatus } = require('../../lib/build-status')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'circleci',
diff --git a/services/clojars/clojars-downloads.service.js b/services/clojars/clojars-downloads.service.js
index 8158c52580..f1282773f2 100644
--- a/services/clojars/clojars-downloads.service.js
+++ b/services/clojars/clojars-downloads.service.js
@@ -1,10 +1,10 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
 const { metric } = require('../../lib/text-formatters')
-const { nonNegativeInteger } = require('../validators')
 const { downloadCount: downloadsColor } = require('../../lib/color-formatters')
+const { nonNegativeInteger } = require('../validators')
+const { BaseJsonService } = require('..')
 
 const clojarsSchema = Joi.object({
   downloads: nonNegativeInteger,
diff --git a/services/clojars/clojars-downloads.tester.js b/services/clojars/clojars-downloads.tester.js
index f1d83cbe73..f06f4174b2 100644
--- a/services/clojars/clojars-downloads.tester.js
+++ b/services/clojars/clojars-downloads.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isMetric } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('clojars downloads (valid)')
   .get('/prismic.json')
diff --git a/services/clojars/clojars-version.service.js b/services/clojars/clojars-version.service.js
index c4ae6d3f6d..deae4dbd0c 100644
--- a/services/clojars/clojars-version.service.js
+++ b/services/clojars/clojars-version.service.js
@@ -1,9 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
-const { NotFound } = require('../errors')
 const { version: versionColor } = require('../../lib/color-formatters')
+const { BaseJsonService, NotFound } = require('..')
 
 const clojarsSchema = Joi.object({
   // optional due to non-standard 'not found' condition
diff --git a/services/clojars/clojars-version.tester.js b/services/clojars/clojars-version.tester.js
index f21d558e01..078acaf85b 100644
--- a/services/clojars/clojars-version.tester.js
+++ b/services/clojars/clojars-version.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('clojars (valid)')
   .get('/prismic.json')
diff --git a/services/cocoapods/cocoapods-apps.service.js b/services/cocoapods/cocoapods-apps.service.js
index cc4c68b60f..6bb4247f93 100644
--- a/services/cocoapods/cocoapods-apps.service.js
+++ b/services/cocoapods/cocoapods-apps.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const deprecatedService = require('../deprecated-service')
+const { deprecatedService } = require('..')
 
 module.exports = deprecatedService({
   category: 'other',
diff --git a/services/cocoapods/cocoapods-apps.tester.js b/services/cocoapods/cocoapods-apps.tester.js
index 7b05144b80..43b36324a7 100644
--- a/services/cocoapods/cocoapods-apps.tester.js
+++ b/services/cocoapods/cocoapods-apps.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const t = (module.exports = new ServiceTester({
   id: 'CocoapodsApps',
   title: 'CocoapodsApps',
diff --git a/services/cocoapods/cocoapods-downloads.service.js b/services/cocoapods/cocoapods-downloads.service.js
index f565910756..802003bb49 100644
--- a/services/cocoapods/cocoapods-downloads.service.js
+++ b/services/cocoapods/cocoapods-downloads.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const deprecatedService = require('../deprecated-service')
+const { deprecatedService } = require('..')
 
 module.exports = deprecatedService({
   category: 'downloads',
diff --git a/services/cocoapods/cocoapods-downloads.tester.js b/services/cocoapods/cocoapods-downloads.tester.js
index 4169b581ec..ef534d023d 100644
--- a/services/cocoapods/cocoapods-downloads.tester.js
+++ b/services/cocoapods/cocoapods-downloads.tester.js
@@ -1,6 +1,7 @@
 'use strict'
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
+
 const t = (module.exports = new ServiceTester({
   id: 'CocoapodsDownloads',
   title: 'CocoapodsDownloads',
diff --git a/services/cocoapods/cocoapods-license.tester.js b/services/cocoapods/cocoapods-license.tester.js
index 0a1783801c..282b10d43d 100644
--- a/services/cocoapods/cocoapods-license.tester.js
+++ b/services/cocoapods/cocoapods-license.tester.js
@@ -2,7 +2,7 @@
 
 const { invalidJSON } = require('../response-fixtures')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('license (valid)')
   .get('/AFNetworking.json')
diff --git a/services/cocoapods/cocoapods-metrics.tester.js b/services/cocoapods/cocoapods-metrics.tester.js
index 52134e8b9a..5ea55a2504 100644
--- a/services/cocoapods/cocoapods-metrics.tester.js
+++ b/services/cocoapods/cocoapods-metrics.tester.js
@@ -4,7 +4,7 @@ const Joi = require('joi')
 const { invalidJSON } = require('../response-fixtures')
 const { isIntegerPercentage } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('doc percent (valid)')
   .get('/AFNetworking.json')
diff --git a/services/cocoapods/cocoapods-platform.tester.js b/services/cocoapods/cocoapods-platform.tester.js
index 2327da596e..9f3b9fed59 100644
--- a/services/cocoapods/cocoapods-platform.tester.js
+++ b/services/cocoapods/cocoapods-platform.tester.js
@@ -7,7 +7,7 @@ const isPlatform = Joi.string().regex(
   /^(osx|ios|tvos|watchos)( \| (osx|ios|tvos|watchos))*$/
 )
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('platform (valid)')
   .get('/AFNetworking.json')
diff --git a/services/cocoapods/cocoapods-version.tester.js b/services/cocoapods/cocoapods-version.tester.js
index 831d4a96f5..547e7b4629 100644
--- a/services/cocoapods/cocoapods-version.tester.js
+++ b/services/cocoapods/cocoapods-version.tester.js
@@ -4,7 +4,7 @@ const Joi = require('joi')
 const { isVPlusDottedVersionAtLeastOne } = require('../test-validators')
 const { invalidJSON } = require('../response-fixtures')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('version (valid)')
   .get('/AFNetworking.json')
diff --git a/services/codacy/codacy-coverage.service.js b/services/codacy/codacy-coverage.service.js
index 00d7ca276e..adc9a4718b 100644
--- a/services/codacy/codacy-coverage.service.js
+++ b/services/codacy/codacy-coverage.service.js
@@ -4,8 +4,8 @@ const Joi = require('joi')
 const {
   coveragePercentage: coveragePercentageColor,
 } = require('../../lib/color-formatters')
-const BaseSvgScrapingService = require('../base-svg-scraping')
-const { NotFound } = require('../errors')
+const { BaseSvgScrapingService } = require('..')
+const { NotFound } = require('..')
 
 const schema = Joi.object({
   message: Joi.alternatives()
diff --git a/services/codacy/codacy-coverage.tester.js b/services/codacy/codacy-coverage.tester.js
index c42405a667..fc82b94bfb 100644
--- a/services/codacy/codacy-coverage.tester.js
+++ b/services/codacy/codacy-coverage.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isIntegerPercentage } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Coverage')
   .get('/59d607d0e311408885e418004068ea58.json')
diff --git a/services/codacy/codacy-grade.service.js b/services/codacy/codacy-grade.service.js
index d83bfa59aa..3a58d738c0 100644
--- a/services/codacy/codacy-grade.service.js
+++ b/services/codacy/codacy-grade.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseSvgScrapingService = require('../base-svg-scraping')
+const { BaseSvgScrapingService } = require('..')
 const { codacyGrade } = require('./codacy-helpers')
 
 const schema = Joi.object({ message: codacyGrade }).required()
diff --git a/services/codacy/codacy-grade.tester.js b/services/codacy/codacy-grade.tester.js
index 49af7da4b8..481fbf9523 100644
--- a/services/codacy/codacy-grade.tester.js
+++ b/services/codacy/codacy-grade.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { codacyGrade } = require('./codacy-helpers')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Code quality')
   .get('/grade/e27821fb6289410b8f58338c7e0bc686.json')
diff --git a/services/codeclimate/codeclimate.tester.js b/services/codeclimate/codeclimate.tester.js
index 46302d41a3..520fcfe587 100644
--- a/services/codeclimate/codeclimate.tester.js
+++ b/services/codeclimate/codeclimate.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isIntegerPercentage } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/codecov/codecov.tester.js b/services/codecov/codecov.tester.js
index 7fdd5b23c9..63f6f621b7 100644
--- a/services/codecov/codecov.tester.js
+++ b/services/codecov/codecov.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isIntegerPercentage } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/codeship/codeship.tester.js b/services/codeship/codeship.tester.js
index ef24e093b5..efb0579187 100644
--- a/services/codeship/codeship.tester.js
+++ b/services/codeship/codeship.tester.js
@@ -1,8 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
 const { isBuildStatus } = require('../../lib/build-status')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'codeship',
diff --git a/services/codetally/codetally.service.js b/services/codetally/codetally.service.js
index d05bd7bc84..fcf0615c1b 100644
--- a/services/codetally/codetally.service.js
+++ b/services/codetally/codetally.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 
 const schema = Joi.object({
   currency_sign: Joi.string().required(),
diff --git a/services/codetally/codetally.tester.js b/services/codetally/codetally.tester.js
index 41384e9bd0..d9f155b6d9 100644
--- a/services/codetally/codetally.tester.js
+++ b/services/codetally/codetally.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 // This test will extract the currency value from the
 // string value response from the server.
diff --git a/services/conda/conda-base.js b/services/conda/conda-base.js
index 173a4b14ed..01812ef460 100644
--- a/services/conda/conda-base.js
+++ b/services/conda/conda-base.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 const { nonNegativeInteger } = require('../validators')
 
 const condaSchema = Joi.object({
diff --git a/services/conda/conda.tester.js b/services/conda/conda.tester.js
index f3039fcb63..f365ada075 100644
--- a/services/conda/conda.tester.js
+++ b/services/conda/conda.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isVPlusTripleDottedVersion, isMetric } = require('../test-validators')
 
 const isCondaPlatform = Joi.string().regex(/^\w+-\d+( \| \w+-\d+)*$/)
diff --git a/services/continuousphp/continuousphp.tester.js b/services/continuousphp/continuousphp.tester.js
index d403557be6..9b4aa85fd5 100644
--- a/services/continuousphp/continuousphp.tester.js
+++ b/services/continuousphp/continuousphp.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isBuildStatus } = require('../../lib/build-status')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('build status on default branch')
   .get('/git-hub/doctrine/dbal.json')
diff --git a/services/cookbook/cookbook.tester.js b/services/cookbook/cookbook.tester.js
index 88df4d112f..61a180d25f 100644
--- a/services/cookbook/cookbook.tester.js
+++ b/services/cookbook/cookbook.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isVPlusDottedVersionAtLeastOne } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('version')
   .get('/chef-sugar.json')
diff --git a/services/coveralls/coveralls.tester.js b/services/coveralls/coveralls.tester.js
index a6805b1cb9..d5f079a2e5 100644
--- a/services/coveralls/coveralls.tester.js
+++ b/services/coveralls/coveralls.tester.js
@@ -1,8 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
 const { isIntegerPercentage } = require('../test-validators')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'coveralls',
diff --git a/services/coverity/coverity-on-demand.service.js b/services/coverity/coverity-on-demand.service.js
index 1e816c4999..317f1c31bf 100644
--- a/services/coverity/coverity-on-demand.service.js
+++ b/services/coverity/coverity-on-demand.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const deprecatedService = require('../deprecated-service')
+const { deprecatedService } = require('..')
 
 // coverity on demand integration - deprecated as of December 2018.
 module.exports = deprecatedService({
diff --git a/services/coverity/coverity-on-demand.tester.js b/services/coverity/coverity-on-demand.tester.js
index a63670c829..eb25cc97c8 100644
--- a/services/coverity/coverity-on-demand.tester.js
+++ b/services/coverity/coverity-on-demand.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'CoverityOnDemand',
diff --git a/services/coverity/coverity-scan.service.js b/services/coverity/coverity-scan.service.js
index 80f20e1d0f..f1156b4f79 100644
--- a/services/coverity/coverity-scan.service.js
+++ b/services/coverity/coverity-scan.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const deprecatedService = require('../deprecated-service')
+const { deprecatedService } = require('..')
 
 // coverity scan integration -
 // **temporarily deprecated as of January 2019 due to extended outage**
diff --git a/services/coverity/coverity-scan.tester.js b/services/coverity/coverity-scan.tester.js
index 7134f8dd94..f2ef041e39 100644
--- a/services/coverity/coverity-scan.tester.js
+++ b/services/coverity/coverity-scan.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'CoverityScan',
diff --git a/services/cpan/cpan-license.tester.js b/services/cpan/cpan-license.tester.js
index 274d98392e..95831ec71d 100644
--- a/services/cpan/cpan-license.tester.js
+++ b/services/cpan/cpan-license.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('license (valid)')
   .get('/Config-Augeas.json')
diff --git a/services/cpan/cpan-version.tester.js b/services/cpan/cpan-version.tester.js
index 68c4affede..4a5d5de5a9 100644
--- a/services/cpan/cpan-version.tester.js
+++ b/services/cpan/cpan-version.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const { isVPlusDottedVersionAtLeastOne } = require('../test-validators')
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('version (valid)')
   .get('/Config-Augeas.json')
diff --git a/services/cpan/cpan.js b/services/cpan/cpan.js
index f4bbdfefab..2d0b760d27 100644
--- a/services/cpan/cpan.js
+++ b/services/cpan/cpan.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 
 const schema = Joi.object({
   version: Joi.string().required(),
diff --git a/services/cran/cran.service.js b/services/cran/cran.service.js
index c7325af9be..4d306fa5a3 100644
--- a/services/cran/cran.service.js
+++ b/services/cran/cran.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 const { renderVersionBadge } = require('../../lib/version')
 
 const schema = Joi.object({
diff --git a/services/cran/cran.tester.js b/services/cran/cran.tester.js
index e33b770e85..f7b6dfc262 100644
--- a/services/cran/cran.tester.js
+++ b/services/cran/cran.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isVPlusTripleDottedVersion } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/crates/crates-base.js b/services/crates/crates-base.js
index cd768bfc95..b8602970fc 100644
--- a/services/crates/crates-base.js
+++ b/services/crates/crates-base.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 const { nonNegativeInteger } = require('../validators')
 
 const keywords = ['Rust']
diff --git a/services/crates/crates-downloads.tester.js b/services/crates/crates-downloads.tester.js
index 42531cd368..e7419e917a 100644
--- a/services/crates/crates-downloads.tester.js
+++ b/services/crates/crates-downloads.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isMetric } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/crates/crates-license.tester.js b/services/crates/crates-license.tester.js
index 7b5ba9c5ae..796372ff9f 100644
--- a/services/crates/crates-license.tester.js
+++ b/services/crates/crates-license.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'crates',
diff --git a/services/crates/crates-version.tester.js b/services/crates/crates-version.tester.js
index e0118a10c8..0edb46e02e 100644
--- a/services/crates/crates-version.tester.js
+++ b/services/crates/crates-version.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isSemver } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/ctan/ctan.service.js b/services/ctan/ctan.service.js
index c56891ce34..0c1deab770 100644
--- a/services/ctan/ctan.service.js
+++ b/services/ctan/ctan.service.js
@@ -1,9 +1,9 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
 const { renderLicenseBadge } = require('../../lib/licenses')
 const { renderVersionBadge } = require('../../lib/version')
+const { BaseJsonService } = require('..')
 
 const schema = Joi.object({
   license: Joi.array()
diff --git a/services/ctan/ctan.tester.js b/services/ctan/ctan.tester.js
index 56023c0a90..ffeb0e0a1a 100644
--- a/services/ctan/ctan.tester.js
+++ b/services/ctan/ctan.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isVPlusDottedVersionAtLeastOne } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/date/date.service.js b/services/date/date.service.js
index 333254fa6c..263c355430 100644
--- a/services/date/date.service.js
+++ b/services/date/date.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
-const BaseService = require('../base')
 const { formatRelativeDate } = require('../../lib/text-formatters')
+const { BaseService } = require('..')
 
 const documentation = `
 <p>
diff --git a/services/date/date.tester.js b/services/date/date.tester.js
index 759262ed04..ee9bf661bc 100644
--- a/services/date/date.tester.js
+++ b/services/date/date.tester.js
@@ -1,11 +1,13 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isRelativeFormattedDate } = require('../test-validators')
 
-const t = new ServiceTester({ id: 'date', title: 'Relative Date Tests' })
-module.exports = t
+const t = (module.exports = new ServiceTester({
+  id: 'date',
+  title: 'Relative Date Tests',
+}))
 
 t.create('Relative date')
   .get('/1540814400.json')
diff --git a/services/david/david.tester.js b/services/david/david.tester.js
index a12f45f621..7c22cb9c18 100644
--- a/services/david/david.tester.js
+++ b/services/david/david.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { invalidJSON } = require('../response-fixtures')
 
 const isDependencyStatus = Joi.string().valid(
diff --git a/services/debug/debug.service.js b/services/debug/debug.service.js
index a8754b991c..ea7390f5b8 100644
--- a/services/debug/debug.service.js
+++ b/services/debug/debug.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const NonMemoryCachingBaseService = require('../base-non-memory-caching')
+const { NonMemoryCachingBaseService } = require('..')
 
 const serverStartTime = new Date(new Date().toGMTString())
 
diff --git a/services/debug/debug.tester.js b/services/debug/debug.tester.js
index c4b85a22c6..f962b53b1f 100644
--- a/services/debug/debug.tester.js
+++ b/services/debug/debug.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('start time')
   .get('/starttime.json')
diff --git a/services/dependabot/dependabot.service.js b/services/dependabot/dependabot.service.js
index 709aadff40..eb93378699 100644
--- a/services/dependabot/dependabot.service.js
+++ b/services/dependabot/dependabot.service.js
@@ -1,8 +1,8 @@
 'use strict'
 
-const BaseJsonService = require('../base-json')
 const Joi = require('joi')
 const url = require('url')
+const { BaseJsonService } = require('..')
 
 const schema = Joi.object({
   status: Joi.string().required(),
diff --git a/services/dependabot/dependabot.tester.js b/services/dependabot/dependabot.tester.js
index 8c97ce730b..7a3f0f89f7 100644
--- a/services/dependabot/dependabot.tester.js
+++ b/services/dependabot/dependabot.tester.js
@@ -1,16 +1,12 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
 const { isIntegerPercentage } = require('../test-validators')
 
-const t = (module.exports = new ServiceTester({
-  id: 'dependabot',
-  title: 'Dependabot',
-}))
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('semver stability (valid)')
-  .get('/semver/bundler/puma.json')
+  .get('/bundler/puma.json')
   .expectJSONTypes(
     Joi.object().keys({
       name: 'semver stability',
@@ -21,7 +17,7 @@ t.create('semver stability (valid)')
   )
 
 t.create('semver stability (invalid error)')
-  .get('/semver/invalid-manager/puma.json?style=_shields_test')
+  .get('/invalid-manager/puma.json?style=_shields_test')
   .expectJSON({
     name: 'semver stability',
     value: 'invalid',
@@ -29,7 +25,7 @@ t.create('semver stability (invalid error)')
   })
 
 t.create('semver stability (missing dependency)')
-  .get('/semver/bundler/some-random-missing-dependency.json')
+  .get('/bundler/some-random-missing-dependency.json')
   .expectJSON({
     name: 'semver stability',
     value: 'unknown',
diff --git a/services/depfu/depfu.service.js b/services/depfu/depfu.service.js
index 09ba53ec31..31445d8dc1 100644
--- a/services/depfu/depfu.service.js
+++ b/services/depfu/depfu.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 
 const depfuSchema = Joi.object({
   text: Joi.string().required(),
diff --git a/services/depfu/depfu.tester.js b/services/depfu/depfu.tester.js
index 57a350bb0c..4778374ad2 100644
--- a/services/depfu/depfu.tester.js
+++ b/services/depfu/depfu.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const isDependencyStatus = Joi.string().valid(
   'insecure',
diff --git a/services/discord/discord.service.js b/services/discord/discord.service.js
index 872e0c03ce..84eb6302be 100644
--- a/services/discord/discord.service.js
+++ b/services/discord/discord.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 
 const discordSchema = Joi.object({
   members: Joi.array()
diff --git a/services/discord/discord.tester.js b/services/discord/discord.tester.js
index c0df09b380..a3ed950446 100644
--- a/services/discord/discord.tester.js
+++ b/services/discord/discord.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('gets status for Reactiflux')
   .get('/102860784329052160.json?style=_shields_test')
diff --git a/services/discourse/discourse.tester.js b/services/discourse/discourse.tester.js
index 04e8948502..bcb08c2a64 100644
--- a/services/discourse/discourse.tester.js
+++ b/services/discourse/discourse.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'discourse',
diff --git a/services/dockbit/dockbit.service.js b/services/dockbit/dockbit.service.js
index b8ae5c8bce..27473c5e28 100644
--- a/services/dockbit/dockbit.service.js
+++ b/services/dockbit/dockbit.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const deprecatedService = require('../deprecated-service')
+const { deprecatedService } = require('..')
 // dockbit integration - deprecated as of December 2017.
 module.exports = deprecatedService({
   category: 'build',
diff --git a/services/dockbit/dockbit.tester.js b/services/dockbit/dockbit.tester.js
index 306a38e7ae..c7474386a7 100644
--- a/services/dockbit/dockbit.tester.js
+++ b/services/dockbit/dockbit.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'dockbit',
diff --git a/services/docker/docker-automated.service.js b/services/docker/docker-automated.service.js
index e4b6371893..8725a509ba 100644
--- a/services/docker/docker-automated.service.js
+++ b/services/docker/docker-automated.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 const {
   dockerBlue,
   buildDockerUrl,
diff --git a/services/docker/docker-automated.tester.js b/services/docker/docker-automated.tester.js
index 240d0e2a1c..0242e147a9 100644
--- a/services/docker/docker-automated.tester.js
+++ b/services/docker/docker-automated.tester.js
@@ -4,7 +4,7 @@ const Joi = require('joi')
 const { dockerBlue } = require('./docker-helpers')
 const isAutomatedBuildStatus = Joi.string().valid('automated', 'manual')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('docker automated build (valid, library)')
   .get('/_/ubuntu.json')
diff --git a/services/docker/docker-build.service.js b/services/docker/docker-build.service.js
index c5f748680d..42b793f515 100644
--- a/services/docker/docker-build.service.js
+++ b/services/docker/docker-build.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 const { anyInteger } = require('../validators')
 const {
   dockerBlue,
diff --git a/services/docker/docker-build.tester.js b/services/docker/docker-build.tester.js
index 9d04ce19ae..ec2146128f 100644
--- a/services/docker/docker-build.tester.js
+++ b/services/docker/docker-build.tester.js
@@ -4,7 +4,7 @@ const Joi = require('joi')
 const { dockerBlue } = require('./docker-helpers')
 const { isBuildStatus } = require('../../lib/build-status')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('docker build status (valid, user)')
   .get('/jrottenberg/ffmpeg.json')
diff --git a/services/docker/docker-pulls.service.js b/services/docker/docker-pulls.service.js
index 43c08732b1..96deddfb8a 100644
--- a/services/docker/docker-pulls.service.js
+++ b/services/docker/docker-pulls.service.js
@@ -1,8 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
 const { metric } = require('../../lib/text-formatters')
+const { BaseJsonService } = require('..')
 const { nonNegativeInteger } = require('../validators')
 const {
   dockerBlue,
diff --git a/services/docker/docker-pulls.tester.js b/services/docker/docker-pulls.tester.js
index 708c17bbc9..944b8b5322 100644
--- a/services/docker/docker-pulls.tester.js
+++ b/services/docker/docker-pulls.tester.js
@@ -4,7 +4,7 @@ const Joi = require('joi')
 const { dockerBlue } = require('./docker-helpers')
 const { isMetric } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('docker pulls (valid, library)')
   .get('/_/ubuntu.json?style=_shields_test')
diff --git a/services/docker/docker-stars.service.js b/services/docker/docker-stars.service.js
index 8d27132c1d..f17b401632 100644
--- a/services/docker/docker-stars.service.js
+++ b/services/docker/docker-stars.service.js
@@ -1,13 +1,13 @@
 'use strict'
 
-const BaseService = require('../base')
 const { metric } = require('../../lib/text-formatters')
+const { BaseService } = require('..')
+const { nonNegativeInteger } = require('../validators')
 const {
   dockerBlue,
   buildDockerUrl,
   getDockerHubUser,
 } = require('./docker-helpers')
-const { nonNegativeInteger } = require('../validators')
 
 module.exports = class DockerStars extends BaseService {
   async fetch({ user, repo }) {
diff --git a/services/docker/docker-stars.tester.js b/services/docker/docker-stars.tester.js
index f232544948..eb1ff4bf64 100644
--- a/services/docker/docker-stars.tester.js
+++ b/services/docker/docker-stars.tester.js
@@ -1,10 +1,10 @@
 'use strict'
 
 const Joi = require('joi')
-const { dockerBlue } = require('./docker-helpers')
 const { isMetric } = require('../test-validators')
+const { dockerBlue } = require('./docker-helpers')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('docker stars (valid, library)')
   .get('/_/ubuntu.json?style=_shields_test')
diff --git a/services/dotnetstatus/dotnetstatus.service.js b/services/dotnetstatus/dotnetstatus.service.js
index 6e31da1034..6811cb6102 100644
--- a/services/dotnetstatus/dotnetstatus.service.js
+++ b/services/dotnetstatus/dotnetstatus.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const deprecatedService = require('../deprecated-service')
+const { deprecatedService } = require('..')
 
 // dotnet-status integration - deprecated as of April 2018.
 module.exports = deprecatedService({
diff --git a/services/dotnetstatus/dotnetstatus.tester.js b/services/dotnetstatus/dotnetstatus.tester.js
index fa427f1adb..000988ae24 100644
--- a/services/dotnetstatus/dotnetstatus.tester.js
+++ b/services/dotnetstatus/dotnetstatus.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'dotnetstatus',
diff --git a/services/dub/dub-download.service.js b/services/dub/dub-download.service.js
index 92682d535d..70a6eec3a0 100644
--- a/services/dub/dub-download.service.js
+++ b/services/dub/dub-download.service.js
@@ -1,11 +1,9 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
 const { metric } = require('../../lib/text-formatters')
-const {
-  downloadCount: downloadCountColor,
-} = require('../../lib/color-formatters')
+const { downloadCount } = require('../../lib/color-formatters')
+const { BaseJsonService } = require('..')
 const { nonNegativeInteger } = require('../validators')
 
 const schema = Joi.object({
@@ -43,7 +41,7 @@ function DownloadsForInterval(interval) {
       return {
         label,
         message: `${metric(downloads)}${messageSuffix}`,
-        color: downloadCountColor(downloads),
+        color: downloadCount(downloads),
       }
     }
 
diff --git a/services/dub/dub-download.tester.js b/services/dub/dub-download.tester.js
index ee24e9e05c..bf8a5862c1 100644
--- a/services/dub/dub-download.tester.js
+++ b/services/dub/dub-download.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isMetric, isMetricOverTimePeriod } = require('../test-validators')
 
 const isDownloadsColor = Joi.equal(
diff --git a/services/dub/dub-license.service.js b/services/dub/dub-license.service.js
index 147e06edef..ca064350ae 100644
--- a/services/dub/dub-license.service.js
+++ b/services/dub/dub-license.service.js
@@ -1,8 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
 const { renderLicenseBadge } = require('../../lib/licenses')
+const { BaseJsonService } = require('..')
 
 const schema = Joi.object({
   info: Joi.object({ license: Joi.string().required() }).required(),
diff --git a/services/dub/dub-license.tester.js b/services/dub/dub-license.tester.js
index 74f0f36156..bc0a266c92 100644
--- a/services/dub/dub-license.tester.js
+++ b/services/dub/dub-license.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('license (valid)')
   .get('/vibe-d.json')
diff --git a/services/dub/dub-version.service.js b/services/dub/dub-version.service.js
index fba0f01041..c8acc910dd 100644
--- a/services/dub/dub-version.service.js
+++ b/services/dub/dub-version.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 const { renderVersionBadge } = require('../../lib/version')
 
 const schema = Joi.string().required()
diff --git a/services/dub/dub-version.tester.js b/services/dub/dub-version.tester.js
index 20755e8e2d..5a73116939 100644
--- a/services/dub/dub-version.tester.js
+++ b/services/dub/dub-version.tester.js
@@ -5,7 +5,7 @@ const {
   isVPlusDottedVersionNClausesWithOptionalSuffix,
 } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('version (valid)')
   .get('/vibe-d.json?style=_shields_test')
diff --git a/services/dynamic/dynamic-json.service.js b/services/dynamic/dynamic-json.service.js
index c085d88054..fe030afe1e 100644
--- a/services/dynamic/dynamic-json.service.js
+++ b/services/dynamic/dynamic-json.service.js
@@ -2,8 +2,7 @@
 
 const Joi = require('joi')
 const jp = require('jsonpath')
-const BaseJsonService = require('../base-json')
-const { InvalidResponse } = require('../errors')
+const { BaseJsonService, InvalidResponse } = require('..')
 const { renderDynamicBadge } = require('../dynamic-common')
 const {
   createRoute,
diff --git a/services/dynamic/dynamic-json.tester.js b/services/dynamic/dynamic-json.tester.js
index d1c06bec21..e6add9fa83 100644
--- a/services/dynamic/dynamic-json.tester.js
+++ b/services/dynamic/dynamic-json.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { expect } = require('chai')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Connection error')
   .get(
diff --git a/services/dynamic/dynamic-xml.service.js b/services/dynamic/dynamic-xml.service.js
index 30a6b4f467..46d58757dc 100644
--- a/services/dynamic/dynamic-xml.service.js
+++ b/services/dynamic/dynamic-xml.service.js
@@ -2,8 +2,7 @@
 
 const { DOMParser } = require('xmldom')
 const xpath = require('xpath')
-const BaseService = require('../base')
-const { InvalidResponse } = require('../errors')
+const { BaseService, InvalidResponse } = require('..')
 const { renderDynamicBadge } = require('../dynamic-common')
 const {
   createRoute,
diff --git a/services/dynamic/dynamic-xml.tester.js b/services/dynamic/dynamic-xml.tester.js
index b3d4e74898..f5738fa1bf 100644
--- a/services/dynamic/dynamic-xml.tester.js
+++ b/services/dynamic/dynamic-xml.tester.js
@@ -4,7 +4,7 @@ const Joi = require('joi')
 const { expect } = require('chai')
 const { isSemver } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('No URL specified')
   .get('.json?query=//name&label=Package Name&style=_shields_test')
diff --git a/services/dynamic/dynamic-yaml.service.js b/services/dynamic/dynamic-yaml.service.js
index acc5f66d76..7f88443882 100644
--- a/services/dynamic/dynamic-yaml.service.js
+++ b/services/dynamic/dynamic-yaml.service.js
@@ -1,9 +1,8 @@
 'use strict'
 
-const BaseYamlService = require('../base-yaml')
-const { InvalidResponse } = require('../errors')
 const Joi = require('joi')
 const jp = require('jsonpath')
+const { BaseYamlService, InvalidResponse } = require('..')
 const { renderDynamicBadge } = require('../dynamic-common')
 const {
   createRoute,
diff --git a/services/dynamic/dynamic-yaml.tester.js b/services/dynamic/dynamic-yaml.tester.js
index e1d543b7c4..9efd4f4414 100644
--- a/services/dynamic/dynamic-yaml.tester.js
+++ b/services/dynamic/dynamic-yaml.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('No URL specified')
   .get('.json?query=$.name&label=Package Name&style=_shields_test')
diff --git a/services/eclipse-marketplace/eclipse-marketplace-base.js b/services/eclipse-marketplace/eclipse-marketplace-base.js
index a5cefc43f2..fd8c5387b0 100644
--- a/services/eclipse-marketplace/eclipse-marketplace-base.js
+++ b/services/eclipse-marketplace/eclipse-marketplace-base.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const BaseXmlService = require('../base-xml')
+const { BaseXmlService } = require('..')
 
 module.exports = class EclipseMarketplaceBase extends BaseXmlService {
   static buildRoute(base) {
diff --git a/services/eclipse-marketplace/eclipse-marketplace-downloads.tester.js b/services/eclipse-marketplace/eclipse-marketplace-downloads.tester.js
index 052b1b9c6d..c06bfec0a1 100644
--- a/services/eclipse-marketplace/eclipse-marketplace-downloads.tester.js
+++ b/services/eclipse-marketplace/eclipse-marketplace-downloads.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isMetric, isMetricOverTimePeriod } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/eclipse-marketplace/eclipse-marketplace-favorites.tester.js b/services/eclipse-marketplace/eclipse-marketplace-favorites.tester.js
index 4708383dad..658d3feac9 100644
--- a/services/eclipse-marketplace/eclipse-marketplace-favorites.tester.js
+++ b/services/eclipse-marketplace/eclipse-marketplace-favorites.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('favorites count')
   .get('/notepad4e.json')
diff --git a/services/eclipse-marketplace/eclipse-marketplace-license.tester.js b/services/eclipse-marketplace/eclipse-marketplace-license.tester.js
index e48fa456c1..b143a9777a 100644
--- a/services/eclipse-marketplace/eclipse-marketplace-license.tester.js
+++ b/services/eclipse-marketplace/eclipse-marketplace-license.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('license')
   .get('/notepad4e.json')
diff --git a/services/eclipse-marketplace/eclipse-marketplace-update.tester.js b/services/eclipse-marketplace/eclipse-marketplace-update.tester.js
index 769816a04c..0f7b20ccee 100644
--- a/services/eclipse-marketplace/eclipse-marketplace-update.tester.js
+++ b/services/eclipse-marketplace/eclipse-marketplace-update.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isFormattedDate } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('last update date')
   .get('/notepad4e.json')
diff --git a/services/eclipse-marketplace/eclipse-marketplace-version.tester.js b/services/eclipse-marketplace/eclipse-marketplace-version.tester.js
index 19299386ca..14ac85b100 100644
--- a/services/eclipse-marketplace/eclipse-marketplace-version.tester.js
+++ b/services/eclipse-marketplace/eclipse-marketplace-version.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isVPlusDottedVersionAtLeastOne } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('marketplace version')
   .get('/notepad4e.json')
diff --git a/services/elm-package/elm-package.service.js b/services/elm-package/elm-package.service.js
index ee656adfd6..994b697bad 100644
--- a/services/elm-package/elm-package.service.js
+++ b/services/elm-package/elm-package.service.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 const { renderVersionBadge } = require('../../lib/version')
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 const { semver } = require('../validators')
 
 const schema = Joi.object({ version: semver }).required()
diff --git a/services/elm-package/elm-package.tester.js b/services/elm-package/elm-package.tester.js
index f86fe8aa84..d378ba4b0f 100644
--- a/services/elm-package/elm-package.tester.js
+++ b/services/elm-package/elm-package.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isSemver } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('gets the package version of elm/core')
   .get('/elm/core.json')
diff --git a/services/f-droid/f-droid.service.js b/services/f-droid/f-droid.service.js
index 4db4dc2668..046bf92df9 100644
--- a/services/f-droid/f-droid.service.js
+++ b/services/f-droid/f-droid.service.js
@@ -1,10 +1,9 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseYamlService = require('../base-yaml')
-const { addv: versionText } = require('../../lib/text-formatters')
+const { addv } = require('../../lib/text-formatters')
 const { version: versionColor } = require('../../lib/color-formatters')
-const { InvalidResponse } = require('../errors')
+const { BaseYamlService, InvalidResponse } = require('..')
 
 const schema = Joi.object({
   CurrentVersion: Joi.alternatives()
@@ -15,7 +14,7 @@ const schema = Joi.object({
 module.exports = class FDroid extends BaseYamlService {
   static render({ version }) {
     return {
-      message: versionText(version),
+      message: addv(version),
       color: versionColor(version),
     }
   }
diff --git a/services/f-droid/f-droid.tester.js b/services/f-droid/f-droid.tester.js
index 65510c37f4..5ce1831cfa 100644
--- a/services/f-droid/f-droid.tester.js
+++ b/services/f-droid/f-droid.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isVPlusDottedVersionAtLeastOne } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/flip/flip.service.js b/services/flip/flip.service.js
index 07bcb963cf..6c0dc06c23 100644
--- a/services/flip/flip.service.js
+++ b/services/flip/flip.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const NonMemoryCachingBaseService = require('../base-non-memory-caching')
+const { NonMemoryCachingBaseService } = require('..')
 
 let bitFlip = false
 
diff --git a/services/flip/flip.tester.js b/services/flip/flip.tester.js
index a89d983fe6..59b000b41b 100644
--- a/services/flip/flip.tester.js
+++ b/services/flip/flip.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('First request')
   .get('.json')
diff --git a/services/gem/gem-downloads.service.js b/services/gem/gem-downloads.service.js
index d536b87633..4dadd751cf 100644
--- a/services/gem/gem-downloads.service.js
+++ b/services/gem/gem-downloads.service.js
@@ -2,14 +2,10 @@
 
 const semver = require('semver')
 const Joi = require('joi')
-
-const BaseJsonService = require('../base-json')
-const { InvalidResponse } = require('../errors')
-const {
-  downloadCount: downloadCountColor,
-} = require('../../lib/color-formatters')
+const { downloadCount } = require('../../lib/color-formatters')
 const { metric } = require('../../lib/text-formatters')
 const { latest: latestVersion } = require('../../lib/version')
+const { BaseJsonService, InvalidResponse } = require('..')
 const { nonNegativeInteger } = require('../validators')
 
 const keywords = ['ruby']
@@ -45,7 +41,7 @@ module.exports = class GemDownloads extends BaseJsonService {
     return {
       label,
       message: metric(downloads),
-      color: downloadCountColor(downloads),
+      color: downloadCount(downloads),
     }
   }
 
diff --git a/services/gem/gem-downloads.tester.js b/services/gem/gem-downloads.tester.js
index 0eda4f4df3..f207f93d56 100644
--- a/services/gem/gem-downloads.tester.js
+++ b/services/gem/gem-downloads.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isMetric } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 // total downloads
 t.create('total downloads (valid)')
diff --git a/services/gem/gem-owner.service.js b/services/gem/gem-owner.service.js
index a904979d1d..f241ab9271 100644
--- a/services/gem/gem-owner.service.js
+++ b/services/gem/gem-owner.service.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 const { floorCount: floorCountColor } = require('../../lib/color-formatters')
 
 const ownerSchema = Joi.array().required()
diff --git a/services/gem/gem-owner.tester.js b/services/gem/gem-owner.tester.js
index 0ab50b2c50..741dbfe129 100644
--- a/services/gem/gem-owner.tester.js
+++ b/services/gem/gem-owner.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('users (valid)')
   .get('/raphink.json')
diff --git a/services/gem/gem-rank.service.js b/services/gem/gem-rank.service.js
index d64e41db55..2e2e704fee 100644
--- a/services/gem/gem-rank.service.js
+++ b/services/gem/gem-rank.service.js
@@ -1,11 +1,9 @@
 'use strict'
 
 const Joi = require('joi')
-
-const BaseJsonService = require('../base-json')
-const { floorCount: floorCountColor } = require('../../lib/color-formatters')
+const { floorCount } = require('../../lib/color-formatters')
 const { ordinalNumber } = require('../../lib/text-formatters')
-const { InvalidResponse } = require('../errors')
+const { BaseJsonService, InvalidResponse } = require('..')
 
 const keywords = ['ruby']
 
@@ -55,7 +53,7 @@ module.exports = class GemRank extends BaseJsonService {
     message += period === 'rt' ? '' : ' daily'
     return {
       message,
-      color: floorCountColor(count, 10, 50, 100),
+      color: floorCount(count, 10, 50, 100),
     }
   }
 
diff --git a/services/gem/gem-rank.tester.js b/services/gem/gem-rank.tester.js
index 78b71bc103..033841f4f0 100644
--- a/services/gem/gem-rank.tester.js
+++ b/services/gem/gem-rank.tester.js
@@ -7,7 +7,7 @@ const isOrdinalNumberDaily = Joi.string().regex(
   /^[1-9][0-9]*(ᵗʰ|ˢᵗ|ⁿᵈ|ʳᵈ) daily$/
 )
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('total rank (valid)')
   .get('/rt/rspec-puppet-facts.json')
diff --git a/services/gem/gem-version.service.js b/services/gem/gem-version.service.js
index 9429b5a79c..bb384629cd 100644
--- a/services/gem/gem-version.service.js
+++ b/services/gem/gem-version.service.js
@@ -1,9 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-
 const { renderVersionBadge } = require('../../lib/version')
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 
 const schema = Joi.object({
   // In most cases `version` will be a SemVer but the registry doesn't
diff --git a/services/gem/gem-version.tester.js b/services/gem/gem-version.tester.js
index 3e07347dca..f4a6ce93b1 100644
--- a/services/gem/gem-version.tester.js
+++ b/services/gem/gem-version.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isVPlusDottedVersionAtLeastOne } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('version (valid)')
   .get('/formatador.json')
diff --git a/services/gemnasium/gemnasium.service.js b/services/gemnasium/gemnasium.service.js
index fb69a3649c..8a831dd4c4 100644
--- a/services/gemnasium/gemnasium.service.js
+++ b/services/gemnasium/gemnasium.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const deprecatedService = require('../deprecated-service')
+const { deprecatedService } = require('..')
 
 module.exports = deprecatedService({
   category: 'dependencies',
diff --git a/services/gemnasium/gemnasium.tester.js b/services/gemnasium/gemnasium.tester.js
index 039042cbb6..d2954c05bc 100644
--- a/services/gemnasium/gemnasium.tester.js
+++ b/services/gemnasium/gemnasium.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'gemnasium',
diff --git a/services/github/github-auth-service.js b/services/github/github-auth-service.js
index ee44fd4e12..f9242d9a69 100644
--- a/services/github/github-auth-service.js
+++ b/services/github/github-auth-service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 const { staticAuthConfigured } = require('./github-helpers')
 
 function createRequestFetcher(context, config) {
diff --git a/services/github/github-commit-activity.tester.js b/services/github/github-commit-activity.tester.js
index ed8b642236..68e3543e65 100644
--- a/services/github/github-commit-activity.tester.js
+++ b/services/github/github-commit-activity.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isMetricOverTimePeriod } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('commit activity (1 year)')
   .get('/y/eslint/eslint.json')
diff --git a/services/github/github-commit-status.tester.js b/services/github/github-commit-status.tester.js
index cf9857bea1..22100c4813 100644
--- a/services/github/github-commit-status.tester.js
+++ b/services/github/github-commit-status.tester.js
@@ -2,7 +2,7 @@
 
 const { invalidJSON } = require('../response-fixtures')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('commit status - commit in branch')
   .get(
diff --git a/services/github/github-commits-since.tester.js b/services/github/github-commits-since.tester.js
index 2673222373..c9ddc8194d 100644
--- a/services/github/github-commits-since.tester.js
+++ b/services/github/github-commits-since.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Commits since')
   .get(
diff --git a/services/github/github-common-fetch.js b/services/github/github-common-fetch.js
index aff6d6ec1d..d1991c30ba 100644
--- a/services/github/github-common-fetch.js
+++ b/services/github/github-common-fetch.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { InvalidResponse } = require('../errors')
+const { InvalidResponse } = require('..')
 const { errorMessagesFor } = require('./github-helpers')
 
 const issueSchema = Joi.object({
diff --git a/services/github/github-contributors.tester.js b/services/github/github-contributors.tester.js
index 16c5be054b..b9d30d02cc 100644
--- a/services/github/github-contributors.tester.js
+++ b/services/github/github-contributors.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 const { isMetric } = require('../test-validators')
 
 t.create('Contributors')
diff --git a/services/github/github-downloads.tester.js b/services/github/github-downloads.tester.js
index 3aea7188fd..d1181384e2 100644
--- a/services/github/github-downloads.tester.js
+++ b/services/github/github-downloads.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isMetric } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Downloads all releases')
   .get('/downloads/photonstorm/phaser/total.json')
diff --git a/services/github/github-followers.tester.js b/services/github/github-followers.tester.js
index f5bb037da5..6b4f85e8d2 100644
--- a/services/github/github-followers.tester.js
+++ b/services/github/github-followers.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Followers')
   .get('/webcaetano.json')
diff --git a/services/github/github-forks.tester.js b/services/github/github-forks.tester.js
index fce3f0c14a..6dfbae5a2e 100644
--- a/services/github/github-forks.tester.js
+++ b/services/github/github-forks.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Forks')
   .get('/badges/shields.json')
diff --git a/services/github/github-issue-detail.tester.js b/services/github/github-issue-detail.tester.js
index bbec485e0f..8ac4ce19cb 100644
--- a/services/github/github-issue-detail.tester.js
+++ b/services/github/github-issue-detail.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isFormattedDate } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('github issue state')
   .get('/s/badges/shields/979.json')
diff --git a/services/github/github-issues.tester.js b/services/github/github-issues.tester.js
index d6f9491a9b..488d579d2b 100644
--- a/services/github/github-issues.tester.js
+++ b/services/github/github-issues.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isMetric, isMetricOpenIssues } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('GitHub closed pull requests')
   .get('/issues-pr-closed/badges/shields.json')
diff --git a/services/github/github-languages.tester.js b/services/github/github-languages.tester.js
index b41f2f32fd..ffbc8624c2 100644
--- a/services/github/github-languages.tester.js
+++ b/services/github/github-languages.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isFileSize } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/github/github-last-commit.tester.js b/services/github/github-last-commit.tester.js
index da5870fb1b..e58084fff8 100644
--- a/services/github/github-last-commit.tester.js
+++ b/services/github/github-last-commit.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isFormattedDate } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('last commit (recent)')
   .get('/eslint/eslint.json')
diff --git a/services/github/github-license.tester.js b/services/github/github-license.tester.js
index 90b58dac27..d7e6b1c8fc 100644
--- a/services/github/github-license.tester.js
+++ b/services/github/github-license.tester.js
@@ -7,7 +7,7 @@ const permissiveLicenseColor = licenseToColor('MIT')
 const copyleftLicenseColor = licenseToColor('GPL-3.0')
 const unknownLicenseColor = licenseToColor()
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Public domain license')
   .get('/github/gitignore.json?style=_shields_test')
diff --git a/services/github/github-manifest.tester.js b/services/github/github-manifest.tester.js
index 55a77a5043..43afb4eecb 100644
--- a/services/github/github-manifest.tester.js
+++ b/services/github/github-manifest.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isVPlusDottedVersionAtLeastOne } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/github/github-package-json.tester.js b/services/github/github-package-json.tester.js
index d376bd1b02..3d3742ad22 100644
--- a/services/github/github-package-json.tester.js
+++ b/services/github/github-package-json.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isSemver } = require('../test-validators')
 const { semverRange } = require('../validators')
 
diff --git a/services/github/github-pull-request-check-state.tester.js b/services/github/github-pull-request-check-state.tester.js
index 6e75e065e6..64ba8e2159 100644
--- a/services/github/github-pull-request-check-state.tester.js
+++ b/services/github/github-pull-request-check-state.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('github pull request check state')
   .get('/s/pulls/badges/shields/1110.json')
diff --git a/services/github/github-release.tester.js b/services/github/github-release.tester.js
index 0a8e4fd138..30ec7a04ca 100644
--- a/services/github/github-release.tester.js
+++ b/services/github/github-release.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isFormattedDate } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Release')
   .get('/release/photonstorm/phaser.json')
diff --git a/services/github/github-repo-size.tester.js b/services/github/github-repo-size.tester.js
index 4f5d6411a7..0a0e209cb4 100644
--- a/services/github/github-repo-size.tester.js
+++ b/services/github/github-repo-size.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isFileSize } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('repository size')
   .get('/badges/shields.json')
diff --git a/services/github/github-search.tester.js b/services/github/github-search.tester.js
index e09dab7929..238b25d7fe 100644
--- a/services/github/github-search.tester.js
+++ b/services/github/github-search.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isMetric } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('hit counter')
   .get('/badges/shields/async%20handle.json')
diff --git a/services/github/github-size.tester.js b/services/github/github-size.tester.js
index 2803f5633f..9899aeebca 100644
--- a/services/github/github-size.tester.js
+++ b/services/github/github-size.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isFileSize } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('File size')
   .get('/webcaetano/craft/build/phaser-craft.min.js.json')
diff --git a/services/github/github-stars.tester.js b/services/github/github-stars.tester.js
index 5c2b58783f..6d501a65c4 100644
--- a/services/github/github-stars.tester.js
+++ b/services/github/github-stars.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Stars')
   .get('/badges/shields.json')
diff --git a/services/github/github-tag.tester.js b/services/github/github-tag.tester.js
index fb1b55eb96..4a2bd9f5cb 100644
--- a/services/github/github-tag.tester.js
+++ b/services/github/github-tag.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Tag')
   .get('/tag/photonstorm/phaser.json')
diff --git a/services/github/github-watchers.tester.js b/services/github/github-watchers.tester.js
index 49e205b432..3fae7e040a 100644
--- a/services/github/github-watchers.tester.js
+++ b/services/github/github-watchers.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Watchers')
   .get('/badges/shields.json')
diff --git a/services/gitlab/gitlab-pipeline-status.service.js b/services/gitlab/gitlab-pipeline-status.service.js
index 5bf13ecff7..b1686e75cc 100644
--- a/services/gitlab/gitlab-pipeline-status.service.js
+++ b/services/gitlab/gitlab-pipeline-status.service.js
@@ -1,13 +1,12 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseSvgScrapingService = require('../base-svg-scraping')
-const { optionalUrl } = require('../validators')
-const { NotFound } = require('../errors')
 const {
   isBuildStatus,
   renderBuildStatusBadge,
 } = require('../../lib/build-status')
+const { BaseSvgScrapingService, NotFound } = require('..')
+const { optionalUrl } = require('../validators')
 
 const badgeSchema = Joi.object({
   message: Joi.alternatives()
diff --git a/services/gitlab/gitlab-pipeline-status.tester.js b/services/gitlab/gitlab-pipeline-status.tester.js
index 01f0d0162e..b2eb24310d 100644
--- a/services/gitlab/gitlab-pipeline-status.tester.js
+++ b/services/gitlab/gitlab-pipeline-status.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isBuildStatus } = require('../../lib/build-status')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Pipeline status')
   .get('/gitlab-org/gitlab-ce.json')
diff --git a/services/gitter/gitter.tester.js b/services/gitter/gitter.tester.js
index 07e6c5fa57..f5e7ecebae 100644
--- a/services/gitter/gitter.tester.js
+++ b/services/gitter/gitter.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('on gitter')
   .get('/nwjs/nw.js.json')
diff --git a/services/gratipay/gratipay.service.js b/services/gratipay/gratipay.service.js
index bcb9c2f5a2..d3bebd310b 100644
--- a/services/gratipay/gratipay.service.js
+++ b/services/gratipay/gratipay.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const deprecatedService = require('../deprecated-service')
+const { deprecatedService } = require('..')
 
 module.exports = deprecatedService({
   category: 'funding',
diff --git a/services/gratipay/gratipay.tester.js b/services/gratipay/gratipay.tester.js
index f88d590f94..dbf2522d7e 100644
--- a/services/gratipay/gratipay.tester.js
+++ b/services/gratipay/gratipay.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'gratipay',
diff --git a/services/hackage/hackage.tester.js b/services/hackage/hackage.tester.js
index 78de207168..a09ee66dca 100644
--- a/services/hackage/hackage.tester.js
+++ b/services/hackage/hackage.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isVPlusDottedVersionAtLeastOne } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/hexpm/hexpm.service.js b/services/hexpm/hexpm.service.js
index 4f25c3ecab..80c94618aa 100644
--- a/services/hexpm/hexpm.service.js
+++ b/services/hexpm/hexpm.service.js
@@ -1,16 +1,12 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
+const { metric, addv, maybePluralize } = require('../../lib/text-formatters')
 const {
-  metric,
-  addv: versionText,
-  maybePluralize,
-} = require('../../lib/text-formatters')
-const {
-  downloadCount: downloadCountColor,
+  downloadCount,
   version: versionColor,
 } = require('../../lib/color-formatters')
+const { BaseJsonService } = require('..')
 
 const hexSchema = Joi.object({
   downloads: Joi.object({
@@ -95,7 +91,7 @@ class HexPmLicense extends BaseHexPmService {
 
 class HexPmVersion extends BaseHexPmService {
   static render({ version }) {
-    return { message: versionText(version), color: versionColor(version) }
+    return { message: addv(version), color: versionColor(version) }
   }
 
   async handle({ packageName }) {
@@ -145,7 +141,7 @@ function DownloadsForInterval(interval) {
     static render({ downloads }) {
       return {
         message: `${metric(downloads)}${messageSuffix}`,
-        color: downloadCountColor(downloads),
+        color: downloadCount(downloads),
       }
     }
 
diff --git a/services/hexpm/hexpm.tester.js b/services/hexpm/hexpm.tester.js
index f4bd1731e8..8fd479f22e 100644
--- a/services/hexpm/hexpm.tester.js
+++ b/services/hexpm/hexpm.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isMetric, isMetricOverTimePeriod } = require('../test-validators')
 
 const isHexpmVersion = Joi.string().regex(/^v\d+.\d+.?\d?$/)
diff --git a/services/homebrew/homebrew.tester.js b/services/homebrew/homebrew.tester.js
index 1df0e2e1df..87781afa61 100644
--- a/services/homebrew/homebrew.tester.js
+++ b/services/homebrew/homebrew.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isVPlusTripleDottedVersion } = require('../test-validators')
 const { invalidJSON } = require('../response-fixtures')
 
diff --git a/services/imagelayers/imagelayers.service.js b/services/imagelayers/imagelayers.service.js
index 9c2632d6d0..1492831b6d 100644
--- a/services/imagelayers/imagelayers.service.js
+++ b/services/imagelayers/imagelayers.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const deprecatedService = require('../deprecated-service')
+const { deprecatedService } = require('..')
 
 // image layers integration - deprecated as of November 2018.
 module.exports = deprecatedService({
diff --git a/services/imagelayers/imagelayers.tester.js b/services/imagelayers/imagelayers.tester.js
index b30fd487df..51bf85fd5d 100644
--- a/services/imagelayers/imagelayers.tester.js
+++ b/services/imagelayers/imagelayers.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'imagelayers',
diff --git a/services/index.js b/services/index.js
index cdfa49b008..5081f0a5ed 100644
--- a/services/index.js
+++ b/services/index.js
@@ -1,10 +1,14 @@
 'use strict'
 
 const glob = require('glob')
-const BaseService = require('./base')
+const base = require('../core/base-service')
+const createServiceTester = require('./create-service-tester')
+const ServiceTester = require('./service-tester')
 const { categories } = require('./categories')
 const { assertValidServiceDefinitionExport } = require('./service-definitions')
 
+const { BaseService } = base
+
 class InvalidService extends Error {
   constructor(message) {
     super(message)
@@ -71,6 +75,9 @@ function loadTesters() {
 }
 
 module.exports = {
+  ...base,
+  createServiceTester,
+  ServiceTester,
   InvalidService,
   loadServiceClasses,
   loadTesters,
diff --git a/services/issuestats/issuestats.service.js b/services/issuestats/issuestats.service.js
index 15ce252370..9e6c57938f 100644
--- a/services/issuestats/issuestats.service.js
+++ b/services/issuestats/issuestats.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const deprecatedService = require('../deprecated-service')
+const { deprecatedService } = require('..')
 
 module.exports = deprecatedService({
   category: 'issue-tracking',
diff --git a/services/issuestats/issuestats.tester.js b/services/issuestats/issuestats.tester.js
index 4d34fb5565..8eb3f8cb7a 100644
--- a/services/issuestats/issuestats.tester.js
+++ b/services/issuestats/issuestats.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = new ServiceTester({ id: 'issuestats', title: 'Issue Stats' })
 module.exports = t
diff --git a/services/itunes/itunes.service.js b/services/itunes/itunes.service.js
index b922c9159f..4ab5ff24e2 100644
--- a/services/itunes/itunes.service.js
+++ b/services/itunes/itunes.service.js
@@ -1,9 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
 const { renderVersionBadge } = require('../../lib/version')
-const { NotFound } = require('../errors')
+const { BaseJsonService, NotFound } = require('..')
 const { nonNegativeInteger } = require('../validators')
 
 const schema = Joi.object({
diff --git a/services/itunes/itunes.tester.js b/services/itunes/itunes.tester.js
index 19696f0bc7..d5da284fae 100644
--- a/services/itunes/itunes.tester.js
+++ b/services/itunes/itunes.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isVPlusDottedVersionAtLeastOne } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('iTunes version (valid)')
   .get('/324684580.json')
diff --git a/services/jenkins/jenkins-coverage.service.js b/services/jenkins/jenkins-coverage.service.js
index e46c0358a7..6f0e023440 100644
--- a/services/jenkins/jenkins-coverage.service.js
+++ b/services/jenkins/jenkins-coverage.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 const serverSecrets = require('../../lib/server-secrets')
 
 const {
diff --git a/services/jenkins/jenkins-coverage.tester.js b/services/jenkins/jenkins-coverage.tester.js
index 16a78b6024..eb10f8c3fb 100644
--- a/services/jenkins/jenkins-coverage.tester.js
+++ b/services/jenkins/jenkins-coverage.tester.js
@@ -1,8 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
+const { ServiceTester } = require('..')
 const { isIntegerPercentage } = require('../test-validators')
-const ServiceTester = require('../service-tester')
 
 const t = new ServiceTester({
   id: 'jenkins-coverage',
diff --git a/services/jenkins/jenkins-plugin-installs.service.js b/services/jenkins/jenkins-plugin-installs.service.js
index ccf6137bfb..4f29a0d23a 100644
--- a/services/jenkins/jenkins-plugin-installs.service.js
+++ b/services/jenkins/jenkins-plugin-installs.service.js
@@ -2,12 +2,11 @@
 
 const Joi = require('joi')
 
-const BaseJsonService = require('../base-json')
-const { NotFound } = require('../errors')
 const {
   downloadCount: downloadCountColor,
 } = require('../../lib/color-formatters')
 const { metric } = require('../../lib/text-formatters')
+const { BaseJsonService, NotFound } = require('..')
 const { nonNegativeInteger } = require('../validators')
 
 const schemaInstallations = Joi.object()
diff --git a/services/jenkins/jenkins-plugin-installs.tester.js b/services/jenkins/jenkins-plugin-installs.tester.js
index 96a8932e89..bb62c497ea 100644
--- a/services/jenkins/jenkins-plugin-installs.tester.js
+++ b/services/jenkins/jenkins-plugin-installs.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isMetric } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 // total installs
 
diff --git a/services/jenkins/jenkins-plugin-version.tester.js b/services/jenkins/jenkins-plugin-version.tester.js
index 0e84fdc6cc..2534f5c6b0 100644
--- a/services/jenkins/jenkins-plugin-version.tester.js
+++ b/services/jenkins/jenkins-plugin-version.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = new ServiceTester({
   id: 'jenkins-plugin',
diff --git a/services/jetbrains/jetbrains-base.js b/services/jetbrains/jetbrains-base.js
index 9f4871e474..b80a46cb16 100644
--- a/services/jetbrains/jetbrains-base.js
+++ b/services/jetbrains/jetbrains-base.js
@@ -1,7 +1,6 @@
 'use strict'
 
-const BaseXmlService = require('../base-xml')
-const { NotFound } = require('../errors')
+const { BaseXmlService, NotFound } = require('..')
 
 module.exports = class JetbrainsBase extends BaseXmlService {
   static buildUrl(base) {
diff --git a/services/jetbrains/jetbrains.tester.js b/services/jetbrains/jetbrains.tester.js
index 860b1b1f6d..c7bb86316e 100644
--- a/services/jetbrains/jetbrains.tester.js
+++ b/services/jetbrains/jetbrains.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isMetric, isVPlusDottedVersionNClauses } = require('../test-validators')
 
 const t = new ServiceTester({ id: 'jetbrains', title: 'JetBrains' })
diff --git a/services/jira/jira-base.js b/services/jira/jira-base.js
index bcf2410e4d..e22d813b33 100644
--- a/services/jira/jira-base.js
+++ b/services/jira/jira-base.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 const serverSecrets = require('../../lib/server-secrets')
 
 module.exports = class JiraBase extends BaseJsonService {
diff --git a/services/jira/jira-issue.tester.js b/services/jira/jira-issue.tester.js
index 8d5b920c7d..b8fb77f058 100644
--- a/services/jira/jira-issue.tester.js
+++ b/services/jira/jira-issue.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 const { mockJiraCreds, restore, user, pass } = require('./jira-test-helpers')
 
 t.create('live: unknown issue')
diff --git a/services/jira/jira-sprint.tester.js b/services/jira/jira-sprint.tester.js
index 58de592df4..595d51b937 100644
--- a/services/jira/jira-sprint.tester.js
+++ b/services/jira/jira-sprint.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 const { isIntegerPercentage } = require('../test-validators')
 const { mockJiraCreds, restore, user, pass } = require('./jira-test-helpers')
 
diff --git a/services/jitpack/jitpack.tester.js b/services/jitpack/jitpack.tester.js
index c0a58dbece..cbca26fde1 100644
--- a/services/jitpack/jitpack.tester.js
+++ b/services/jitpack/jitpack.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 // Github allows versions with chars, etc.
 const isAnyV = Joi.string().regex(/^v.+$/)
diff --git a/services/leanpub/leanpub-book-summary.service.js b/services/leanpub/leanpub-book-summary.service.js
index a7e97113ff..0aafddb0f3 100644
--- a/services/leanpub/leanpub-book-summary.service.js
+++ b/services/leanpub/leanpub-book-summary.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 
 const bookSummarySchema = Joi.object({
   id: Joi.number().required(),
diff --git a/services/leanpub/leanpub-book-summary.tester.js b/services/leanpub/leanpub-book-summary.tester.js
index 797edc468c..a712a54891 100644
--- a/services/leanpub/leanpub-book-summary.tester.js
+++ b/services/leanpub/leanpub-book-summary.tester.js
@@ -4,7 +4,7 @@ const Joi = require('joi')
 
 const knownValidBook = 'juice-shop'
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('known book pages')
   .get(`/pages/${knownValidBook}.json`)
diff --git a/services/lgtm/lgtm.tester.js b/services/lgtm/lgtm.tester.js
index 7e5bbb134d..c8c242e4ac 100644
--- a/services/lgtm/lgtm.tester.js
+++ b/services/lgtm/lgtm.tester.js
@@ -1,10 +1,10 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { invalidJSON } = require('../response-fixtures')
-const t = new ServiceTester({ id: 'lgtm', title: 'LGTM' })
-module.exports = t
+
+const t = (module.exports = new ServiceTester({ id: 'lgtm', title: 'LGTM' }))
 
 // Alerts Badge
 
diff --git a/services/liberapay/liberapay.tester.js b/services/liberapay/liberapay.tester.js
index 8bbf7beddc..4249c8f358 100644
--- a/services/liberapay/liberapay.tester.js
+++ b/services/liberapay/liberapay.tester.js
@@ -1,13 +1,18 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
+const { isMetric } = require('../test-validators')
+
+// Values must be greater than zero.
 const isLiberapayTestValues = Joi.string().regex(
   /^([0-9]*[1-9][0-9]*(\.[0-9]+)?|[0]+\.[0-9]*[1-9][0-9]*)[ A-Za-z]{4}\/week/
-) //values must be greater than zero
-const { isMetric } = require('../test-validators')
-const t = new ServiceTester({ id: 'liberapay', title: 'Liberapay' })
-module.exports = t
+)
+
+const t = (module.exports = new ServiceTester({
+  id: 'liberapay',
+  title: 'Liberapay',
+}))
 
 t.create('Receiving')
   .get('/receives/Liberapay.json')
diff --git a/services/librariesio/librariesio-base.js b/services/librariesio/librariesio-base.js
index f26d138637..cd7b4b4dee 100644
--- a/services/librariesio/librariesio-base.js
+++ b/services/librariesio/librariesio-base.js
@@ -1,8 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
-const { InvalidResponse } = require('../errors')
+const { BaseJsonService, InvalidResponse } = require('..')
 const { nonNegativeInteger, anyInteger } = require('../validators')
 
 // API doc: https://libraries.io/api#project
diff --git a/services/librariesio/librariesio-dependencies.tester.js b/services/librariesio/librariesio-dependencies.tester.js
index a78eb2e68a..ffef6867c4 100644
--- a/services/librariesio/librariesio-dependencies.tester.js
+++ b/services/librariesio/librariesio-dependencies.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isDependencyState } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('dependencies for releases')
   .get('/release/hex/phoenix/1.0.3.json')
diff --git a/services/librariesio/librariesio-dependent-repos.tester.js b/services/librariesio/librariesio-dependent-repos.tester.js
index 00418f175e..bf6f849775 100644
--- a/services/librariesio/librariesio-dependent-repos.tester.js
+++ b/services/librariesio/librariesio-dependent-repos.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isMetric } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('dependent repo count')
   .get('/npm/got.json')
diff --git a/services/librariesio/librariesio-dependents.tester.js b/services/librariesio/librariesio-dependents.tester.js
index 87c16aa028..dd2ec520d9 100644
--- a/services/librariesio/librariesio-dependents.tester.js
+++ b/services/librariesio/librariesio-dependents.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isMetric } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('dependent count')
   .get('/npm/got.json')
diff --git a/services/librariesio/librariesio-sourcerank.tester.js b/services/librariesio/librariesio-sourcerank.tester.js
index 822636db4b..80c8864f20 100644
--- a/services/librariesio/librariesio-sourcerank.tester.js
+++ b/services/librariesio/librariesio-sourcerank.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { anyInteger } = require('../validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('sourcerank')
   .get('/npm/got.json')
diff --git a/services/libscore/libscore.service.js b/services/libscore/libscore.service.js
index ea95977d15..26e5d1aa8f 100644
--- a/services/libscore/libscore.service.js
+++ b/services/libscore/libscore.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const deprecatedService = require('../deprecated-service')
+const { deprecatedService } = require('..')
 
 module.exports = deprecatedService({
   category: 'rating',
diff --git a/services/libscore/libscore.tester.js b/services/libscore/libscore.tester.js
index 1c77fe6052..8c440914e0 100644
--- a/services/libscore/libscore.tester.js
+++ b/services/libscore/libscore.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = new ServiceTester({ id: 'libscore', title: 'libscore' })
 module.exports = t
diff --git a/services/luarocks/luarocks.tester.js b/services/luarocks/luarocks.tester.js
index 19907808c5..94ce1874e4 100644
--- a/services/luarocks/luarocks.tester.js
+++ b/services/luarocks/luarocks.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = new ServiceTester({ id: 'luarocks', title: 'LuaRocks' })
 module.exports = t
diff --git a/services/magnumci/magnumci.service.js b/services/magnumci/magnumci.service.js
index d3f0ea84a9..bee5dd6b30 100644
--- a/services/magnumci/magnumci.service.js
+++ b/services/magnumci/magnumci.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const deprecatedService = require('../deprecated-service')
+const { deprecatedService } = require('..')
 
 // Magnum CI integration - deprecated as of July 2018
 module.exports = deprecatedService({
diff --git a/services/magnumci/magnumci.tester.js b/services/magnumci/magnumci.tester.js
index 3b75f3e203..bd44cf89f2 100644
--- a/services/magnumci/magnumci.tester.js
+++ b/services/magnumci/magnumci.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = new ServiceTester({ id: 'magnumci', title: 'Magnum CI' })
 module.exports = t
diff --git a/services/maintenance/maintenance.tester.js b/services/maintenance/maintenance.tester.js
index ce1c981151..d10bed8df3 100644
--- a/services/maintenance/maintenance.tester.js
+++ b/services/maintenance/maintenance.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = new ServiceTester({ id: 'maintenance', title: 'Maintenance' })
 module.exports = t
diff --git a/services/matrix/matrix.service.js b/services/matrix/matrix.service.js
index c86d3d0f64..17b10bf75c 100644
--- a/services/matrix/matrix.service.js
+++ b/services/matrix/matrix.service.js
@@ -1,8 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
-const errors = require('../errors')
+const { BaseJsonService, InvalidParameter } = require('..')
 
 const queryParamSchema = Joi.object({
   server_fqdn: Joi.string().hostname(),
@@ -127,7 +126,7 @@ module.exports = class Matrix extends BaseJsonService {
           host = `${splitAlias[1]}:${splitAlias[2]}`
           break
         default:
-          throw new errors.InvalidParameter({ prettyMessage: 'invalid alias' })
+          throw new InvalidParameter({ prettyMessage: 'invalid alias' })
       }
     } else {
       host = serverFQDN
diff --git a/services/matrix/matrix.tester.js b/services/matrix/matrix.tester.js
index d2722fd56c..9f5fb54c1b 100644
--- a/services/matrix/matrix.tester.js
+++ b/services/matrix/matrix.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('get room state as guest')
   .get('/ALIAS:DUMMY.dumb.json?style=_shields_test')
diff --git a/services/maven-central/maven-central.tester.js b/services/maven-central/maven-central.tester.js
index 2125abfe5f..7f089c7c48 100644
--- a/services/maven-central/maven-central.tester.js
+++ b/services/maven-central/maven-central.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = new ServiceTester({ id: 'maven-central', title: 'Maven Central' })
 module.exports = t
diff --git a/services/maven-metadata/maven-metadata.tester.js b/services/maven-metadata/maven-metadata.tester.js
index 0ca9405191..b4e2b4aa64 100644
--- a/services/maven-metadata/maven-metadata.tester.js
+++ b/services/maven-metadata/maven-metadata.tester.js
@@ -1,14 +1,13 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isVPlusDottedVersionAtLeastOne } = require('../test-validators')
 
-const t = new ServiceTester({
+const t = (module.exports = new ServiceTester({
   id: 'maven-metadata',
   title: 'maven-metadata badge',
-})
-module.exports = t
+}))
 
 t.create('valid maven-metadata.xml uri')
   .get(
diff --git a/services/microbadger/microbadger.tester.js b/services/microbadger/microbadger.tester.js
index e026407aa5..242135572c 100644
--- a/services/microbadger/microbadger.tester.js
+++ b/services/microbadger/microbadger.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isFileSize } = require('../test-validators')
 const { invalidJSON } = require('../response-fixtures')
 
diff --git a/services/myget/myget.tester.js b/services/myget/myget.tester.js
index 4f314b34d5..87606a7602 100644
--- a/services/myget/myget.tester.js
+++ b/services/myget/myget.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const {
   isMetric,
   isVPlusDottedVersionNClausesWithOptionalSuffix,
@@ -14,8 +14,11 @@ const {
 } = require('../nuget-fixtures')
 const { invalidJSON } = require('../response-fixtures')
 
-const t = new ServiceTester({ id: 'myget', title: 'MyGet', pathPrefix: '' })
-module.exports = t
+const t = (module.exports = new ServiceTester({
+  id: 'myget',
+  title: 'MyGet',
+  pathPrefix: '',
+}))
 
 // downloads
 
@@ -63,22 +66,6 @@ t.create('total downloads (unexpected first response)')
     value: 'unparseable intermediate json response',
   })
 
-t.create('total downloads (unexpected second response)')
-  .get('/myget/mongodb/dt/MongoDB.Driver.Core.json')
-  .intercept(nock =>
-    nock('https://www.myget.org')
-      .get('/F/mongodb/api/v3/index.json')
-      .reply(200, queryIndex)
-  )
-  .intercept(nock =>
-    nock('https://api-v2v3search-0.nuget.org')
-      .get(
-        '/query?q=packageid%3Amongodb.driver.core&prerelease=true&semVerLevel=2'
-      )
-      .reply(invalidJSON)
-  )
-  .expectJSON({ name: 'downloads', value: 'unparseable json response' })
-
 // version
 
 t.create('version (valid)')
@@ -163,22 +150,6 @@ t.create('version (not found)')
   .get('/myget/foo/v/not-a-real-package.json')
   .expectJSON({ name: 'myget', value: 'package not found' })
 
-t.create('version (unexpected second response)')
-  .get('/myget/mongodb/v/MongoDB.Driver.Core.json')
-  .intercept(nock =>
-    nock('https://www.myget.org')
-      .get('/F/mongodb/api/v3/index.json')
-      .reply(200, queryIndex)
-  )
-  .intercept(nock =>
-    nock('https://api-v2v3search-0.nuget.org')
-      .get(
-        '/query?q=packageid%3Amongodb.driver.core&prerelease=true&semVerLevel=2'
-      )
-      .reply(invalidJSON)
-  )
-  .expectJSON({ name: 'myget', value: 'unparseable json response' })
-
 // version (pre)
 
 t.create('version (pre) (valid)')
@@ -253,19 +224,3 @@ t.create('version (pre) (mocked, blue badge)')
 t.create('version (pre) (not found)')
   .get('/myget/foo/vpre/not-a-real-package.json')
   .expectJSON({ name: 'myget', value: 'package not found' })
-
-t.create('version (pre) (unexpected second response)')
-  .get('/myget/mongodb/vpre/MongoDB.Driver.Core.json')
-  .intercept(nock =>
-    nock('https://www.myget.org')
-      .get('/F/mongodb/api/v3/index.json')
-      .reply(200, queryIndex)
-  )
-  .intercept(nock =>
-    nock('https://api-v2v3search-0.nuget.org')
-      .get(
-        '/query?q=packageid%3Amongodb.driver.core&prerelease=true&semVerLevel=2'
-      )
-      .reply(invalidJSON)
-  )
-  .expectJSON({ name: 'myget', value: 'unparseable json response' })
diff --git a/services/nexus/nexus.service.js b/services/nexus/nexus.service.js
index 191be75790..c3e769b12e 100644
--- a/services/nexus/nexus.service.js
+++ b/services/nexus/nexus.service.js
@@ -2,15 +2,14 @@
 
 const Joi = require('joi')
 
-const BaseJsonService = require('../base-json')
-const { InvalidResponse, NotFound } = require('../errors')
-const { isSnapshotVersion } = require('./nexus-version')
 const { version: versionColor } = require('../../lib/color-formatters')
 const { addv } = require('../../lib/text-formatters')
 const serverSecrets = require('../../lib/server-secrets')
+const { BaseJsonService, InvalidResponse, NotFound } = require('..')
 const {
   optionalDottedVersionNClausesWithOptionalSuffix,
 } = require('../validators')
+const { isSnapshotVersion } = require('./nexus-version')
 
 const searchApiSchema = Joi.object({
   data: Joi.array()
diff --git a/services/nexus/nexus.tester.js b/services/nexus/nexus.tester.js
index 8b6fbf8a2c..efffb2849f 100644
--- a/services/nexus/nexus.tester.js
+++ b/services/nexus/nexus.tester.js
@@ -5,7 +5,7 @@ const sinon = require('sinon')
 const {
   isVPlusDottedVersionNClausesWithOptionalSuffix: isVersion,
 } = require('../test-validators')
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 const serverSecrets = require('../../lib/server-secrets')
 
 const user = 'admin'
diff --git a/services/node/node.tester.js b/services/node/node.tester.js
index 78c3a4ece3..f9baa4ff8e 100644
--- a/services/node/node.tester.js
+++ b/services/node/node.tester.js
@@ -4,7 +4,7 @@ const { expect } = require('chai')
 const Joi = require('joi')
 const { Range } = require('semver')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 function expectSemverRange(value) {
   expect(() => new Range(value)).not.to.throw()
diff --git a/services/npm/npm-base.js b/services/npm/npm-base.js
index 2d7d239fe9..a6553a143f 100644
--- a/services/npm/npm-base.js
+++ b/services/npm/npm-base.js
@@ -2,8 +2,7 @@
 
 const Joi = require('joi')
 const serverSecrets = require('../../lib/server-secrets')
-const BaseJsonService = require('../base-json')
-const { InvalidResponse, NotFound } = require('../errors')
+const { BaseJsonService, InvalidResponse, NotFound } = require('..')
 const { isDependencyMap } = require('../package-json-helpers')
 
 const deprecatedLicenseObjectSchema = Joi.object({
diff --git a/services/npm/npm-collaborators.tester.js b/services/npm/npm-collaborators.tester.js
index 4b8343fc60..f005d87ce5 100644
--- a/services/npm/npm-collaborators.tester.js
+++ b/services/npm/npm-collaborators.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 const { nonNegativeInteger } = require('../validators')
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('gets the contributor count')
   .get('/prettier.json')
diff --git a/services/npm/npm-dependency-version.tester.js b/services/npm/npm-dependency-version.tester.js
index 5a998e8a25..9fe860b1cd 100644
--- a/services/npm/npm-dependency-version.tester.js
+++ b/services/npm/npm-dependency-version.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 const { semverRange } = require('../validators')
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('gets the peer dependency version')
   .get('/react-boxplot/peer/react.json')
diff --git a/services/npm/npm-downloads.service.js b/services/npm/npm-downloads.service.js
index 16a3c30896..ef9b525b2f 100644
--- a/services/npm/npm-downloads.service.js
+++ b/services/npm/npm-downloads.service.js
@@ -1,8 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
 const { metric } = require('../../lib/text-formatters')
+const { BaseJsonService } = require('..')
 const { nonNegativeInteger } = require('../validators')
 
 // https://github.com/npm/registry/blob/master/docs/download-counts.md#output
diff --git a/services/npm/npm-downloads.tester.js b/services/npm/npm-downloads.tester.js
index ff499a871b..29a2d449ea 100644
--- a/services/npm/npm-downloads.tester.js
+++ b/services/npm/npm-downloads.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isMetric } = require('../test-validators')
 
 const t = new ServiceTester({
diff --git a/services/npm/npm-license.tester.js b/services/npm/npm-license.tester.js
index e10b75c9fe..cc6f1e8672 100644
--- a/services/npm/npm-license.tester.js
+++ b/services/npm/npm-license.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('gets the license of express')
   .get('/express.json')
diff --git a/services/npm/npm-type-definitions.tester.js b/services/npm/npm-type-definitions.tester.js
index 5a3350944e..47e39e25a8 100644
--- a/services/npm/npm-type-definitions.tester.js
+++ b/services/npm/npm-type-definitions.tester.js
@@ -6,7 +6,7 @@ const isTypeDefinition = Joi.string().regex(
   /^((Flow|TypeScript)|(Flow \| TypeScript))$/
 )
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('types (from dev dependencies + files)')
   .get('/chalk.json')
diff --git a/services/npm/npm-version.service.js b/services/npm/npm-version.service.js
index 79fbaec21c..a2211826eb 100644
--- a/services/npm/npm-version.service.js
+++ b/services/npm/npm-version.service.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 const { renderVersionBadge } = require('../../lib/version')
-const { NotFound } = require('../errors')
+const { NotFound } = require('..')
 const NpmBase = require('./npm-base')
 
 const keywords = ['node']
diff --git a/services/npm/npm-version.tester.js b/services/npm/npm-version.tester.js
index 87e97cb438..f87f41f9bc 100644
--- a/services/npm/npm-version.tester.js
+++ b/services/npm/npm-version.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isSemver } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('gets the package version of left-pad')
   .get('/left-pad.json')
diff --git a/services/nsp/nsp.service.js b/services/nsp/nsp.service.js
index 9b488c7a89..703b15e9c2 100644
--- a/services/nsp/nsp.service.js
+++ b/services/nsp/nsp.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const deprecatedService = require('../deprecated-service')
+const { deprecatedService } = require('..')
 
 // nsp integration - deprecated as of December 2018.
 module.exports = deprecatedService({
diff --git a/services/nsp/nsp.tester.js b/services/nsp/nsp.tester.js
index 9e21341e8e..5e6c38d40c 100644
--- a/services/nsp/nsp.tester.js
+++ b/services/nsp/nsp.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'nsp',
diff --git a/services/nuget/nuget-v2-service-family.js b/services/nuget/nuget-v2-service-family.js
index 373d218c2f..523837e0af 100644
--- a/services/nuget/nuget-v2-service-family.js
+++ b/services/nuget/nuget-v2-service-family.js
@@ -1,9 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-
-const BaseJsonService = require('../base-json')
-const { NotFound } = require('../errors')
+const { BaseJsonService, NotFound } = require('..')
 const { nonNegativeInteger } = require('../validators')
 const { renderVersionBadge, renderDownloadBadge } = require('./nuget-helpers')
 
diff --git a/services/nuget/nuget-v3-service-family.js b/services/nuget/nuget-v3-service-family.js
index 7b8240c195..662566ae23 100644
--- a/services/nuget/nuget-v3-service-family.js
+++ b/services/nuget/nuget-v3-service-family.js
@@ -4,8 +4,7 @@ const { promisify } = require('util')
 const Joi = require('joi')
 const { regularUpdate } = require('../../lib/regular-update')
 const RouteBuilder = require('../route-builder')
-const BaseJsonService = require('../base-json')
-const { NotFound } = require('../errors')
+const { BaseJsonService, NotFound } = require('..')
 const { renderVersionBadge, renderDownloadBadge } = require('./nuget-helpers')
 
 /*
diff --git a/services/nuget/nuget.tester.js b/services/nuget/nuget.tester.js
index f05f81c81e..dc721a1c16 100644
--- a/services/nuget/nuget.tester.js
+++ b/services/nuget/nuget.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const {
   isMetric,
   isVPlusDottedVersionNClauses,
@@ -15,8 +15,7 @@ const {
 } = require('../nuget-fixtures')
 const { invalidJSON } = require('../response-fixtures')
 
-const t = new ServiceTester({ id: 'nuget', title: 'NuGet' })
-module.exports = t
+const t = (module.exports = new ServiceTester({ id: 'nuget', title: 'NuGet' }))
 
 // downloads
 
diff --git a/services/opencollective/opencollective-all.tester.js b/services/opencollective/opencollective-all.tester.js
index a69d5b348e..05282b0a7b 100644
--- a/services/opencollective/opencollective-all.tester.js
+++ b/services/opencollective/opencollective-all.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 const { nonNegativeInteger } = require('../validators')
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('renders correctly')
   .get('/shields.json?style=_shields_test')
diff --git a/services/opencollective/opencollective-backers.tester.js b/services/opencollective/opencollective-backers.tester.js
index 24e5be5fce..541a595fd7 100644
--- a/services/opencollective/opencollective-backers.tester.js
+++ b/services/opencollective/opencollective-backers.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 const { nonNegativeInteger } = require('../validators')
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('renders correctly')
   .get('/shields.json?style=_shields_test')
diff --git a/services/opencollective/opencollective-base.js b/services/opencollective/opencollective-base.js
index ac54277924..41ba077f4e 100644
--- a/services/opencollective/opencollective-base.js
+++ b/services/opencollective/opencollective-base.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 const { nonNegativeInteger } = require('../validators')
 
 // https://developer.opencollective.com/#/api/collectives?id=get-info
diff --git a/services/opencollective/opencollective-by-tier.tester.js b/services/opencollective/opencollective-by-tier.tester.js
index 28f962d6fc..df7ae78a7d 100644
--- a/services/opencollective/opencollective-by-tier.tester.js
+++ b/services/opencollective/opencollective-by-tier.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 const { nonNegativeInteger } = require('../validators')
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('renders correctly')
   .get('/shields/2988.json')
diff --git a/services/opencollective/opencollective-sponsors.tester.js b/services/opencollective/opencollective-sponsors.tester.js
index 5087ad5cee..9d8ef2063d 100644
--- a/services/opencollective/opencollective-sponsors.tester.js
+++ b/services/opencollective/opencollective-sponsors.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 const { nonNegativeInteger } = require('../validators')
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('renders correctly')
   .get('/shields.json')
diff --git a/services/osslifecycle/osslifecycle.service.js b/services/osslifecycle/osslifecycle.service.js
index fcc11807e8..ef871be3c5 100644
--- a/services/osslifecycle/osslifecycle.service.js
+++ b/services/osslifecycle/osslifecycle.service.js
@@ -1,7 +1,6 @@
 'use strict'
 
-const BaseService = require('../base')
-const { InvalidResponse } = require('../errors')
+const { BaseService, InvalidResponse } = require('..')
 
 module.exports = class OssTracker extends BaseService {
   static get category() {
diff --git a/services/osslifecycle/osslifecycle.tester.js b/services/osslifecycle/osslifecycle.tester.js
index 716e8e9e1a..dfd730a541 100644
--- a/services/osslifecycle/osslifecycle.tester.js
+++ b/services/osslifecycle/osslifecycle.tester.js
@@ -1,8 +1,11 @@
 'use strict'
 
-const ServiceTester = require('../service-tester')
-const t = new ServiceTester({ id: 'osslifecycle', title: 'OSS Lifecycle' })
-module.exports = t
+const { ServiceTester } = require('..')
+
+const t = (module.exports = new ServiceTester({
+  id: 'osslifecycle',
+  title: 'OSS Lifecycle',
+}))
 
 t.create('osslifecycle status')
   .get('/Netflix/osstracker.json')
diff --git a/services/packagecontrol/packagecontrol.tester.js b/services/packagecontrol/packagecontrol.tester.js
index acd3d7ed9f..0701e4a6fe 100644
--- a/services/packagecontrol/packagecontrol.tester.js
+++ b/services/packagecontrol/packagecontrol.tester.js
@@ -1,11 +1,13 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isMetric, isMetricOverTimePeriod } = require('../test-validators')
 
-const t = new ServiceTester({ id: 'packagecontrol', title: 'Package Control' })
-module.exports = t
+const t = (module.exports = new ServiceTester({
+  id: 'packagecontrol',
+  title: 'Package Control',
+}))
 
 t.create('monthly downloads')
   .get('/dm/GitGutter.json')
diff --git a/services/packagist/packagist.tester.js b/services/packagist/packagist.tester.js
index 415ab1d7ab..ce2aa3f2d2 100644
--- a/services/packagist/packagist.tester.js
+++ b/services/packagist/packagist.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const {
   isComposerVersion,
   isMetric,
@@ -17,11 +17,10 @@ const {
 */
 const isPackagistVersion = Joi.string().regex(/^v?[0-9]+.[0-9]+.[0-9]+[\S]*$/)
 
-const t = new ServiceTester({
+const t = (module.exports = new ServiceTester({
   id: 'packagist',
   title: 'PHP version from Packagist',
-})
-module.exports = t
+}))
 
 // tests for php version support endpoint
 
diff --git a/services/php-eye/php-eye-hhvm.tester.js b/services/php-eye/php-eye-hhvm.tester.js
index c94d38e366..df8cdfe156 100644
--- a/services/php-eye/php-eye-hhvm.tester.js
+++ b/services/php-eye/php-eye-hhvm.tester.js
@@ -1,16 +1,17 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { invalidJSON } = require('../response-fixtures')
 
-const t = new ServiceTester({ id: 'hhvm', title: 'hhvm status' })
-
 const isAllowedStatus = Joi.string().regex(
   /^(tested|partially tested|not tested|maybe untested)$/
 )
 
-module.exports = t
+const t = (module.exports = new ServiceTester({
+  id: 'hhvm',
+  title: 'hhvm status',
+}))
 
 t.create('get default branch')
   .get('/symfony/symfony.json')
diff --git a/services/php-eye/php-eye-php-version.tester.js b/services/php-eye/php-eye-php-version.tester.js
index 29befab9b9..fbe25a6a28 100644
--- a/services/php-eye/php-eye-php-version.tester.js
+++ b/services/php-eye/php-eye-php-version.tester.js
@@ -1,14 +1,13 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isPhpVersionReduction } = require('../test-validators')
 
-const t = new ServiceTester({
+const t = (module.exports = new ServiceTester({
   id: 'php-eye',
   title: 'PHP version from PHP-Eye',
-})
-module.exports = t
+}))
 
 t.create('gets the package version of symfony')
   .get('/symfony/symfony.json')
diff --git a/services/powershellgallery/powershellgallery.service.js b/services/powershellgallery/powershellgallery.service.js
index 43f5a310d7..2b3ba59409 100644
--- a/services/powershellgallery/powershellgallery.service.js
+++ b/services/powershellgallery/powershellgallery.service.js
@@ -1,15 +1,13 @@
 'use strict'
 
 const Joi = require('joi')
-
-const BaseXmlService = require('../base-xml')
-const { NotFound } = require('../errors')
-const { nonNegativeInteger } = require('../validators')
 const { createFilter } = require('../nuget/nuget-v2-service-family')
 const {
   renderVersionBadge,
   renderDownloadBadge,
 } = require('../nuget/nuget-helpers')
+const { BaseXmlService, NotFound } = require('..')
+const { nonNegativeInteger } = require('../validators')
 
 const WINDOWS_TAG_NAME = 'windows'
 const MACOS_TAG_NAME = 'macos'
diff --git a/services/powershellgallery/powershellgallery.tester.js b/services/powershellgallery/powershellgallery.tester.js
index 3f813ef568..57bca78116 100644
--- a/services/powershellgallery/powershellgallery.tester.js
+++ b/services/powershellgallery/powershellgallery.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const {
   isMetric,
   isVPlusDottedVersionNClauses,
diff --git a/services/pub/pub.tester.js b/services/pub/pub.tester.js
index 94b3d23e22..0d9deac3ed 100644
--- a/services/pub/pub.tester.js
+++ b/services/pub/pub.tester.js
@@ -1,11 +1,10 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isVPlusTripleDottedVersion } = require('../test-validators')
 
-const t = new ServiceTester({ id: 'pub', title: 'Pub' })
-module.exports = t
+const t = (module.exports = new ServiceTester({ id: 'pub', title: 'Pub' }))
 
 t.create('package version')
   .get('/v/box2d.json')
diff --git a/services/puppetforge/puppetforge-modules.tester.js b/services/puppetforge/puppetforge-modules.tester.js
index a78e39c6e4..14e70dcb76 100644
--- a/services/puppetforge/puppetforge-modules.tester.js
+++ b/services/puppetforge/puppetforge-modules.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isSemver } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/pypi/pypi-base.js b/services/pypi/pypi-base.js
index 51aafc79c6..4179f3eea1 100644
--- a/services/pypi/pypi-base.js
+++ b/services/pypi/pypi-base.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 
 const schema = Joi.object({
   info: Joi.object({
diff --git a/services/pypi/pypi-downloads.service.js b/services/pypi/pypi-downloads.service.js
index 4267178a85..0bae85d40b 100644
--- a/services/pypi/pypi-downloads.service.js
+++ b/services/pypi/pypi-downloads.service.js
@@ -1,9 +1,9 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
 const { downloadCount } = require('../../lib/color-formatters')
 const { metric } = require('../../lib/text-formatters')
+const { BaseJsonService } = require('..')
 const { nonNegativeInteger } = require('../validators')
 
 const keywords = ['python']
diff --git a/services/pypi/pypi.tester.js b/services/pypi/pypi.tester.js
index ab204015ee..e99280389b 100644
--- a/services/pypi/pypi.tester.js
+++ b/services/pypi/pypi.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isMetricOverTimePeriod, isSemver } = require('../test-validators')
 
 const isPsycopg2Version = Joi.string().regex(/^v([0-9][.]?)+$/)
diff --git a/services/readthedocs/readthedocs.service.js b/services/readthedocs/readthedocs.service.js
index 93391e1b85..1108b09a43 100644
--- a/services/readthedocs/readthedocs.service.js
+++ b/services/readthedocs/readthedocs.service.js
@@ -1,12 +1,11 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseSvgScrapingService = require('../base-svg-scraping')
-const { NotFound } = require('../errors')
 const {
   isBuildStatus,
   renderBuildStatusBadge,
 } = require('../../lib/build-status')
+const { BaseSvgScrapingService, NotFound } = require('..')
 
 const keywords = ['documentation']
 
diff --git a/services/readthedocs/readthedocs.tester.js b/services/readthedocs/readthedocs.tester.js
index 73e684b576..5ecb2bb75d 100644
--- a/services/readthedocs/readthedocs.tester.js
+++ b/services/readthedocs/readthedocs.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isBuildStatus } = require('../../lib/build-status')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('build status')
   .get('/pip.json')
diff --git a/services/redmine/redmine.service.js b/services/redmine/redmine.service.js
index 9104bbb303..26a74a8c1e 100644
--- a/services/redmine/redmine.service.js
+++ b/services/redmine/redmine.service.js
@@ -4,7 +4,7 @@ const { starRating } = require('../../lib/text-formatters')
 const { floorCount: floorCountColor } = require('../../lib/color-formatters')
 
 const Joi = require('joi')
-const BaseXmlService = require('../base-xml')
+const { BaseXmlService } = require('..')
 
 const schema = Joi.object({
   'redmine-plugin': Joi.object({
diff --git a/services/redmine/redmine.tester.js b/services/redmine/redmine.tester.js
index b06cd1460d..aa6fb02c11 100644
--- a/services/redmine/redmine.tester.js
+++ b/services/redmine/redmine.tester.js
@@ -1,11 +1,13 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isStarRating } = require('../test-validators')
 
-const t = new ServiceTester({ id: 'redmine', title: 'Redmine' })
-module.exports = t
+const t = (module.exports = new ServiceTester({
+  id: 'redmine',
+  title: 'Redmine',
+}))
 
 t.create('plugin rating')
   .get('/plugin/rating/redmine_xlsx_format_issue_exporter.json')
diff --git a/services/requires/requires.service.js b/services/requires/requires.service.js
index 2983ac63ac..409307b679 100644
--- a/services/requires/requires.service.js
+++ b/services/requires/requires.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 const Joi = require('joi')
 
 const statusSchema = Joi.object({
diff --git a/services/requires/requires.tester.js b/services/requires/requires.tester.js
index 7493d1fec0..34a6503643 100644
--- a/services/requires/requires.tester.js
+++ b/services/requires/requires.tester.js
@@ -6,7 +6,7 @@ const isRequireStatus = Joi.string().regex(
   /^(up to date|outdated|insecure|unknown)$/
 )
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('requirements (valid, without branch)')
   .get('/github/celery/celery.json')
diff --git a/services/resharper/resharper.tester.js b/services/resharper/resharper.tester.js
index fcf311d66e..35b10de1e0 100644
--- a/services/resharper/resharper.tester.js
+++ b/services/resharper/resharper.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const {
   isMetric,
   isVPlusDottedVersionNClauses,
diff --git a/services/scrutinizer/scrutinizer.tester.js b/services/scrutinizer/scrutinizer.tester.js
index eb9aa37ddf..bc2708e912 100644
--- a/services/scrutinizer/scrutinizer.tester.js
+++ b/services/scrutinizer/scrutinizer.tester.js
@@ -1,12 +1,14 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
-const { isIntegerPercentage } = require('../test-validators')
 const { isBuildStatus } = require('../../lib/build-status')
+const { ServiceTester } = require('..')
+const { isIntegerPercentage } = require('../test-validators')
 
-const t = new ServiceTester({ id: 'scrutinizer', title: 'Scrutinizer' })
-module.exports = t
+const t = (module.exports = new ServiceTester({
+  id: 'scrutinizer',
+  title: 'Scrutinizer',
+}))
 
 t.create('code quality')
   .get('/g/filp/whoops.json')
diff --git a/services/shippable/shippable.service.js b/services/shippable/shippable.service.js
index 12fc651c57..3296022f09 100644
--- a/services/shippable/shippable.service.js
+++ b/services/shippable/shippable.service.js
@@ -1,9 +1,8 @@
 'use strict'
 
-const BaseJsonService = require('../base-json')
 const Joi = require('joi')
-const { NotFound } = require('../errors')
 const { renderBuildStatusBadge } = require('../../lib/build-status')
+const { BaseJsonService, NotFound } = require('..')
 
 // source: https://github.com/badges/shields/pull/1362#discussion_r161693830
 const statusCodes = {
diff --git a/services/shippable/shippable.tester.js b/services/shippable/shippable.tester.js
index 6a3355676f..41387ee524 100644
--- a/services/shippable/shippable.tester.js
+++ b/services/shippable/shippable.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isBuildStatus } = require('../../lib/build-status')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('build status (valid, without branch)')
   .get('/5444c5ecb904a4b21567b0ff.json')
diff --git a/services/snap-ci/snap-ci.service.js b/services/snap-ci/snap-ci.service.js
index 2988b3cbca..3c9ffc0d64 100644
--- a/services/snap-ci/snap-ci.service.js
+++ b/services/snap-ci/snap-ci.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const deprecatedService = require('../deprecated-service')
+const { deprecatedService } = require('..')
 
 module.exports = deprecatedService({
   category: 'build',
diff --git a/services/snap-ci/snap-ci.tester.js b/services/snap-ci/snap-ci.tester.js
index 8c32e40758..1661142c47 100644
--- a/services/snap-ci/snap-ci.tester.js
+++ b/services/snap-ci/snap-ci.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = new ServiceTester({ id: 'snap-ci', title: 'Snap CI' })
 module.exports = t
diff --git a/services/snyk/snyk-vulnerability-base.js b/services/snyk/snyk-vulnerability-base.js
index 386c749d12..c46ca9a9e0 100644
--- a/services/snyk/snyk-vulnerability-base.js
+++ b/services/snyk/snyk-vulnerability-base.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseSvgScrapingService = require('../base-svg-scraping')
+const { BaseSvgScrapingService } = require('..')
 
 const schema = Joi.object({
   message: Joi.alternatives()
diff --git a/services/snyk/snyk-vulnerability-github.tester.js b/services/snyk/snyk-vulnerability-github.tester.js
index 90e6e6092a..7de1153274 100644
--- a/services/snyk/snyk-vulnerability-github.tester.js
+++ b/services/snyk/snyk-vulnerability-github.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 const {
   twoVulnerabilitiesSvg,
   zeroVulnerabilitiesSvg,
diff --git a/services/snyk/snyk-vulnerability-npm.service.js b/services/snyk/snyk-vulnerability-npm.service.js
index d3232173dd..d899e3fc3e 100644
--- a/services/snyk/snyk-vulnerability-npm.service.js
+++ b/services/snyk/snyk-vulnerability-npm.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { NotFound } = require('../errors')
+const { NotFound } = require('..')
 const SynkVulnerabilityBase = require('./snyk-vulnerability-base')
 
 module.exports = class SnykVulnerabilityNpm extends SynkVulnerabilityBase {
diff --git a/services/snyk/snyk-vulnerability-npm.tester.js b/services/snyk/snyk-vulnerability-npm.tester.js
index d6aec83ce6..a76386403d 100644
--- a/services/snyk/snyk-vulnerability-npm.tester.js
+++ b/services/snyk/snyk-vulnerability-npm.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 const {
   twoVulnerabilitiesSvg,
   zeroVulnerabilitiesSvg,
diff --git a/services/sonarqube/sonarqube.tester.js b/services/sonarqube/sonarqube.tester.js
index 02f49977b6..cdc5b1d778 100644
--- a/services/sonarqube/sonarqube.tester.js
+++ b/services/sonarqube/sonarqube.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isIntegerPercentage } = require('../test-validators')
 
 const t = new ServiceTester({ id: 'sonar', title: 'SonarQube' })
diff --git a/services/sourceforge/sourceforge.tester.js b/services/sourceforge/sourceforge.tester.js
index b07eced536..aae9ac2313 100644
--- a/services/sourceforge/sourceforge.tester.js
+++ b/services/sourceforge/sourceforge.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isMetric, isMetricOverTimePeriod } = require('../test-validators')
 
 const t = new ServiceTester({ id: 'sourceforge', title: 'SourceForge' })
diff --git a/services/sourcegraph/sourcegraph.service.js b/services/sourcegraph/sourcegraph.service.js
index c17fec2984..fe50b36c2e 100644
--- a/services/sourcegraph/sourcegraph.service.js
+++ b/services/sourcegraph/sourcegraph.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 
 const projectsCountRegex = /^\s[0-9]*(\.[0-9]k)?\sprojects$/
 const schema = Joi.object({
diff --git a/services/sourcegraph/sourcegraph.tester.js b/services/sourcegraph/sourcegraph.tester.js
index 22807b00cd..8bfab1d010 100644
--- a/services/sourcegraph/sourcegraph.tester.js
+++ b/services/sourcegraph/sourcegraph.tester.js
@@ -1,9 +1,10 @@
 'use strict'
 
 const Joi = require('joi')
-const t = (module.exports = require('../create-service-tester')())
 const { withRegex } = require('../test-validators')
 
+const t = (module.exports = require('..').createServiceTester())
+
 // Matches API responses such as "0 projects", "1 projects", "182 projects", "14.0k projects".
 // There may be other cases not covered by this regex, but hopefully the tested projects won't vary much.
 const projectsCount = withRegex(/^[0-9]*(\.[0-9]k)?\sprojects$/)
diff --git a/services/spiget/spiget-base.js b/services/spiget/spiget-base.js
index be2885939a..a5e1adde22 100644
--- a/services/spiget/spiget-base.js
+++ b/services/spiget/spiget-base.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 
 const resourceSchema = Joi.object({
   downloads: Joi.number().required(),
diff --git a/services/spiget/spiget-download-size.tester.js b/services/spiget/spiget-download-size.tester.js
index d40c256f7d..66ff7353c4 100644
--- a/services/spiget/spiget-download-size.tester.js
+++ b/services/spiget/spiget-download-size.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isFileSize } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('EssentialsX (id 9089)')
   .get('/9089.json')
diff --git a/services/spiget/spiget-downloads.service.js b/services/spiget/spiget-downloads.service.js
index 31580e6661..910060139d 100644
--- a/services/spiget/spiget-downloads.service.js
+++ b/services/spiget/spiget-downloads.service.js
@@ -1,8 +1,8 @@
 'use strict'
 
-const { BaseSpigetService, documentation, keywords } = require('./spiget-base')
 const { metric } = require('../../lib/text-formatters')
 const { downloadCount } = require('../../lib/color-formatters')
+const { BaseSpigetService, documentation, keywords } = require('./spiget-base')
 
 module.exports = class SpigetDownloads extends BaseSpigetService {
   static get route() {
diff --git a/services/spiget/spiget-downloads.tester.js b/services/spiget/spiget-downloads.tester.js
index 761da8c7e7..ebe106c8a5 100644
--- a/services/spiget/spiget-downloads.tester.js
+++ b/services/spiget/spiget-downloads.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isMetric } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('EssentialsX (id 9089)')
   .get('/9089.json')
diff --git a/services/spiget/spiget-latest-version.service.js b/services/spiget/spiget-latest-version.service.js
index 79a43b5426..329e382952 100644
--- a/services/spiget/spiget-latest-version.service.js
+++ b/services/spiget/spiget-latest-version.service.js
@@ -1,10 +1,9 @@
 'use strict'
 
-const { BaseSpigetService, documentation, keywords } = require('./spiget-base')
-
+const Joi = require('joi')
 const { renderVersionBadge } = require('../../lib/version')
+const { BaseSpigetService, documentation, keywords } = require('./spiget-base')
 
-const Joi = require('joi')
 const versionSchema = Joi.object({
   downloads: Joi.number().required(),
   name: Joi.string().required(),
diff --git a/services/spiget/spiget-latest-version.tester.js b/services/spiget/spiget-latest-version.tester.js
index f484295632..4ef39c50c2 100644
--- a/services/spiget/spiget-latest-version.tester.js
+++ b/services/spiget/spiget-latest-version.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { withRegex } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 // Note that Spigot versions can be anything (including just a string), so we'll make sure it's not returning 'not found'
 
diff --git a/services/spiget/spiget-rating.service.js b/services/spiget/spiget-rating.service.js
index 625e5d010e..d2d5cde750 100644
--- a/services/spiget/spiget-rating.service.js
+++ b/services/spiget/spiget-rating.service.js
@@ -1,9 +1,8 @@
 'use strict'
 
-const { BaseSpigetService, documentation, keywords } = require('./spiget-base')
-
 const { starRating, metric } = require('../../lib/text-formatters')
 const { floorCount } = require('../../lib/color-formatters')
+const { BaseSpigetService, documentation, keywords } = require('./spiget-base')
 
 module.exports = class SpigetRatings extends BaseSpigetService {
   static get route() {
diff --git a/services/spiget/spiget-rating.tester.js b/services/spiget/spiget-rating.tester.js
index 46263caa58..3fb2a03b02 100644
--- a/services/spiget/spiget-rating.tester.js
+++ b/services/spiget/spiget-rating.tester.js
@@ -1,10 +1,9 @@
 'use strict'
 
 const Joi = require('joi')
-
 const { isStarRating, withRegex } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Stars - EssentialsX (id 9089)')
   .get('/stars/9089.json')
diff --git a/services/spiget/spiget-tested-versions.tester.js b/services/spiget/spiget-tested-versions.tester.js
index 696bc2d53f..75139b7157 100644
--- a/services/spiget/spiget-tested-versions.tester.js
+++ b/services/spiget/spiget-tested-versions.tester.js
@@ -1,13 +1,12 @@
 'use strict'
 
 const Joi = require('joi')
-
-const t = (module.exports = require('../create-service-tester')())
-
 const { withRegex } = require('../test-validators')
 
 const multipleVersions = withRegex(/^([+]?\d*\.\d+)(-)([+]?\d*\.\d+)$/)
 
+const t = (module.exports = require('..').createServiceTester())
+
 t.create('EssentialsX - multiple versions supported - (id 9089)')
   .get('/9089.json')
   .expectJSONTypes(
diff --git a/services/stackexchange/stackexchange-monthlyquestions.service.js b/services/stackexchange/stackexchange-monthlyquestions.service.js
index 84fa932069..2639319a02 100644
--- a/services/stackexchange/stackexchange-monthlyquestions.service.js
+++ b/services/stackexchange/stackexchange-monthlyquestions.service.js
@@ -1,9 +1,9 @@
 'use strict'
 
-const BaseJsonService = require('../base-json')
-const renderQuestionsBadge = require('./stackexchange-helpers')
 const moment = require('moment')
 const Joi = require('joi')
+const { BaseJsonService } = require('..')
+const renderQuestionsBadge = require('./stackexchange-helpers')
 
 const tagSchema = Joi.object({
   total: Joi.number()
diff --git a/services/stackexchange/stackexchange-monthlyquestions.tester.js b/services/stackexchange/stackexchange-monthlyquestions.tester.js
index ce201cbd50..3794545312 100644
--- a/services/stackexchange/stackexchange-monthlyquestions.tester.js
+++ b/services/stackexchange/stackexchange-monthlyquestions.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isMetricOverTimePeriod } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Monthly Questions for StackOverflow Momentjs')
   .get('/stackoverflow/qm/momentjs.json')
diff --git a/services/stackexchange/stackexchange-reputation.service.js b/services/stackexchange/stackexchange-reputation.service.js
index c2584f135a..c71a1efd21 100644
--- a/services/stackexchange/stackexchange-reputation.service.js
+++ b/services/stackexchange/stackexchange-reputation.service.js
@@ -1,9 +1,9 @@
 'use strict'
 
-const BaseJsonService = require('../base-json')
+const Joi = require('joi')
 const { metric } = require('../../lib/text-formatters')
 const { floorCount: floorCountColor } = require('../../lib/color-formatters')
-const Joi = require('joi')
+const { BaseJsonService } = require('..')
 
 const reputationSchema = Joi.object({
   items: Joi.array()
diff --git a/services/stackexchange/stackexchange-reputation.tester.js b/services/stackexchange/stackexchange-reputation.tester.js
index 2983c8510a..07afd7fc5f 100644
--- a/services/stackexchange/stackexchange-reputation.tester.js
+++ b/services/stackexchange/stackexchange-reputation.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isMetric } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Invalid parameters')
   .get('/stackoverflow/r/invalidimage.json')
diff --git a/services/stackexchange/stackexchange-taginfo.service.js b/services/stackexchange/stackexchange-taginfo.service.js
index bab8e45121..6281b77966 100644
--- a/services/stackexchange/stackexchange-taginfo.service.js
+++ b/services/stackexchange/stackexchange-taginfo.service.js
@@ -1,8 +1,8 @@
 'use strict'
 
-const BaseJsonService = require('../base-json')
-const renderQuestionsBadge = require('./stackexchange-helpers')
 const Joi = require('joi')
+const { BaseJsonService } = require('..')
+const renderQuestionsBadge = require('./stackexchange-helpers')
 
 const tagSchema = Joi.object({
   items: Joi.array()
diff --git a/services/stackexchange/stackexchange-taginfo.tester.js b/services/stackexchange/stackexchange-taginfo.tester.js
index def7bc6127..d3dbfc4198 100644
--- a/services/stackexchange/stackexchange-taginfo.tester.js
+++ b/services/stackexchange/stackexchange-taginfo.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isMetric } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('JavaScript Questions')
   .get('/stackoverflow/t/javascript.json')
diff --git a/services/static-badge/static-badge.tester.js b/services/static-badge/static-badge.tester.js
index 0a79d71202..91a87ae801 100644
--- a/services/static-badge/static-badge.tester.js
+++ b/services/static-badge/static-badge.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Shields colorscheme color')
   .get('/badge/label-message-blue.json?style=_shields_test')
diff --git a/services/steam/steam-base.js b/services/steam/steam-base.js
index 15835fb8ae..ae210a16db 100644
--- a/services/steam/steam-base.js
+++ b/services/steam/steam-base.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 
 /**
  * The steam api is based like /{interface}/{method}/v{version}/
diff --git a/services/steam/steam-workshop.service.js b/services/steam/steam-workshop.service.js
index 62adf8fdff..21f94cf2a0 100644
--- a/services/steam/steam-workshop.service.js
+++ b/services/steam/steam-workshop.service.js
@@ -1,11 +1,11 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseSteamAPI = require('./steam-base')
-const { NotFound } = require('../errors')
+const prettyBytes = require('pretty-bytes')
 const { metric, formatDate } = require('../../lib/text-formatters')
 const { age: ageColor, downloadCount } = require('../../lib/color-formatters')
-const prettyBytes = require('pretty-bytes')
+const { NotFound } = require('..')
+const BaseSteamAPI = require('./steam-base')
 
 const documentation = `
 <p>
diff --git a/services/steam/steam-workshop.tester.js b/services/steam/steam-workshop.tester.js
index 8393c27822..081cf0ffc0 100644
--- a/services/steam/steam-workshop.tester.js
+++ b/services/steam/steam-workshop.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isMetric, isFileSize, isFormattedDate } = require('../test-validators')
 
 const t = new ServiceTester({ id: 'steam', title: 'Steam Workshop Tests' })
diff --git a/services/suggest/suggest.tester.js b/services/suggest/suggest.tester.js
index bece51b962..2a4036b5c4 100644
--- a/services/suggest/suggest.tester.js
+++ b/services/suggest/suggest.tester.js
@@ -3,15 +3,14 @@
 // These tests are for the badge-suggestion endpoint in lib/suggest.js. This
 // endpoint is called from frontend/components/suggestion-and-search.js.
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { invalidJSON } = require('../response-fixtures')
 
-const t = new ServiceTester({
+const t = (module.exports = new ServiceTester({
   id: 'suggest',
   title: 'suggest',
   pathPrefix: '/$suggest',
-})
-module.exports = t
+}))
 
 t.create('issues, forks, stars and twitter')
   .get(`/v1?url=${encodeURIComponent('https://github.com/atom/atom')}`)
diff --git a/services/swagger/swagger.service.js b/services/swagger/swagger.service.js
index 0889023a98..904ad537f4 100644
--- a/services/swagger/swagger.service.js
+++ b/services/swagger/swagger.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 
 const validatorSchema = Joi.object()
   .keys({
diff --git a/services/swagger/swagger.tester.js b/services/swagger/swagger.tester.js
index e2c500d273..108ac6796c 100644
--- a/services/swagger/swagger.tester.js
+++ b/services/swagger/swagger.tester.js
@@ -5,7 +5,7 @@ const apiURL = 'http://online.swagger.io'
 const apiGetURL = '/validator/debug'
 const apiGetQueryParams = { url: 'https://example.com/example.json' }
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Valid (mocked)')
   .get(getURL)
diff --git a/services/symfony/symfony-insight.service.js b/services/symfony/symfony-insight.service.js
index 15037c08b2..0ff0eb4aa0 100644
--- a/services/symfony/symfony-insight.service.js
+++ b/services/symfony/symfony-insight.service.js
@@ -1,9 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseXmlService = require('../base-xml')
 const serverSecrets = require('../../lib/server-secrets')
-const { Inaccessible } = require('../errors')
+const { BaseXmlService, Inaccessible } = require('..')
 
 const violationSchema = Joi.object({
   severity: Joi.equal('info', 'minor', 'major', 'critical').required(),
diff --git a/services/symfony/symfony-insight.tester.js b/services/symfony/symfony-insight.tester.js
index 0e1473ba46..f37249d826 100644
--- a/services/symfony/symfony-insight.tester.js
+++ b/services/symfony/symfony-insight.tester.js
@@ -1,9 +1,10 @@
 'use strict'
 
 const Joi = require('joi')
-const t = (module.exports = require('../create-service-tester')())
 const { withRegex } = require('../test-validators')
 
+const t = (module.exports = require('..').createServiceTester())
+
 const {
   runningMockResponse,
   platinumMockResponse,
diff --git a/services/teamcity/teamcity-base.js b/services/teamcity/teamcity-base.js
index be77e1823b..9e3d5d8423 100644
--- a/services/teamcity/teamcity-base.js
+++ b/services/teamcity/teamcity-base.js
@@ -1,7 +1,7 @@
 'use strict'
 
-const BaseJsonService = require('../base-json')
 const serverSecrets = require('../../lib/server-secrets')
+const { BaseJsonService } = require('..')
 
 module.exports = class TeamCityBase extends BaseJsonService {
   async fetch({
diff --git a/services/teamcity/teamcity-build.tester.js b/services/teamcity/teamcity-build.tester.js
index 29736e6a64..e118faba40 100644
--- a/services/teamcity/teamcity-build.tester.js
+++ b/services/teamcity/teamcity-build.tester.js
@@ -12,7 +12,7 @@ const {
 const buildStatusValues = Joi.equal('passing', 'failure', 'error').required()
 const buildStatusTextRegex = /^success|failure|error|tests( failed: \d+( \(\d+ new\))?)?(,)?( passed: \d+)?(,)?( ignored: \d+)?(,)?( muted: \d+)?$/
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('live: codebetter unknown build')
   .get('/codebetter/btabc.json')
diff --git a/services/teamcity/teamcity-coverage.service.js b/services/teamcity/teamcity-coverage.service.js
index 10caba2bf1..d8d34c707f 100644
--- a/services/teamcity/teamcity-coverage.service.js
+++ b/services/teamcity/teamcity-coverage.service.js
@@ -1,9 +1,9 @@
 'use strict'
 
 const Joi = require('joi')
-const { InvalidResponse } = require('../errors')
-const TeamCityBase = require('./teamcity-base')
 const { coveragePercentage } = require('../../lib/color-formatters')
+const { InvalidResponse } = require('..')
+const TeamCityBase = require('./teamcity-base')
 
 const buildStatisticsSchema = Joi.object({
   property: Joi.array()
diff --git a/services/teamcity/teamcity-coverage.tester.js b/services/teamcity/teamcity-coverage.tester.js
index 18354e83a3..d100f87aef 100644
--- a/services/teamcity/teamcity-coverage.tester.js
+++ b/services/teamcity/teamcity-coverage.tester.js
@@ -9,7 +9,7 @@ const {
   restore,
 } = require('./teamcity-test-helpers')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('live: valid buildId')
   .get('/bt428.json')
diff --git a/services/travis/travis-build.service.js b/services/travis/travis-build.service.js
index 9e640ab952..943c6f5c12 100644
--- a/services/travis/travis-build.service.js
+++ b/services/travis/travis-build.service.js
@@ -1,12 +1,11 @@
 'use strict'
 
 const Joi = require('joi')
-
-const BaseSvgScrapingService = require('../base-svg-scraping')
 const {
   isBuildStatus,
   renderBuildStatusBadge,
 } = require('../../lib/build-status')
+const { BaseSvgScrapingService } = require('..')
 
 const schema = Joi.object({
   message: Joi.alternatives()
diff --git a/services/travis/travis-build.tester.js b/services/travis/travis-build.tester.js
index 85dd49fbaf..8641d3fd79 100644
--- a/services/travis/travis-build.tester.js
+++ b/services/travis/travis-build.tester.js
@@ -1,8 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
 const { isBuildStatus } = require('../../lib/build-status')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'travis-build',
diff --git a/services/travis/travis-php-version.tester.js b/services/travis/travis-php-version.tester.js
index b6e52becfe..8344765469 100644
--- a/services/travis/travis-php-version.tester.js
+++ b/services/travis/travis-php-version.tester.js
@@ -1,8 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
 const { isPhpVersionReduction } = require('../test-validators')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'travis-php-version',
diff --git a/services/twitter/twitter.tester.js b/services/twitter/twitter.tester.js
index 9625aa9b6f..d77933c1e3 100644
--- a/services/twitter/twitter.tester.js
+++ b/services/twitter/twitter.tester.js
@@ -1,12 +1,13 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
-
 const { isMetric } = require('../test-validators')
+const { ServiceTester } = require('..')
 
-const t = new ServiceTester({ id: 'twitter', title: 'Twitter' })
-module.exports = t
+const t = (module.exports = new ServiceTester({
+  id: 'twitter',
+  title: 'Twitter',
+}))
 
 t.create('Followers')
   .get('/follow/shields_io.json')
diff --git a/services/uptimerobot/uptimerobot-base.js b/services/uptimerobot/uptimerobot-base.js
index 40dbd3e5ec..7920f9e22c 100644
--- a/services/uptimerobot/uptimerobot-base.js
+++ b/services/uptimerobot/uptimerobot-base.js
@@ -1,8 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
-const { InvalidParameter, InvalidResponse } = require('../errors')
+const { BaseJsonService, InvalidParameter, InvalidResponse } = require('..')
 
 // https://uptimerobot.com/api
 // POST getMonitors
diff --git a/services/uptimerobot/uptimerobot-ratio.tester.js b/services/uptimerobot/uptimerobot-ratio.tester.js
index 0c2e68d739..c0bf29c7c3 100644
--- a/services/uptimerobot/uptimerobot-ratio.tester.js
+++ b/services/uptimerobot/uptimerobot-ratio.tester.js
@@ -4,7 +4,7 @@ const Joi = require('joi')
 const { isPercentage } = require('../test-validators')
 const { invalidJSON } = require('../response-fixtures')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Uptime Robot: Percentage (valid)')
   .get('/m778918918-3e92c097147760ee39d02d36.json')
diff --git a/services/uptimerobot/uptimerobot-status.tester.js b/services/uptimerobot/uptimerobot-status.tester.js
index 8b39c755e6..0dc042c014 100644
--- a/services/uptimerobot/uptimerobot-status.tester.js
+++ b/services/uptimerobot/uptimerobot-status.tester.js
@@ -11,7 +11,7 @@ const isUptimeStatus = Joi.string().valid(
   'down'
 )
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Uptime Robot: Status (valid)')
   .get('/m778918918-3e92c097147760ee39d02d36.json')
diff --git a/services/vaadin-directory/vaadin-directory.tester.js b/services/vaadin-directory/vaadin-directory.tester.js
index 8603cf31b2..1761e923b7 100644
--- a/services/vaadin-directory/vaadin-directory.tester.js
+++ b/services/vaadin-directory/vaadin-directory.tester.js
@@ -1,20 +1,17 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
-
-// Get validate function from validator.js lib
 const {
   isSemver,
   isStarRating,
   isFormattedDate,
 } = require('../test-validators')
+const { ServiceTester } = require('..')
 
-const t = new ServiceTester({
+const t = (module.exports = new ServiceTester({
   id: 'vaadin-directory',
   title: 'vaadin directory',
-})
-module.exports = t
+}))
 
 t.create('stars of component displayed in star icons')
   .get('/star/vaadinvaadin-grid.json')
diff --git a/services/versioneye/versioneye.service.js b/services/versioneye/versioneye.service.js
index cc8656970d..7059ebeba0 100644
--- a/services/versioneye/versioneye.service.js
+++ b/services/versioneye/versioneye.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const deprecatedService = require('../deprecated-service')
+const { deprecatedService } = require('..')
 
 // VersionEye integration - deprecated as of August 2018.
 module.exports = deprecatedService({
diff --git a/services/versioneye/versioneye.tester.js b/services/versioneye/versioneye.tester.js
index b7a3f2d42c..cf23e8e66d 100644
--- a/services/versioneye/versioneye.tester.js
+++ b/services/versioneye/versioneye.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = new ServiceTester({ id: 'versioneye', title: 'VersionEye' })
 module.exports = t
diff --git a/services/visual-studio-marketplace/visual-studio-marketplace-base.js b/services/visual-studio-marketplace/visual-studio-marketplace-base.js
index 327af7f5bf..24b9c61f0f 100644
--- a/services/visual-studio-marketplace/visual-studio-marketplace-base.js
+++ b/services/visual-studio-marketplace/visual-studio-marketplace-base.js
@@ -1,8 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
-const { NotFound } = require('../errors')
+const { BaseJsonService, NotFound } = require('..')
 
 const extensionQuerySchema = Joi.object({
   results: Joi.array()
diff --git a/services/visual-studio-marketplace/visual-studio-marketplace-downloads.tester.js b/services/visual-studio-marketplace/visual-studio-marketplace-downloads.tester.js
index b2f5590a47..f35f1c4b41 100644
--- a/services/visual-studio-marketplace/visual-studio-marketplace-downloads.tester.js
+++ b/services/visual-studio-marketplace/visual-studio-marketplace-downloads.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 const { isMetric } = require('../test-validators')
 
 const mockResponse = {
diff --git a/services/visual-studio-marketplace/visual-studio-marketplace-rating.tester.js b/services/visual-studio-marketplace/visual-studio-marketplace-rating.tester.js
index 4e7f87d8fe..b33639c44b 100644
--- a/services/visual-studio-marketplace/visual-studio-marketplace-rating.tester.js
+++ b/services/visual-studio-marketplace/visual-studio-marketplace-rating.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 const { withRegex, isStarRating } = require('../test-validators')
 
 const isVscodeRating = withRegex(/[0-5].[0-9]{2}\/5?\s*\([0-9]*\)$/)
diff --git a/services/visual-studio-marketplace/visual-studio-marketplace-version.tester.js b/services/visual-studio-marketplace/visual-studio-marketplace-version.tester.js
index 698bab5957..3fa8f3f37c 100644
--- a/services/visual-studio-marketplace/visual-studio-marketplace-version.tester.js
+++ b/services/visual-studio-marketplace/visual-studio-marketplace-version.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 const { withRegex } = require('../test-validators')
 
 const isMarketplaceVersion = withRegex(/^v(\d+\.\d+\.\d+)(\.\d+)?$/)
diff --git a/services/waffle/waffle.tester.js b/services/waffle/waffle.tester.js
index a5e1a21b69..eb2c5f0d88 100644
--- a/services/waffle/waffle.tester.js
+++ b/services/waffle/waffle.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { invalidJSON } = require('../response-fixtures')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 const fakeData = [
   {
diff --git a/services/website/website.tester.js b/services/website/website.tester.js
index a2e4b80448..dd88a2a66a 100644
--- a/services/website/website.tester.js
+++ b/services/website/website.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('status of http://shields.io')
   .get('/website/http/shields.io.json?style=_shields_test')
diff --git a/services/wercker/wercker.service.js b/services/wercker/wercker.service.js
index 8d8e89d59e..a1c733cc1e 100644
--- a/services/wercker/wercker.service.js
+++ b/services/wercker/wercker.service.js
@@ -1,11 +1,11 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
 const {
   isBuildStatus,
   renderBuildStatusBadge,
 } = require('../../lib/build-status')
+const { BaseJsonService } = require('..')
 
 const werckerSchema = Joi.array()
   .items(
diff --git a/services/wercker/wercker.tester.js b/services/wercker/wercker.tester.js
index fe2bea075c..d0c78bd01e 100644
--- a/services/wercker/wercker.tester.js
+++ b/services/wercker/wercker.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isBuildStatus } = require('../../lib/build-status')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Build status')
   .get('/build/wercker/go-wercker-api.json')
diff --git a/services/wheelmap/wheelmap.service.js b/services/wheelmap/wheelmap.service.js
index 095c9386ec..f463c89355 100644
--- a/services/wheelmap/wheelmap.service.js
+++ b/services/wheelmap/wheelmap.service.js
@@ -1,9 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
-
 const serverSecrets = require('../../lib/server-secrets')
+const { BaseJsonService } = require('..')
 
 const wheelmapSchema = Joi.object({
   node: Joi.object({
diff --git a/services/wheelmap/wheelmap.tester.js b/services/wheelmap/wheelmap.tester.js
index dac3ee0f83..3311389460 100644
--- a/services/wheelmap/wheelmap.tester.js
+++ b/services/wheelmap/wheelmap.tester.js
@@ -2,7 +2,7 @@
 
 const serverSecrets = require('../../lib/server-secrets')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 const noToken = !serverSecrets.wheelmap_token
 function logTokenWarning() {
diff --git a/services/wordpress/wordpress-base.js b/services/wordpress/wordpress-base.js
index b3c96b3cb9..7980c47176 100644
--- a/services/wordpress/wordpress-base.js
+++ b/services/wordpress/wordpress-base.js
@@ -1,9 +1,7 @@
 'use strict'
 
-const BaseJsonService = require('../base-json')
 const Joi = require('joi')
-
-const { NotFound } = require('../errors')
+const { BaseJsonService, NotFound } = require('..')
 const { nonNegativeInteger } = require('../validators')
 
 const foundSchema = Joi.object()
diff --git a/services/wordpress/wordpress-downloads.service.js b/services/wordpress/wordpress-downloads.service.js
index 89bbc7db93..2cfb340635 100644
--- a/services/wordpress/wordpress-downloads.service.js
+++ b/services/wordpress/wordpress-downloads.service.js
@@ -1,11 +1,10 @@
 'use strict'
 
-const BaseJsonService = require('../base-json')
-const BaseWordpress = require('./wordpress-base')
+const Joi = require('joi')
 const { metric } = require('../../lib/text-formatters')
 const { downloadCount } = require('../../lib/color-formatters')
-const { NotFound } = require('../errors')
-const Joi = require('joi')
+const { BaseJsonService, NotFound } = require('..')
+const BaseWordpress = require('./wordpress-base')
 
 const dateSchema = Joi.object()
   .pattern(Joi.date().iso(), Joi.number().integer())
diff --git a/services/wordpress/wordpress-downloads.tester.js b/services/wordpress/wordpress-downloads.tester.js
index cd2faf1cc9..cc9c8925e0 100644
--- a/services/wordpress/wordpress-downloads.tester.js
+++ b/services/wordpress/wordpress-downloads.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const { isMetric, isMetricOverTimePeriod } = require('../test-validators')
 
diff --git a/services/wordpress/wordpress-platform.service.js b/services/wordpress/wordpress-platform.service.js
index b84ab1b4ec..4eb073edbd 100644
--- a/services/wordpress/wordpress-platform.service.js
+++ b/services/wordpress/wordpress-platform.service.js
@@ -1,11 +1,11 @@
 'use strict'
 
-const BaseWordpress = require('./wordpress-base')
 const semver = require('semver')
 const Joi = require('joi')
 const { addv } = require('../../lib/text-formatters')
 const { version: versionColor } = require('../../lib/color-formatters')
-const { NotFound } = require('../errors')
+const { NotFound } = require('..')
+const BaseWordpress = require('./wordpress-base')
 
 const coreSchema = Joi.object()
   .keys({
diff --git a/services/wordpress/wordpress-platform.tester.js b/services/wordpress/wordpress-platform.tester.js
index 904f61dd61..2b329c5afb 100644
--- a/services/wordpress/wordpress-platform.tester.js
+++ b/services/wordpress/wordpress-platform.tester.js
@@ -1,15 +1,13 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
-
+const { ServiceTester } = require('..')
 const { isVPlusDottedVersionAtLeastOne } = require('../test-validators')
 
-const t = new ServiceTester({
+const t = (module.exports = new ServiceTester({
   id: 'wordpress',
   title: 'Wordpress Platform Tests',
-})
-module.exports = t
+}))
 
 t.create('Plugin Required WP Version')
   .get('/plugin/wp-version/akismet.json')
diff --git a/services/wordpress/wordpress-rating.tester.js b/services/wordpress/wordpress-rating.tester.js
index b3a19e9013..91108521d8 100644
--- a/services/wordpress/wordpress-rating.tester.js
+++ b/services/wordpress/wordpress-rating.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const { isStarRating } = require('../test-validators')
 
diff --git a/services/wordpress/wordpress-version.tester.js b/services/wordpress/wordpress-version.tester.js
index 6ab535be98..3a06609d7e 100644
--- a/services/wordpress/wordpress-version.tester.js
+++ b/services/wordpress/wordpress-version.tester.js
@@ -1,15 +1,13 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
-
+const { ServiceTester } = require('..')
 const { isVPlusDottedVersionAtLeastOne } = require('../test-validators')
 
-const t = new ServiceTester({
+const t = (module.exports = new ServiceTester({
   id: 'wordpress',
   title: 'Wordpress Version Tests',
-})
-module.exports = t
+}))
 
 t.create('Plugin Version')
   .get('/plugin/v/akismet.json')
-- 
GitLab