From d97737914ee5c05c533f7f40619e2346d7d08c3d Mon Sep 17 00:00:00 2001
From: Michael Kriese <michael.kriese@visualon.de>
Date: Wed, 17 Jul 2019 10:14:56 +0200
Subject: [PATCH] refactor: add js type check (#4098)

---
 .circleci/config.yml                          |  1 +
 .eslintrc.js                                  | 23 +++---
 lib/config/decrypt.js                         |  7 +-
 lib/config/massage.js                         |  7 +-
 lib/config/migrate-validate.js                |  7 +-
 lib/config/migration.js                       | 11 +--
 lib/config/presets.js                         | 10 +--
 lib/config/validation-helpers/managers.js     |  6 +-
 lib/config/validation.js                      |  9 +--
 lib/datasource/dart/index.js                  |  1 +
 lib/datasource/docker/index.js                | 24 ++++---
 lib/datasource/github/index.js                | 10 ++-
 lib/datasource/gitlab/index.js                | 12 ++--
 lib/datasource/go/index.js                    |  1 +
 lib/datasource/hex/index.js                   |  2 +-
 lib/datasource/maven/index.js                 | 11 +--
 lib/datasource/metadata.js                    |  7 +-
 lib/datasource/npm/npmrc.js                   |  8 +--
 lib/datasource/npm/presets.js                 |  4 +-
 lib/datasource/npm/releases.js                |  6 +-
 lib/datasource/packagist/index.js             |  7 +-
 lib/datasource/pypi/index.js                  | 12 ++--
 lib/datasource/ruby-version/index.js          |  1 +
 lib/datasource/rubygems/get-rubygems-org.js   |  1 +
 lib/datasource/rubygems/get.js                |  2 +-
 lib/datasource/rubygems/releases.js           | 10 +--
 lib/datasource/rubygems/retriable.js          |  2 +-
 lib/datasource/terraform/index.js             |  7 +-
 lib/logger/config-serializer.js               | 39 +++++-----
 lib/logger/err-serializer.js                  |  6 +-
 lib/manager/composer/artifacts.js             |  7 +-
 lib/manager/composer/extract.js               |  7 +-
 lib/manager/dockerfile/extract.js             |  1 +
 lib/manager/github-actions/extract.js         |  1 +
 lib/manager/gitlabci-include/extract.js       |  7 +-
 lib/manager/gitlabci/extract.js               |  3 +
 lib/manager/kubernetes/extract.js             |  1 +
 lib/manager/maven/extract.js                  |  1 +
 lib/manager/npm/extract/monorepo.js           |  7 +-
 lib/manager/npm/post-update/index.js          |  7 +-
 lib/manager/pip_setup/extract.js              |  4 +-
 lib/manager/pipenv/extract.js                 |  7 +-
 lib/manager/pub/extract.js                    |  1 +
 lib/manager/travis/extract.js                 |  7 +-
 lib/manager/travis/package.js                 |  7 +-
 lib/manager/travis/update.js                  |  7 +-
 lib/platform/github/index.ts                  | 16 +++--
 lib/types.d.ts                                | 37 +++++++++-
 lib/util/got/auth.js                          |  1 +
 lib/util/got/cache-get.js                     |  1 +
 lib/util/got/host-rules.js                    |  1 +
 lib/util/got/index.js                         |  1 +
 lib/util/got/stats.js                         |  2 +
 lib/util/host-rules.ts                        |  5 +-
 lib/workers/branch/commit.js                  | 13 ++--
 lib/workers/branch/get-updated.js             |  9 +--
 lib/workers/branch/schedule.js                | 13 ++--
 lib/workers/global/autodiscover.js            |  7 +-
 lib/workers/global/index.js                   |  9 ++-
 lib/workers/pr/changelog/release-notes.js     |  6 +-
 lib/workers/pr/changelog/source-github.js     |  9 +--
 lib/workers/pr/pr-body.js                     |  7 +-
 lib/workers/repository/finalise/validate.js   |  5 +-
 lib/workers/repository/index.js               |  5 +-
 lib/workers/repository/init/config.js         | 10 ++-
 lib/workers/repository/init/index.js          |  1 +
 .../repository/onboarding/branch/check.js     |  7 +-
 .../repository/onboarding/branch/config.js    | 13 ++--
 .../repository/onboarding/branch/index.js     |  2 +-
 lib/workers/repository/onboarding/pr/index.js |  7 +-
 lib/workers/repository/process/fetch.js       |  7 +-
 .../repository/process/lookup/filter.js       |  6 +-
 .../repository/process/lookup/index.js        |  1 +
 lib/workers/repository/process/write.js       |  1 +
 lib/workers/repository/updates/branchify.js   |  7 +-
 lib/workers/repository/updates/flatten.js     |  7 +-
 lib/workers/repository/updates/generate.js    |  1 +
 package.json                                  | 10 +--
 .../__snapshots__/validation.spec.js.snap     |  2 +-
 test/config/cli.spec.js                       |  1 +
 test/config/index.spec.js                     |  5 +-
 test/config/presets.spec.js                   | 10 +--
 test/datasource/docker.spec.js                |  1 +
 test/datasource/git-tags.spec.js              |  1 +
 test/datasource/github.spec.js                | 41 ++++-------
 test/datasource/gitlab.spec.js                |  1 +
 test/datasource/go.spec.js                    |  1 +
 test/datasource/gradle-version.spec.js        |  1 +
 test/datasource/hex.spec.js                   |  3 +-
 test/datasource/index.spec.js                 |  1 +
 test/datasource/packagist.spec.js             |  3 +
 test/datasource/pypi.spec.js                  |  1 +
 test/datasource/rubygems/index.spec.js        |  2 +-
 test/datasource/rubygems/retriable.spec.js    |  2 +-
 test/datasource/terraform.spec.js             |  2 +-
 test/logger/err-serializer.spec.js            |  2 +-
 test/manager/ansible/extract.spec.js          | 10 +--
 test/manager/bazel/extract.spec.js            | 27 +++----
 test/manager/bazel/update.spec.js             |  1 +
 test/manager/buildkite/extract.spec.js        | 14 ++--
 test/manager/bundler/extract.spec.js          |  3 +
 test/manager/bundler/range.spec.js            |  6 +-
 test/manager/cargo/artifacts.spec.js          |  4 ++
 test/manager/circleci/extract.spec.js         | 10 +--
 test/manager/composer/artifacts.spec.js       |  5 ++
 test/manager/composer/extract.spec.js         |  3 +
 test/manager/deps-edn/extract.spec.js         |  2 +-
 test/manager/deps-edn/update.spec.js          |  2 +-
 test/manager/docker-compose/extract.spec.js   |  8 +--
 test/manager/dockerfile/extract.spec.js       | 71 +++++++------------
 test/manager/github-actions/extract.spec.js   |  8 +--
 test/manager/gitlabci/extract.spec.js         |  8 +--
 test/manager/gomod/artifacts.spec.js          |  5 ++
 test/manager/gomod/extract.spec.js            | 10 +--
 test/manager/gradle-wrapper/extract.spec.js   | 12 +---
 test/manager/gradle/index.spec.js             |  4 ++
 test/manager/kubernetes/extract.spec.js       | 14 ++--
 test/manager/leiningen/extract.spec.js        |  2 +-
 test/manager/leiningen/update.spec.js         |  2 +-
 test/manager/maven/index.spec.js              |  3 +
 .../meteor/__snapshots__/update.spec.js.snap  |  6 +-
 test/manager/meteor/_fixtures/package-1.js    |  1 +
 test/manager/meteor/_fixtures/package-2.js    |  1 +
 test/manager/meteor/extract.spec.js           |  8 +--
 test/manager/npm/extract/index.spec.js        |  3 +
 .../npm/extract/locked-versions.spec.js       |  2 +
 test/manager/npm/extract/npm.spec.js          |  3 +
 test/manager/npm/extract/yarn.spec.js         |  3 +
 test/manager/pipenv/artifacts.spec.js         |  4 ++
 test/manager/pipenv/extract.spec.js           | 33 ++++-----
 test/manager/poetry/artifacts.spec.js         |  4 ++
 test/manager/terraform/extract.spec.js        |  8 +--
 test/manager/travis/extract.spec.js           |  8 +--
 test/manager/travis/package.spec.js           |  1 +
 test/util/env.spec.js                         | 21 +++++-
 test/util/host-rules.spec.js                  |  1 +
 test/versioning/docker.spec.js                |  2 +
 test/website-docs.spec.js                     |  1 +
 test/workers/branch/automerge.spec.js         |  3 +
 test/workers/branch/check-existing.spec.js    |  3 +
 test/workers/branch/commit.spec.js            |  3 +
 test/workers/branch/get-updated.spec.js       |  5 ++
 test/workers/branch/index.spec.js             | 11 +++
 test/workers/branch/lock-files/index.spec.js  |  7 ++
 test/workers/branch/lock-files/lerna.spec.js  |  3 +
 test/workers/branch/lock-files/npm.spec.js    |  1 +
 test/workers/branch/lock-files/pnpm.spec.js   |  1 +
 test/workers/branch/lock-files/yarn.spec.js   |  1 +
 test/workers/branch/parent.spec.js            |  3 +
 test/workers/branch/schedule.spec.js          |  1 +
 test/workers/branch/status-checks.spec.js     |  3 +
 test/workers/global/autodiscover.spec.js      | 15 ++--
 test/workers/global/index.spec.js             |  2 +
 test/workers/pr/changelog/index.spec.js       |  5 +-
 test/workers/pr/index.spec.js                 |  6 ++
 test/workers/repository/error-config.spec.js  |  3 +
 test/workers/repository/extract/index.spec.js |  1 +
 .../repository/extract/manager-files.spec.js  |  5 ++
 .../workers/repository/finalise/prune.spec.js |  4 ++
 .../repository/finalise/validate.spec.js      |  3 +
 test/workers/repository/index.spec.js         |  1 +
 test/workers/repository/init/apis.spec.js     |  1 +
 test/workers/repository/init/base.spec.js     |  4 ++
 test/workers/repository/init/config.spec.js   |  5 ++
 test/workers/repository/init/index.spec.js    |  4 +-
 test/workers/repository/init/semantic.spec.js |  4 ++
 .../repository/init/vulnerability.spec.js     |  3 +
 test/workers/repository/master-issue.spec.js  |  5 ++
 .../onboarding/branch/index.spec.js           |  3 +
 .../onboarding/branch/rebase.spec.js          |  3 +
 .../repository/onboarding/pr/index.spec.js    |  3 +
 .../repository/process/deprecated.spec.js     |  3 +
 .../repository/process/extract-update.spec.js |  1 +
 test/workers/repository/process/fetch.spec.js |  1 +
 test/workers/repository/process/index.spec.js |  1 +
 .../workers/repository/process/limits.spec.js |  4 ++
 .../repository/process/lookup/index.spec.js   |  2 +
 test/workers/repository/process/write.spec.js |  2 +
 .../repository/updates/branchify.spec.js      |  3 +
 .../repository/updates/flatten.spec.js        |  1 +
 tsconfig.app.json                             |  2 +-
 tsconfig.json                                 |  6 +-
 182 files changed, 656 insertions(+), 475 deletions(-)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index de9af6148c..57429a084e 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -32,6 +32,7 @@ commands:
           command: |
             yarn lint
             yarn test-schema
+            yarn type-check
 
       - run:
           name: Build
diff --git a/.eslintrc.js b/.eslintrc.js
index 104c5bed6e..b45ff30f17 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -15,7 +15,7 @@ module.exports = {
     project: './tsconfig.json',
   },
   rules: {
-    'import/no-unresolved': 0, // only required for js, see overrides
+    'import/no-unresolved': 0, // done by typescript
     'require-await': 'error',
     'no-use-before-define': 0,
     'no-restricted-syntax': 0,
@@ -25,6 +25,7 @@ module.exports = {
     'no-underscore-dangle': 0,
 
     // TODO: fix lint
+    'import/prefer-default-export': 1,
     '@typescript-eslint/camelcase': 'off', // disabled until ??
     '@typescript-eslint/no-var-requires': 'off', // disable until all files converted to typescript
     '@typescript-eslint/no-use-before-define': 'off', // disable until all files converted to typescript
@@ -32,17 +33,13 @@ module.exports = {
     '@typescript-eslint/explicit-function-return-type': 0,
     '@typescript-eslint/no-explicit-any': 0,
     '@typescript-eslint/no-non-null-assertion': 0,
-  },
-  overrides: [
-    {
-      // TODO: should be removed in near future, uses around ~50% lint time
-      files: ['*.js'],
-      rules: {
-        'import/no-unresolved': [
-          'error',
-          { commonjs: true, caseSensitive: true },
-        ],
+    '@typescript-eslint/no-unused-vars': [
+      'error',
+      {
+        vars: 'all',
+        args: 'none',
+        ignoreRestSiblings: false,
       },
-    },
-  ],
+    ], // disable until proper interfaced api
+  },
 };
diff --git a/lib/config/decrypt.js b/lib/config/decrypt.js
index 8003289316..c5b353a02c 100644
--- a/lib/config/decrypt.js
+++ b/lib/config/decrypt.js
@@ -1,11 +1,10 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const crypto = require('crypto');
 const { logger } = require('../logger');
 const { maskToken } = require('../util/mask');
 
-module.exports = {
-  decryptConfig,
-};
+export { decryptConfig };
 
 function decryptConfig(config, privateKey) {
   logger.trace({ config }, 'decryptConfig()');
diff --git a/lib/config/massage.js b/lib/config/massage.js
index 6ff9aca252..72b43f3277 100644
--- a/lib/config/massage.js
+++ b/lib/config/massage.js
@@ -1,13 +1,12 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const options = require('./definitions').getOptions();
 
 const clone = input => JSON.parse(JSON.stringify(input));
 
 let allowedStrings;
 
-module.exports = {
-  massageConfig,
-};
+export { massageConfig };
 
 // Returns a massaged config
 function massageConfig(config) {
diff --git a/lib/config/migrate-validate.js b/lib/config/migrate-validate.js
index 772d02841c..72a29c18d4 100644
--- a/lib/config/migrate-validate.js
+++ b/lib/config/migrate-validate.js
@@ -1,12 +1,11 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const { logger } = require('../logger');
 const configMigration = require('./migration');
 const configMassage = require('./massage');
 const configValidation = require('./validation');
 
-module.exports = {
-  migrateAndValidate,
-};
+export { migrateAndValidate };
 
 async function migrateAndValidate(config, input) {
   logger.debug('migrateAndValidate()');
diff --git a/lib/config/migration.js b/lib/config/migration.js
index bc4d7175b6..d9724eb0d7 100644
--- a/lib/config/migration.js
+++ b/lib/config/migration.js
@@ -1,4 +1,5 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const later = require('later');
 const { logger } = require('../logger');
 const options = require('./definitions').getOptions();
@@ -7,9 +8,7 @@ const clone = input => JSON.parse(JSON.stringify(input));
 
 let optionTypes;
 
-module.exports = {
-  migrateConfig,
-};
+export { migrateConfig };
 
 const removedOptions = [
   'maintainYarnLock',
@@ -83,11 +82,13 @@ function migrateConfig(config, parentKey) {
         const fileList = [];
         for (const packageFile of val) {
           if (is.object(packageFile) && !is.array(packageFile)) {
+            // @ts-ignore
             fileList.push(packageFile.packageFile);
             if (Object.keys(packageFile).length > 1) {
               migratedConfig.packageRules = migratedConfig.packageRules || [];
               const payload = migrateConfig(packageFile, key).migratedConfig;
               for (const subrule of payload.packageRules || []) {
+                // @ts-ignore
                 subrule.paths = [packageFile.packageFile];
                 migratedConfig.packageRules.push(subrule);
               }
@@ -96,6 +97,7 @@ function migrateConfig(config, parentKey) {
               if (Object.keys(payload).length) {
                 migratedConfig.packageRules.push({
                   ...payload,
+                  // @ts-ignore
                   paths: [packageFile.packageFile],
                 });
               }
@@ -344,6 +346,7 @@ function migrateConfig(config, parentKey) {
       } else if (key === 'depTypes' && is.array(val)) {
         val.forEach(depType => {
           if (is.object(depType) && !is.array(depType)) {
+            // @ts-ignore
             const depTypeName = depType.depType;
             if (depTypeName) {
               migratedConfig.packageRules = migratedConfig.packageRules || [];
diff --git a/lib/config/presets.js b/lib/config/presets.js
index f8df3b6487..9e7ad8bf80 100644
--- a/lib/config/presets.js
+++ b/lib/config/presets.js
@@ -1,4 +1,5 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const { logger } = require('../logger');
 const configParser = require('./index');
 const massage = require('./massage');
@@ -13,12 +14,7 @@ const datasources = {
   gitlab,
 };
 
-module.exports = {
-  resolveConfigPresets,
-  replaceArgs,
-  parsePreset,
-  getPreset,
-};
+export { resolveConfigPresets, replaceArgs, parsePreset, getPreset };
 
 async function resolveConfigPresets(
   inputConfig,
diff --git a/lib/config/validation-helpers/managers.js b/lib/config/validation-helpers/managers.js
index d6601ba2e2..500dec3ca2 100644
--- a/lib/config/validation-helpers/managers.js
+++ b/lib/config/validation-helpers/managers.js
@@ -1,9 +1,7 @@
 const { getManagerList } = require('../../manager');
 /**
  * Only if type condition or context condition violated then errors array will be mutated to store metadata
- * @param {Obgect} param
- * * {Obgect} param.resolvedRule
- * * {string} param.currentPath
+ * @param {{resolvedRule:any, currentPath: string}} param
  * @returns {Array} with finded error or empty array
  */
 const check = ({ resolvedRule, currentPath }) => {
@@ -17,7 +15,7 @@ const check = ({ resolvedRule, currentPath }) => {
       managersErrMessage = `${currentPath}:
         You have included an unsupported manager in a package rule. Your list: ${
           resolvedRule.managers
-        }. 
+        }.
         Supported managers are: (${getManagerList().join(', ')}).`;
     }
   } else if (typeof resolvedRule.managers !== 'undefined')
diff --git a/lib/config/validation.js b/lib/config/validation.js
index 186b919ebe..88d88ed096 100644
--- a/lib/config/validation.js
+++ b/lib/config/validation.js
@@ -1,4 +1,5 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const safe = require('safe-regex');
 const options = require('./definitions').getOptions();
 const { resolveConfigPresets } = require('./presets');
@@ -10,9 +11,7 @@ const managerValidator = require('./validation-helpers/managers');
 
 let optionTypes;
 
-module.exports = {
-  validateConfig,
-};
+export { validateConfig };
 
 // istanbul ignore next
 async function validateBaseBranches(config) {
@@ -79,6 +78,7 @@ async function validateConfig(config, isPreset, parentPath) {
     const currentPath = parentPath ? `${parentPath}.${key}` : key;
     if (
       !isIgnored(key) && // We need to ignore some reserved keys
+      // @ts-ignore
       !is.function(val) // Ignore all functions
     ) {
       if (getDeprecationMessage(key)) {
@@ -203,6 +203,7 @@ async function validateConfig(config, isPreset, parentPath) {
               !(val && val.length === 1 && val[0] === '*')
             ) {
               try {
+                // @ts-ignore
                 RegExp(val);
                 if (!safe(val)) {
                   errors.push({
diff --git a/lib/datasource/dart/index.js b/lib/datasource/dart/index.js
index a8b64f54bb..e8d9f4df4a 100644
--- a/lib/datasource/dart/index.js
+++ b/lib/datasource/dart/index.js
@@ -2,6 +2,7 @@ const got = require('../../util/got');
 const { logger } = require('../../logger');
 
 async function getPkgReleases({ lookupName }) {
+  /** @type any */
   let result = null;
   const pkgUrl = `https://pub.dartlang.org/api/packages/${lookupName}`;
   let raw = null;
diff --git a/lib/datasource/docker/index.js b/lib/datasource/docker/index.js
index 5685d7e09f..c232b241be 100644
--- a/lib/datasource/docker/index.js
+++ b/lib/datasource/docker/index.js
@@ -1,6 +1,7 @@
+import is from '@sindresorhus/is';
+
 const hasha = require('hasha');
 const URL = require('url');
-const is = require('@sindresorhus/is');
 const parseLinkHeader = require('parse-link-header');
 const wwwAuthenticate = require('www-authenticate');
 const { logger } = require('../../logger');
@@ -8,12 +9,15 @@ const { logger } = require('../../logger');
 const got = require('../../util/got');
 const hostRules = require('../../util/host-rules');
 
-module.exports = {
-  getDigest,
-  getPkgReleases,
-};
+export { getDigest, getPkgReleases };
 
+/**
+ *
+ * @param {string} lookupName
+ * @param {string[]=} registryUrls
+ */
 function getRegistryRepository(lookupName, registryUrls) {
+  /** @type string */
   let registry;
   const split = lookupName.split('/');
   if (split.length > 1 && split[0].includes('.')) {
@@ -50,6 +54,7 @@ async function getAuthHeaders(registry, repository) {
       apiCheckResponse.headers['www-authenticate']
     );
 
+    /** @type any */
     const opts = hostRules.find({ hostType: 'docker', url: apiCheckUrl });
     opts.json = true;
     if (opts.username && opts.password) {
@@ -200,7 +205,7 @@ async function getManifestResponse(registry, repository, tag) {
   }
 }
 
-/*
+/**
  * docker.getDigest
  *
  * The `newValue` supplied here should be a valid tag for the docker image.
@@ -208,8 +213,9 @@ async function getManifestResponse(registry, repository, tag) {
  * This function will:
  *  - Look up a sha256 digest for a tag on its registry
  *  - Return the digest as a string
+ * @param {{registryUrls? : string[], lookupName: string}} args
+ * @param {string=} newValue
  */
-
 async function getDigest({ registryUrls, lookupName }, newValue) {
   const { registry, repository } = getRegistryRepository(
     lookupName,
@@ -451,7 +457,7 @@ async function getLabels(registry, repository, tag) {
   }
 }
 
-/*
+/**
  * docker.getPkgReleases
  *
  * A docker image usually looks something like this: somehost.io/owner/repo:8.1.0-alpine
@@ -461,8 +467,8 @@ async function getLabels(registry, repository, tag) {
  *  - '8.1.0-alpine' is the tag
  *
  * This function will filter only tags that contain a semver version
+ * @param {{lookupName :string, registryUrls?: string[]  }} args
  */
-
 async function getPkgReleases({ lookupName, registryUrls }) {
   const { registry, repository } = getRegistryRepository(
     lookupName,
diff --git a/lib/datasource/github/index.js b/lib/datasource/github/index.js
index e88e9cfc80..e78a10ae5f 100644
--- a/lib/datasource/github/index.js
+++ b/lib/datasource/github/index.js
@@ -1,13 +1,11 @@
-import ghGot from '../../platform/github/gh-got-wrapper';
+import { api } from '../../platform/github/gh-got-wrapper';
 
 const { logger } = require('../../logger');
 const got = require('../../util/got');
 
-module.exports = {
-  getPreset,
-  getDigest,
-  getPkgReleases,
-};
+const ghGot = api.get;
+
+export { getPreset, getDigest, getPkgReleases };
 
 async function fetchJSONFile(repo, fileName) {
   const url = `https://api.github.com/repos/${repo}/contents/${fileName}`;
diff --git a/lib/datasource/gitlab/index.js b/lib/datasource/gitlab/index.js
index 048071a393..2168a778e3 100644
--- a/lib/datasource/gitlab/index.js
+++ b/lib/datasource/gitlab/index.js
@@ -1,12 +1,9 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
 
 const glGot = require('../../platform/gitlab/gl-got-wrapper').api.get;
 const { logger } = require('../../logger');
 
-module.exports = {
-  getPreset,
-  getPkgReleases,
-};
+export { getPreset, getPkgReleases };
 
 const GitLabApiUrl = 'https://gitlab.com/api/v4/projects';
 
@@ -14,6 +11,7 @@ async function getPreset(pkgName, presetName = 'default') {
   if (presetName !== 'default') {
     throw new Error(
       { pkgName, presetName },
+      // @ts-ignore
       'Sub-preset names are not supported with Gitlab datasource'
     );
   }
@@ -45,6 +43,10 @@ function getCacheKey(depHost, repo, lookupType) {
   return `${depHost}:${repo}:${type}`;
 }
 
+/**
+ *
+ * @param {{registryUrls? : string[], lookupName:string, lookupType:string}} param0
+ */
 async function getPkgReleases({ registryUrls, lookupName: repo, lookupType }) {
   // Use registryUrls if present, otherwise default to publid gitlab.com
   const depHost = is.nonEmptyArray(registryUrls)
diff --git a/lib/datasource/go/index.js b/lib/datasource/go/index.js
index 1b838a3a42..e44d1aab7a 100644
--- a/lib/datasource/go/index.js
+++ b/lib/datasource/go/index.js
@@ -74,6 +74,7 @@ async function getPkgReleases({ lookupName }) {
   logger.trace(`go.getPkgReleases(${lookupName})`);
   const source = await getDatasource(lookupName);
   if (source && source.datasource === 'github') {
+    // @ts-ignore
     const res = await github.getPkgReleases(source);
     if (res && res.releases) {
       res.releases = res.releases.filter(
diff --git a/lib/datasource/hex/index.js b/lib/datasource/hex/index.js
index 7f5b7ece41..3db55774d3 100644
--- a/lib/datasource/hex/index.js
+++ b/lib/datasource/hex/index.js
@@ -15,7 +15,7 @@ function getHostOpts() {
 async function getPkgReleases({ lookupName }) {
   const hexUrl = `https://hex.pm/api/packages/${lookupName}`;
   try {
-    const opts = getHostOpts(hexUrl);
+    const opts = getHostOpts();
     const res = (await got(hexUrl, {
       json: true,
       ...opts,
diff --git a/lib/datasource/maven/index.js b/lib/datasource/maven/index.js
index 6f86f9e0cb..33041c6e12 100644
--- a/lib/datasource/maven/index.js
+++ b/lib/datasource/maven/index.js
@@ -1,17 +1,20 @@
+import is from '@sindresorhus/is';
+
 const url = require('url');
 const fs = require('fs-extra');
 const { XmlDocument } = require('xmldoc');
-const is = require('@sindresorhus/is');
 const { logger } = require('../../logger');
 
 const { compare } = require('../../versioning/maven/compare');
 const { containsPlaceholder } = require('../../manager/maven/extract');
 const { downloadHttpProtocol } = require('./util');
 
-module.exports = {
-  getPkgReleases,
-};
+export { getPkgReleases };
 
+/**
+ *
+ * @param {{lookupName:string, registryUrls?: string[]}} args
+ */
 // eslint-disable-next-line no-unused-vars
 async function getPkgReleases({ lookupName, registryUrls }) {
   const versions = [];
diff --git a/lib/datasource/metadata.js b/lib/datasource/metadata.js
index 85401ce250..34bdbe97c2 100644
--- a/lib/datasource/metadata.js
+++ b/lib/datasource/metadata.js
@@ -1,9 +1,8 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const parse = require('github-url-from-git');
 
-module.exports = {
-  addMetaData,
-};
+export { addMetaData };
 
 // Use this object to define changelog URLs for packages
 // Only necessary when the changelog data cannot be found in the package's source repository
diff --git a/lib/datasource/npm/npmrc.js b/lib/datasource/npm/npmrc.js
index bd33b9000d..d9093a8a0c 100644
--- a/lib/datasource/npm/npmrc.js
+++ b/lib/datasource/npm/npmrc.js
@@ -1,4 +1,5 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const ini = require('ini');
 const { isBase64 } = require('validator');
 const { logger } = require('../../logger');
@@ -6,10 +7,7 @@ const { logger } = require('../../logger');
 let npmrc = null;
 let npmrcRaw;
 
-module.exports = {
-  getNpmrc,
-  setNpmrc,
-};
+export { getNpmrc, setNpmrc };
 
 function getNpmrc() {
   return npmrc;
diff --git a/lib/datasource/npm/presets.js b/lib/datasource/npm/presets.js
index bcab3aa0bb..b7137f3e03 100644
--- a/lib/datasource/npm/presets.js
+++ b/lib/datasource/npm/presets.js
@@ -2,9 +2,7 @@ import { logger } from '../../logger';
 
 const { getDependency } = require('./get');
 
-module.exports = {
-  getPreset,
-};
+export { getPreset };
 
 async function getPreset(pkgName, presetName = 'default') {
   const dep = await getDependency(pkgName);
diff --git a/lib/datasource/npm/releases.js b/lib/datasource/npm/releases.js
index b340ac059c..f2c96a6756 100644
--- a/lib/datasource/npm/releases.js
+++ b/lib/datasource/npm/releases.js
@@ -5,11 +5,15 @@ module.exports = {
   getPkgReleases,
 };
 
+/**
+ *
+ * @param {{lookupName: string, npmrc?: string}} args
+ */
 async function getPkgReleases({ lookupName, npmrc }) {
   if (npmrc) {
     setNpmrc(npmrc);
   }
-  const res = await getDependency(lookupName, global.testNpmRetries);
+  const res = await getDependency(lookupName);
   if (res) {
     res.tags = res['dist-tags'];
     delete res['dist-tags'];
diff --git a/lib/datasource/packagist/index.js b/lib/datasource/packagist/index.js
index 42772c6c4e..2eff397eea 100644
--- a/lib/datasource/packagist/index.js
+++ b/lib/datasource/packagist/index.js
@@ -1,4 +1,5 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const URL = require('url');
 const delay = require('delay');
 const parse = require('github-url-from-git');
@@ -8,9 +9,7 @@ const { logger } = require('../../logger');
 const got = require('../../util/got');
 const hostRules = require('../../util/host-rules');
 
-module.exports = {
-  getPkgReleases,
-};
+export { getPkgReleases };
 
 function getHostOpts(url) {
   const opts = {
diff --git a/lib/datasource/pypi/index.js b/lib/datasource/pypi/index.js
index 63cc856223..825824e3d0 100644
--- a/lib/datasource/pypi/index.js
+++ b/lib/datasource/pypi/index.js
@@ -1,13 +1,12 @@
+import is from '@sindresorhus/is';
+
 const url = require('url');
-const is = require('@sindresorhus/is');
 const { parse } = require('node-html-parser');
 const { logger } = require('../../logger');
 const { matches } = require('../../versioning/pep440');
 const got = require('../../util/got');
 
-module.exports = {
-  getPkgReleases,
-};
+export { getPkgReleases };
 
 function normalizeName(input) {
   return input.toLowerCase().replace(/(-|\.)/g, '_');
@@ -28,6 +27,10 @@ function compatibleVersions(releases, compatibility) {
   );
 }
 
+/**
+ *
+ * @param {{compatibility:any, lookupName:string, registryUrls?: string[] }} args
+ */
 async function getPkgReleases({ compatibility, lookupName, registryUrls }) {
   let hostUrls = ['https://pypi.org/pypi/'];
   if (is.nonEmptyArray(registryUrls)) {
@@ -114,6 +117,7 @@ async function getSimpleDependency(depName, hostUrl) {
       return null;
     }
     const root = parse(dep);
+    // @ts-ignore
     const links = root.querySelectorAll('a');
     const versions = new Set();
     for (const link of links) {
diff --git a/lib/datasource/ruby-version/index.js b/lib/datasource/ruby-version/index.js
index 03598f3440..cd2507bbb9 100644
--- a/lib/datasource/ruby-version/index.js
+++ b/lib/datasource/ruby-version/index.js
@@ -26,6 +26,7 @@ async function getPkgReleases() {
     };
     const response = await got(rubyVersionsUrl);
     const root = parse(response.body);
+    // @ts-ignore
     const rows = root.querySelector('.release-list').querySelectorAll('tr');
     for (const row of rows) {
       const columns = Array.from(
diff --git a/lib/datasource/rubygems/get-rubygems-org.js b/lib/datasource/rubygems/get-rubygems-org.js
index 25eea2834d..4ccdfa7261 100644
--- a/lib/datasource/rubygems/get-rubygems-org.js
+++ b/lib/datasource/rubygems/get-rubygems-org.js
@@ -72,6 +72,7 @@ async function updateRubyGemsVersions() {
 }
 
 function isDataStale() {
+  // @ts-ignore
   const minutesElapsed = Math.floor((new Date() - lastSync) / (60 * 1000));
   return minutesElapsed >= 5;
 }
diff --git a/lib/datasource/rubygems/get.js b/lib/datasource/rubygems/get.js
index 0e2c869bc9..0310497587 100644
--- a/lib/datasource/rubygems/get.js
+++ b/lib/datasource/rubygems/get.js
@@ -39,7 +39,7 @@ const fetch = async ({ dependency, registry, path }) => {
   const json = true;
 
   const retry = retriable();
-  const headers = getHeaders(registry);
+  const headers = getHeaders();
 
   const name = `/${dependency}.json`;
   const baseUrl = `${registry}/${path}`;
diff --git a/lib/datasource/rubygems/releases.js b/lib/datasource/rubygems/releases.js
index 3e1af26328..f7c8f1cf89 100644
--- a/lib/datasource/rubygems/releases.js
+++ b/lib/datasource/rubygems/releases.js
@@ -1,9 +1,11 @@
-const { nonEmptyArray } = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const { getDependency } = require('./get');
 const { getRubygemsOrgDependency } = require('./get-rubygems-org');
 
+/** @param {{lookupName:string, registryUrls?: string[]}} opt */
 async function getPkgReleases({ lookupName, registryUrls }) {
-  const registries = nonEmptyArray(registryUrls) ? registryUrls : [];
+  const registries = is.nonEmptyArray(registryUrls) ? registryUrls : [];
 
   for (const registry of registries) {
     let pkg;
@@ -20,6 +22,4 @@ async function getPkgReleases({ lookupName, registryUrls }) {
   return null;
 }
 
-module.exports = {
-  getPkgReleases,
-};
+export { getPkgReleases };
diff --git a/lib/datasource/rubygems/retriable.js b/lib/datasource/rubygems/retriable.js
index dea324b773..1f91ecd27e 100644
--- a/lib/datasource/rubygems/retriable.js
+++ b/lib/datasource/rubygems/retriable.js
@@ -11,7 +11,7 @@ const RETRY_AFTER = 600;
 const NUMBER_OF_RETRIES = 5;
 
 const getDelayStep = () =>
-  process.env.RENOVATE_RUBYGEMS_RETRY_DELAY_STEP || 1000;
+  parseInt(process.env.RENOVATE_RUBYGEMS_RETRY_DELAY_STEP || '1000', 10);
 
 const toMs = value => parseInt(value, 10) * getDelayStep();
 const getBannedDelay = retryAfter => (retryAfter || RETRY_AFTER) + 1;
diff --git a/lib/datasource/terraform/index.js b/lib/datasource/terraform/index.js
index 0a378b4f02..949f035c34 100644
--- a/lib/datasource/terraform/index.js
+++ b/lib/datasource/terraform/index.js
@@ -1,12 +1,11 @@
+import is from '@sindresorhus/is';
+
 const parse = require('github-url-from-git');
-const is = require('@sindresorhus/is');
 const { logger } = require('../../logger');
 
 const got = require('../../util/got');
 
-module.exports = {
-  getPkgReleases,
-};
+export { getPkgReleases };
 
 function getRegistryRepository(lookupName, registryUrls) {
   let registry;
diff --git a/lib/logger/config-serializer.js b/lib/logger/config-serializer.js
index 123ce38379..6c81673f6e 100644
--- a/lib/logger/config-serializer.js
+++ b/lib/logger/config-serializer.js
@@ -23,23 +23,26 @@ function configSerializer(config) {
     'yarnLockParsed',
   ];
   const arrayFields = ['packageFiles', 'upgrades'];
-  // eslint-disable-next-line array-callback-return
-  return traverse(config).map(function scrub(val) {
-    if (val && redactedFields.includes(this.key)) {
-      this.update('***********');
+  return traverse(config).map(
+    /** @this {{key:string, update: (val:any) => void}} */
+    // eslint-disable-next-line array-callback-return
+    function scrub(val) {
+      if (val && redactedFields.includes(this.key)) {
+        this.update('***********');
+      }
+      if (val && templateFields.includes(this.key)) {
+        this.update('[Template]');
+      }
+      if (val && contentFields.includes(this.key)) {
+        this.update('[content]');
+      }
+      if (val && this.key === 'releases') {
+        this.update(val.map(release => release.version));
+      }
+      // istanbul ignore if
+      if (val && arrayFields.includes(this.key)) {
+        this.update('[Array]');
+      }
     }
-    if (val && templateFields.includes(this.key)) {
-      this.update('[Template]');
-    }
-    if (val && contentFields.includes(this.key)) {
-      this.update('[content]');
-    }
-    if (val && this.key === 'releases') {
-      this.update(val.map(release => release.version));
-    }
-    // istanbul ignore if
-    if (val && arrayFields.includes(this.key)) {
-      this.update('[Array]');
-    }
-  });
+  );
 }
diff --git a/lib/logger/err-serializer.js b/lib/logger/err-serializer.js
index b18605afaf..79b425ab44 100644
--- a/lib/logger/err-serializer.js
+++ b/lib/logger/err-serializer.js
@@ -1,8 +1,6 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
 
-module.exports = errSerializer;
-
-function errSerializer(err) {
+export default function errSerializer(err) {
   const response = {
     ...err,
   };
diff --git a/lib/manager/composer/artifacts.js b/lib/manager/composer/artifacts.js
index 9af1093280..2e971d44b2 100644
--- a/lib/manager/composer/artifacts.js
+++ b/lib/manager/composer/artifacts.js
@@ -1,4 +1,5 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const URL = require('url');
 const { exec } = require('child-process-promise');
 const fs = require('fs-extra');
@@ -7,9 +8,7 @@ const { logger } = require('../../logger');
 const hostRules = require('../../util/host-rules');
 const { getChildProcessEnv } = require('../../util/env');
 
-module.exports = {
-  updateArtifacts,
-};
+export { updateArtifacts };
 
 async function updateArtifacts(
   packageFileName,
diff --git a/lib/manager/composer/extract.js b/lib/manager/composer/extract.js
index a650d18f03..b67da65a06 100644
--- a/lib/manager/composer/extract.js
+++ b/lib/manager/composer/extract.js
@@ -1,10 +1,9 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const { logger } = require('../../logger');
 const semverComposer = require('../../versioning/composer');
 
-module.exports = {
-  extractPackageFile,
-};
+export { extractPackageFile };
 
 async function extractPackageFile(content, fileName) {
   logger.trace(`composer.extractPackageFile(${fileName})`);
diff --git a/lib/manager/dockerfile/extract.js b/lib/manager/dockerfile/extract.js
index afd04dc132..6972faf331 100644
--- a/lib/manager/dockerfile/extract.js
+++ b/lib/manager/dockerfile/extract.js
@@ -36,6 +36,7 @@ function splitImageParts(currentFrom) {
 }
 
 function getDep(currentFrom) {
+  /** @type any */
   const dep = {
     ...splitImageParts(currentFrom),
     currentFrom,
diff --git a/lib/manager/github-actions/extract.js b/lib/manager/github-actions/extract.js
index 6e04847e07..3e668af665 100644
--- a/lib/manager/github-actions/extract.js
+++ b/lib/manager/github-actions/extract.js
@@ -13,6 +13,7 @@ function extractPackageFile(content) {
     const match = line.match(/^\s+uses = "docker:\/\/([^"]+)"\s*$/);
     if (match) {
       const currentFrom = match[1];
+      /** @type any */
       const dep = getDep(currentFrom);
       logger.debug(
         {
diff --git a/lib/manager/gitlabci-include/extract.js b/lib/manager/gitlabci-include/extract.js
index 8427ff767d..9fdcd29879 100644
--- a/lib/manager/gitlabci-include/extract.js
+++ b/lib/manager/gitlabci-include/extract.js
@@ -1,11 +1,10 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const yaml = require('js-yaml');
 
 const { logger } = require('../../logger');
 
-module.exports = {
-  extractPackageFile,
-};
+export { extractPackageFile };
 
 function extractDepFromInclude(includeObj) {
   if (!includeObj.file || !includeObj.project) {
diff --git a/lib/manager/gitlabci/extract.js b/lib/manager/gitlabci/extract.js
index 66dbe23221..ff3480247c 100644
--- a/lib/manager/gitlabci/extract.js
+++ b/lib/manager/gitlabci/extract.js
@@ -24,6 +24,7 @@ function extractPackageFile(content) {
               lineNumber += 1;
               logger.trace(`Matched image name on line ${lineNumber}`);
               const currentFrom = imageNameMatch[1];
+              /** @type any */
               const dep = getDep(currentFrom);
               dep.lineNumber = lineNumber;
               dep.depType = 'image-name';
@@ -34,6 +35,7 @@ function extractPackageFile(content) {
           default: {
             logger.trace(`Matched image on line ${lineNumber}`);
             const currentFrom = imageMatch[1];
+            /** @type any */
             const dep = getDep(currentFrom);
             dep.lineNumber = lineNumber;
             dep.depType = 'image';
@@ -57,6 +59,7 @@ function extractPackageFile(content) {
             foundImage = true;
             const currentFrom = serviceImageMatch[1];
             lineNumber += 1;
+            /** @type any */
             const dep = getDep(currentFrom);
             dep.lineNumber = lineNumber;
             dep.depType = 'service-image';
diff --git a/lib/manager/kubernetes/extract.js b/lib/manager/kubernetes/extract.js
index 36391926d9..4e79fae8ca 100644
--- a/lib/manager/kubernetes/extract.js
+++ b/lib/manager/kubernetes/extract.js
@@ -20,6 +20,7 @@ function extractPackageFile(content) {
     const match = line.match(/^\s*-?\s*image:\s*'?"?([^\s'"]+)'?"?\s*$/);
     if (match) {
       const currentFrom = match[1];
+      /** @type any */
       const dep = getDep(currentFrom);
       logger.debug(
         {
diff --git a/lib/manager/maven/extract.js b/lib/manager/maven/extract.js
index 9d10255eab..e8af7a6c1c 100644
--- a/lib/manager/maven/extract.js
+++ b/lib/manager/maven/extract.js
@@ -195,6 +195,7 @@ function resolveProps(packages) {
       pkg = extractedPackages[pkg.parent];
     }
     hierarchy.unshift({});
+    // @ts-ignore
     extractedProps[name] = Object.assign.apply(null, hierarchy);
   });
 
diff --git a/lib/manager/npm/extract/monorepo.js b/lib/manager/npm/extract/monorepo.js
index 1f9cdbf112..e678bb461b 100644
--- a/lib/manager/npm/extract/monorepo.js
+++ b/lib/manager/npm/extract/monorepo.js
@@ -1,12 +1,11 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const minimatch = require('minimatch');
 const path = require('path');
 const upath = require('upath');
 const { logger } = require('../../../logger');
 
-module.exports = {
-  detectMonorepos,
-};
+export { detectMonorepos };
 
 function matchesAnyPattern(val, patterns) {
   const res = patterns.some(
diff --git a/lib/manager/npm/post-update/index.js b/lib/manager/npm/post-update/index.js
index bde075d86d..c7ffd9fa2a 100644
--- a/lib/manager/npm/post-update/index.js
+++ b/lib/manager/npm/post-update/index.js
@@ -1,7 +1,8 @@
+import is from '@sindresorhus/is';
+
 const fs = require('fs-extra');
 const path = require('path');
 const upath = require('upath');
-const is = require('@sindresorhus/is');
 const { logger } = require('../../../logger');
 const npm = require('./npm');
 const lerna = require('./lerna');
@@ -10,7 +11,7 @@ const pnpm = require('./pnpm');
 const hostRules = require('../../../util/host-rules');
 const { getChildProcessEnv } = require('../../../util/env');
 
-module.exports = {
+export {
   determineLockFileDirs,
   writeExistingFiles,
   writeUpdatedPackageFiles,
@@ -353,7 +354,7 @@ async function getAdditionalFiles(config, packageFiles) {
   const dirs = module.exports.determineLockFileDirs(config, packageFiles);
   logger.debug({ dirs }, 'lock file dirs');
   await module.exports.writeExistingFiles(config, packageFiles);
-  await module.exports.writeUpdatedPackageFiles(config, packageFiles);
+  await module.exports.writeUpdatedPackageFiles(config);
 
   process.env.NPM_CONFIG_CACHE =
     process.env.NPM_CONFIG_CACHE || upath.join(config.cacheDir, './others/npm');
diff --git a/lib/manager/pip_setup/extract.js b/lib/manager/pip_setup/extract.js
index b085288e6c..c7e5eaa70a 100644
--- a/lib/manager/pip_setup/extract.js
+++ b/lib/manager/pip_setup/extract.js
@@ -135,7 +135,9 @@ async function extractPackageFile(content, packageFile, config) {
     .filter(Boolean)
     .sort((a, b) =>
       a.lineNumber === b.lineNumber
-        ? (a.depName > b.depName) - (a.depName < b.depName)
+        ? // TODO: dummy comment for prettier
+          // @ts-ignore
+          (a.depName > b.depName) - (a.depName < b.depName)
         : a.lineNumber - b.lineNumber
     );
   // istanbul ignore if
diff --git a/lib/manager/pipenv/extract.js b/lib/manager/pipenv/extract.js
index 4c81528f15..c95cf9e47b 100644
--- a/lib/manager/pipenv/extract.js
+++ b/lib/manager/pipenv/extract.js
@@ -1,5 +1,6 @@
+import is from '@sindresorhus/is';
+
 const toml = require('toml');
-const is = require('@sindresorhus/is');
 
 // based on https://www.python.org/dev/peps/pep-0508/#names
 const packageRegex = /^([A-Z0-9]|[A-Z0-9][A-Z0-9._-]*[A-Z0-9])$/i;
@@ -12,9 +13,7 @@ const specifierPartPattern = `\\s*${rangePattern.replace(
 )}\\s*`;
 const specifierPattern = `${specifierPartPattern}(?:,${specifierPartPattern})*`;
 
-module.exports = {
-  extractPackageFile,
-};
+export { extractPackageFile };
 
 function extractPackageFile(content) {
   logger.debug('pipenv.extractPackageFile()');
diff --git a/lib/manager/pub/extract.js b/lib/manager/pub/extract.js
index 5dcac29ade..99bce6dc9b 100644
--- a/lib/manager/pub/extract.js
+++ b/lib/manager/pub/extract.js
@@ -22,6 +22,7 @@ function getDeps(depsObj, preset = {}) {
       currentValue = section.version.toString();
     }
 
+    /** @type any */
     const dep = { ...preset, depName, currentValue };
     if (!currentValue) {
       dep.skipReason = 'not-a-version';
diff --git a/lib/manager/travis/extract.js b/lib/manager/travis/extract.js
index ab9a374814..682f7506f7 100644
--- a/lib/manager/travis/extract.js
+++ b/lib/manager/travis/extract.js
@@ -1,9 +1,8 @@
+import is from '@sindresorhus/is';
+
 const yaml = require('js-yaml');
-const is = require('@sindresorhus/is');
 
-module.exports = {
-  extractPackageFile,
-};
+export { extractPackageFile };
 
 function extractPackageFile(content) {
   const doc = yaml.safeLoad(content);
diff --git a/lib/manager/travis/package.js b/lib/manager/travis/package.js
index 78c00e7cae..bb5370eba1 100644
--- a/lib/manager/travis/package.js
+++ b/lib/manager/travis/package.js
@@ -1,13 +1,12 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const { isEqual } = require('lodash');
 const { getPkgReleases } = require('../../datasource');
 const { isVersion, maxSatisfyingVersion } = require('../../versioning/semver');
 const { logger } = require('../../logger');
 const nodeJsSchedule = require('../../../data/node-js-schedule.json');
 
-module.exports = {
-  getPackageUpdates,
-};
+export { getPackageUpdates };
 
 let policies;
 let refreshDate;
diff --git a/lib/manager/travis/update.js b/lib/manager/travis/update.js
index f3c94aca9c..44e8d31a16 100644
--- a/lib/manager/travis/update.js
+++ b/lib/manager/travis/update.js
@@ -1,10 +1,9 @@
+import is from '@sindresorhus/is';
+
 const detectIndent = require('detect-indent');
-const is = require('@sindresorhus/is');
 const { logger } = require('../../logger');
 
-module.exports = {
-  updateDependency,
-};
+export { updateDependency };
 
 function updateDependency(fileContent, upgrade) {
   try {
diff --git a/lib/platform/github/index.ts b/lib/platform/github/index.ts
index fe56b4e271..d8ad3e570b 100644
--- a/lib/platform/github/index.ts
+++ b/lib/platform/github/index.ts
@@ -29,6 +29,12 @@ interface Pr {
   branchName: string;
   number: number;
   comments: Comment[];
+
+  createdAt: string;
+
+  sha: string;
+
+  sourceRepo: string;
 }
 
 interface RepoConfig {
@@ -507,7 +513,7 @@ export function getFile(filePath: string, branchName?: string) {
 }
 
 // istanbul ignore next
-export function deleteBranch(branchName: string) {
+export function deleteBranch(branchName: string, closePr?: boolean) {
   return config.storage.deleteBranch(branchName);
 }
 
@@ -665,7 +671,7 @@ export async function setBranchStatus(
   context: string,
   description: string,
   state: string,
-  targetUrl: string
+  targetUrl?: string
 ) {
   // istanbul ignore if
   if (config.parentRepo) {
@@ -1274,7 +1280,7 @@ async function getOpenPrs() {
         json: false,
       };
       const res = JSON.parse((await api.post(url, options)).body);
-      const prNumbers = [];
+      const prNumbers: number[] = [];
       // istanbul ignore if
       if (!res.data) {
         logger.info({ query, res }, 'No graphql res.data');
@@ -1399,7 +1405,7 @@ async function getClosedPrs() {
         json: false,
       };
       const res = JSON.parse((await api.post(url, options)).body);
-      const prNumbers = [];
+      const prNumbers: number[] = [];
       // istanbul ignore if
       if (!res.data) {
         logger.info(
@@ -1555,7 +1561,7 @@ export async function getPrFiles(prNo: number) {
   return files.map((f: { filename: string }) => f.filename);
 }
 
-export async function updatePr(prNo: number, title: string, body: string) {
+export async function updatePr(prNo: number, title: string, body?: string) {
   logger.debug(`updatePr(${prNo}, ${title}, body)`);
   const patchBody: any = { title };
   if (body) {
diff --git a/lib/types.d.ts b/lib/types.d.ts
index 3ce19ad72d..edca5fb38c 100644
--- a/lib/types.d.ts
+++ b/lib/types.d.ts
@@ -1,6 +1,23 @@
-declare namespace Renovate {}
+declare namespace Renovate {
+  interface Cache {
+    get<T = any>(namespace: string, key: string): Promise<T>;
+    rm(namespace: string, key: string): Promise<void>;
+    rmAll(): Promise<void>;
+
+    set<T = any>(
+      namespace: string,
+      key: string,
+      value: T,
+      ttlMinutes?: number
+    ): Promise<void>;
+  }
+}
 
 declare interface Error {
+  configFile?: string;
+
+  statusCode?: number;
+
   validationError?: string;
   validationMessage?: string;
 }
@@ -13,5 +30,23 @@ declare namespace NodeJS {
     renovateVersion: string;
     // TODO: declare interface for all platforms
     platform: typeof import('./platform/github');
+
+    renovateCache: Renovate.Cache;
+
+    repoCache: Record<string, any>;
+
+    trustLevel?: string;
+
+    updateRubyGemsVersions?: Promise<void>;
   }
 }
+
+declare let platform: typeof import('./platform/github');
+
+declare let renovateCache: Renovate.Cache;
+
+// can't use `resolveJsonModule` because it will copy json files and change dist path
+declare module '*.json' {
+  const value: any;
+  export = value;
+}
diff --git a/lib/util/got/auth.js b/lib/util/got/auth.js
index 77311e45cc..069c98bfc9 100644
--- a/lib/util/got/auth.js
+++ b/lib/util/got/auth.js
@@ -2,6 +2,7 @@ const got = require('got');
 const { logger } = require('../../logger');
 
 // istanbul ignore next
+// @ts-ignore
 module.exports = got.create({
   options: {},
   handler: (options, next) => {
diff --git a/lib/util/got/cache-get.js b/lib/util/got/cache-get.js
index 82c3049a72..93e4e4aebd 100644
--- a/lib/util/got/cache-get.js
+++ b/lib/util/got/cache-get.js
@@ -7,6 +7,7 @@ const clone = input => JSON.parse(JSON.stringify(input));
 // With this caching, it means every GET request is cached during each repository run
 
 // istanbul ignore next
+// @ts-ignore
 module.exports = got.create({
   options: {},
   handler: (options, next) => {
diff --git a/lib/util/got/host-rules.js b/lib/util/got/host-rules.js
index bed682ab0a..61762f6837 100644
--- a/lib/util/got/host-rules.js
+++ b/lib/util/got/host-rules.js
@@ -6,6 +6,7 @@ const hostRules = require('../host-rules');
 // Apply host rules to requests
 
 // istanbul ignore next
+// @ts-ignore
 module.exports = got.create({
   options: {},
   handler: (options, next) => {
diff --git a/lib/util/got/index.js b/lib/util/got/index.js
index 92e03756d0..06a94285c2 100644
--- a/lib/util/got/index.js
+++ b/lib/util/got/index.js
@@ -13,6 +13,7 @@ const stats = require('./stats');
  * Important: always put the renovateAgent one last, to make sure the correct user agent is used
  */
 
+// @ts-ignore
 module.exports = got.mergeInstances(
   cacheGet,
   renovateAgent,
diff --git a/lib/util/got/stats.js b/lib/util/got/stats.js
index cf723302d7..f04d5da553 100644
--- a/lib/util/got/stats.js
+++ b/lib/util/got/stats.js
@@ -26,12 +26,14 @@ module.exports.printStats = () => {
   logger.debug({ hostStats }, 'Host request stats (milliseconds)');
 };
 
+// @ts-ignore
 module.exports.instance = got.create({
   options: {},
   handler: (options, next) => {
     const start = new Date();
     const nextPromise = next(options);
     nextPromise.on('response', () => {
+      // @ts-ignore
       const elapsed = new Date() - start;
       stats[options.hostname] = stats[options.hostname] || [];
       stats[options.hostname].push(elapsed);
diff --git a/lib/util/host-rules.ts b/lib/util/host-rules.ts
index 5299e163a3..beb26180d7 100644
--- a/lib/util/host-rules.ts
+++ b/lib/util/host-rules.ts
@@ -6,10 +6,13 @@ export interface HostRule {
   hostType?: string;
   domainName?: string;
   hostName?: string;
+  json?: true;
   baseUrl?: string;
   token?: string;
   username?: string;
   password?: string;
+
+  timeout?: number;
 }
 
 let hostRules: HostRule[] = [];
@@ -29,7 +32,7 @@ export function add(params: HostRule) {
 
 export interface HostRuleSearch {
   hostType?: string;
-  url: string;
+  url?: string;
 }
 
 function isEmptyRule(rule: HostRule) {
diff --git a/lib/workers/branch/commit.js b/lib/workers/branch/commit.js
index 85aaffdf79..ae1e3fdad1 100644
--- a/lib/workers/branch/commit.js
+++ b/lib/workers/branch/commit.js
@@ -1,10 +1,9 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const minimatch = require('minimatch');
 const { logger } = require('../../logger');
 
-module.exports = {
-  commitFilesToBranch,
-};
+export { commitFilesToBranch };
 
 async function commitFilesToBranch(config) {
   let updatedFiles = config.updatedPackageFiles.concat(config.updatedArtifacts);
@@ -30,15 +29,13 @@ async function commitFilesToBranch(config) {
       logger.info('DRY-RUN: Would commit files to branch ' + config.branchName);
     } else {
       // API will know whether to create new branch or not
-      const res = await platform.commitFilesToBranch(
+      await platform.commitFilesToBranch(
         config.branchName,
         updatedFiles,
         config.commitMessage,
         config.baseBranch || undefined
       );
-      if (res) {
-        logger.info({ branch: config.branchName }, `Branch ${res}`);
-      }
+      logger.info({ branch: config.branchName }, `files committed`);
     }
   } else {
     logger.debug(`No files to commit`);
diff --git a/lib/workers/branch/get-updated.js b/lib/workers/branch/get-updated.js
index 7265e2aa69..7e0cc6240c 100644
--- a/lib/workers/branch/get-updated.js
+++ b/lib/workers/branch/get-updated.js
@@ -1,10 +1,9 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const { logger } = require('../../logger');
 const { get } = require('../../manager');
 
-module.exports = {
-  getUpdatedPackageFiles,
-};
+export { getUpdatedPackageFiles };
 
 async function getUpdatedPackageFiles(config) {
   logger.debug('manager.getUpdatedPackageFiles()');
@@ -83,6 +82,7 @@ async function getUpdatedPackageFiles(config) {
       );
       if (is.nonEmptyArray(results)) {
         for (const res of results) {
+          // @ts-ignore
           const { file, artifactError } = res;
           if (file) {
             updatedArtifacts.push(file);
@@ -110,6 +110,7 @@ async function getUpdatedPackageFiles(config) {
         );
         if (is.nonEmptyArray(results)) {
           for (const res of results) {
+            // @ts-ignore
             const { file, artifactError } = res;
             if (file) {
               updatedArtifacts.push(file);
diff --git a/lib/workers/branch/schedule.js b/lib/workers/branch/schedule.js
index 5a1d37d67f..4ce8a67136 100644
--- a/lib/workers/branch/schedule.js
+++ b/lib/workers/branch/schedule.js
@@ -1,13 +1,10 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const later = require('later');
 const moment = require('moment-timezone');
 const { logger } = require('../../logger');
 
-module.exports = {
-  hasValidTimezone,
-  hasValidSchedule,
-  isScheduledNow,
-};
+export { hasValidTimezone, hasValidSchedule, isScheduledNow };
 
 const scheduleMappings = {
   'every month': 'before 3am on the first day of the month',
@@ -64,7 +61,7 @@ function hasValidSchedule(schedule) {
     // If any fail then we invalidate the whole thing
     return [false, message];
   }
-  return [true];
+  return [true, ''];
 }
 
 function isScheduledNow(config) {
@@ -88,6 +85,7 @@ function isScheduledNow(config) {
   }
   const [validSchedule, errorMessage] = hasValidSchedule(configSchedule);
   if (!validSchedule) {
+    // @ts-ignore
     logger.warn(errorMessage);
     return true;
   }
@@ -98,6 +96,7 @@ function isScheduledNow(config) {
     logger.debug({ timezone: config.timezone }, 'Found timezone');
     const [validTimezone, error] = hasValidTimezone(config.timezone);
     if (!validTimezone) {
+      // @ts-ignore
       logger.warn(error);
       return true;
     }
diff --git a/lib/workers/global/autodiscover.js b/lib/workers/global/autodiscover.js
index 1eeb4d2537..a4405e8c04 100644
--- a/lib/workers/global/autodiscover.js
+++ b/lib/workers/global/autodiscover.js
@@ -1,10 +1,9 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const minimatch = require('minimatch');
 const { logger } = require('../../logger');
 
-module.exports = {
-  autodiscoverRepositories,
-};
+export { autodiscoverRepositories };
 
 async function autodiscoverRepositories(config) {
   if (!config.autodiscover) {
diff --git a/lib/workers/global/index.js b/lib/workers/global/index.js
index 8c16d80249..a960078cf5 100644
--- a/lib/workers/global/index.js
+++ b/lib/workers/global/index.js
@@ -1,6 +1,7 @@
+import is from '@sindresorhus/is';
+
 const fs = require('fs-extra');
 const os = require('os');
-const is = require('@sindresorhus/is');
 const path = require('path');
 const { logger, setMeta } = require('../../logger');
 const configParser = require('../../config');
@@ -12,10 +13,7 @@ const { initPlatform } = require('../../platform');
 const hostRules = require('../../util/host-rules');
 const { printStats } = require('../../util/got/stats');
 
-module.exports = {
-  start,
-  getRepositoryConfig,
-};
+export { start, getRepositoryConfig };
 
 async function start() {
   try {
@@ -82,6 +80,7 @@ async function start() {
 // istanbul ignore next
 function detectRenovateVersion() {
   try {
+    // @ts-ignore
     global.renovateVersion = require('../../../package.json').version; // eslint-disable-line global-require
   } catch (err) {
     logger.debug({ err }, 'Error getting renovate version');
diff --git a/lib/workers/pr/changelog/release-notes.js b/lib/workers/pr/changelog/release-notes.js
index 2a85c223ba..d5f280eebc 100644
--- a/lib/workers/pr/changelog/release-notes.js
+++ b/lib/workers/pr/changelog/release-notes.js
@@ -1,14 +1,16 @@
-import ghGot from '../../../platform/github/gh-got-wrapper';
+import { api } from '../../../platform/github/gh-got-wrapper';
 
 const changelogFilenameRegex = require('changelog-filename-regex');
 const { linkify } = require('linkify-markdown');
 const MarkdownIt = require('markdown-it');
 const { logger } = require('../../../logger');
 
+const ghGot = api.get;
+
 const markdown = new MarkdownIt('zero');
 markdown.enable(['heading', 'lheading']);
 
-module.exports = {
+export {
   getReleaseList,
   massageBody,
   getReleaseNotesMd,
diff --git a/lib/workers/pr/changelog/source-github.js b/lib/workers/pr/changelog/source-github.js
index 214e478490..6b9fb35273 100644
--- a/lib/workers/pr/changelog/source-github.js
+++ b/lib/workers/pr/changelog/source-github.js
@@ -1,4 +1,4 @@
-import ghGot from '../../../platform/github/gh-got-wrapper';
+import { api } from '../../../platform/github/gh-got-wrapper';
 
 const URL = require('url');
 const { logger } = require('../../../logger');
@@ -6,9 +6,9 @@ const hostRules = require('../../../util/host-rules');
 const versioning = require('../../../versioning');
 const { addReleaseNotes } = require('./release-notes');
 
-module.exports = {
-  getChangeLogJSON,
-};
+const ghGot = api.get;
+
+export { getChangeLogJSON };
 
 async function getTags(endpoint, versionScheme, repository) {
   let url = endpoint
@@ -72,6 +72,7 @@ async function getChangeLogJSON({
   const githubApiBaseURL = sourceUrl.startsWith('https://github.com/')
     ? 'https://api.github.com/'
     : endpoint; // TODO FIX
+  // @ts-ignore
   const repository = pathname.slice(1).replace(/\/$/, '');
   if (repository.split('/').length !== 2) {
     logger.info({ sourceUrl }, 'Invalid github URL found');
diff --git a/lib/workers/pr/pr-body.js b/lib/workers/pr/pr-body.js
index c03bc44356..b400bb210c 100644
--- a/lib/workers/pr/pr-body.js
+++ b/lib/workers/pr/pr-body.js
@@ -1,4 +1,5 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const handlebars = require('handlebars');
 const { logger } = require('../../logger');
 const releaseNotesHbs = require('./changelog/hbs-template');
@@ -10,9 +11,7 @@ const { appName, appSlug } = require('../../config/app-strings');
 
 handlebars.registerHelper('encodeURIComponent', encodeURIComponent);
 
-module.exports = {
-  getPrBody,
-};
+export { getPrBody };
 
 function getTableDefinition(config) {
   const res = [];
diff --git a/lib/workers/repository/finalise/validate.js b/lib/workers/repository/finalise/validate.js
index dd26a2e313..ade9c898da 100644
--- a/lib/workers/repository/finalise/validate.js
+++ b/lib/workers/repository/finalise/validate.js
@@ -52,7 +52,10 @@ async function validatePrs(config) {
           if (file.endsWith('.json5')) {
             parsed = JSON5.parse(content);
           } else {
-            parsed = JSON.parse(content);
+            parsed = JSON.parse(
+              // @ts-ignore
+              content
+            );
           }
         } catch (err) {
           validations.push({
diff --git a/lib/workers/repository/index.js b/lib/workers/repository/index.js
index c206adc3f1..83e1c09419 100644
--- a/lib/workers/repository/index.js
+++ b/lib/workers/repository/index.js
@@ -1,7 +1,6 @@
 import handleError from './error';
 
 const fs = require('fs-extra');
-
 const { logger, setMeta } = require('../../logger');
 const { initRepo } = require('./init');
 const { ensureOnboardingPr } = require('./onboarding/pr');
@@ -10,9 +9,7 @@ const { processRepo } = require('./process');
 const { finaliseRepo } = require('./finalise');
 const { ensureMasterIssue } = require('./master-issue');
 
-module.exports = {
-  renovateRepository,
-};
+export { renovateRepository };
 
 // istanbul ignore next
 async function renovateRepository(repoConfig) {
diff --git a/lib/workers/repository/init/config.js b/lib/workers/repository/init/config.js
index 07ded19677..6b8ad59b14 100644
--- a/lib/workers/repository/init/config.js
+++ b/lib/workers/repository/init/config.js
@@ -20,7 +20,10 @@ async function mergeRenovateConfig(config) {
     for (const fileName of configFileNames) {
       if (fileName === 'package.json') {
         try {
-          const pJson = JSON.parse(await platform.getFile('package.json'));
+          const pJson = JSON.parse(
+            // @ts-ignore
+            await platform.getFile('package.json')
+          );
           if (pJson.renovate) {
             logger.info('Using package.json for global renovate config');
             return 'package.json';
@@ -43,7 +46,10 @@ async function mergeRenovateConfig(config) {
   let renovateJson;
   if (configFile === 'package.json') {
     // We already know it parses
-    renovateJson = JSON.parse(await platform.getFile('package.json')).renovate;
+    renovateJson = JSON.parse(
+      // @ts-ignore
+      await platform.getFile('package.json')
+    ).renovate;
     logger.info({ config: renovateJson }, 'package.json>renovate config');
   } else {
     let renovateConfig = await platform.getFile(configFile);
diff --git a/lib/workers/repository/init/index.js b/lib/workers/repository/init/index.js
index 9870527218..245bcfc9a1 100644
--- a/lib/workers/repository/init/index.js
+++ b/lib/workers/repository/init/index.js
@@ -8,6 +8,7 @@ const { detectSemanticCommits } = require('./semantic');
 const { detectVulnerabilityAlerts } = require('./vulnerability');
 
 async function initRepo(input) {
+  // @ts-ignore
   global.repoCache = {};
   let config = {
     ...input,
diff --git a/lib/workers/repository/onboarding/branch/check.js b/lib/workers/repository/onboarding/branch/check.js
index cd6e005828..1b37cacc7c 100644
--- a/lib/workers/repository/onboarding/branch/check.js
+++ b/lib/workers/repository/onboarding/branch/check.js
@@ -24,7 +24,10 @@ const configFileExists = async () => {
 
 const packageJsonConfigExists = async () => {
   try {
-    const pJson = JSON.parse(await platform.getFile('package.json'));
+    const pJson = JSON.parse(
+      // @ts-ignore
+      await platform.getFile('package.json')
+    );
     if (pJson[appSlug]) {
       return true;
     }
@@ -64,7 +67,7 @@ const isOnboarded = async config => {
     throw new Error('disabled');
   }
 
-  const pr = await closedPrExists(config);
+  const pr = await closedPrExists();
   if (!pr) {
     logger.debug('Found no closed onboarding PR');
     return false;
diff --git a/lib/workers/repository/onboarding/branch/config.js b/lib/workers/repository/onboarding/branch/config.js
index 899d482fcc..ffde5255ae 100644
--- a/lib/workers/repository/onboarding/branch/config.js
+++ b/lib/workers/repository/onboarding/branch/config.js
@@ -1,21 +1,22 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const { logger } = require('../../../../logger');
 
 const { appSlug } = require('../../../../config/app-strings');
 
 const clone = input => JSON.parse(JSON.stringify(input));
 
-module.exports = {
-  getOnboardingConfig,
-};
+export { getOnboardingConfig };
 
 async function getOnboardingConfig(config) {
   const onboardingConfig = clone(config.onboardingConfig);
   try {
     logger.debug('Checking for greenkeeper config');
 
-    const greenkeeperConfig = JSON.parse(await platform.getFile('package.json'))
-      .greenkeeper;
+    const greenkeeperConfig = JSON.parse(
+      // @ts-ignore
+      await platform.getFile('package.json')
+    ).greenkeeper;
     if (greenkeeperConfig) {
       onboardingConfig.statusCheckVerify = true;
     }
diff --git a/lib/workers/repository/onboarding/branch/index.js b/lib/workers/repository/onboarding/branch/index.js
index 1b0707422b..905ae8ab98 100644
--- a/lib/workers/repository/onboarding/branch/index.js
+++ b/lib/workers/repository/onboarding/branch/index.js
@@ -17,7 +17,7 @@ async function checkOnboardingBranch(config) {
     throw new Error('fork');
   }
   logger.info('Repo is not onboarded');
-  if (await onboardingPrExists(config)) {
+  if (await onboardingPrExists()) {
     logger.debug('Onboarding PR already exists');
     await rebaseOnboardingBranch(config);
   } else {
diff --git a/lib/workers/repository/onboarding/pr/index.js b/lib/workers/repository/onboarding/pr/index.js
index d8aad93309..ade8d8edcd 100644
--- a/lib/workers/repository/onboarding/pr/index.js
+++ b/lib/workers/repository/onboarding/pr/index.js
@@ -1,4 +1,5 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const { logger } = require('../../../../logger');
 const { getConfigDesc } = require('./config-description');
 const { getErrors, getWarnings, getDepWarnings } = require('./errors-warnings');
@@ -136,6 +137,4 @@ If you need any further assistance then you can also [request help here](${urls.
   }
 }
 
-module.exports = {
-  ensureOnboardingPr,
-};
+export { ensureOnboardingPr };
diff --git a/lib/workers/repository/process/fetch.js b/lib/workers/repository/process/fetch.js
index ca48317129..a503162027 100644
--- a/lib/workers/repository/process/fetch.js
+++ b/lib/workers/repository/process/fetch.js
@@ -1,4 +1,5 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const pAll = require('p-all');
 const { logger } = require('../../../logger');
 
@@ -8,9 +9,7 @@ const { applyPackageRules } = require('../../../util/package-rules');
 const { getManagerConfig } = require('../../../config');
 const { lookupUpdates } = require('./lookup');
 
-module.exports = {
-  fetchUpdates,
-};
+export { fetchUpdates };
 
 async function fetchDepUpdates(packageFileConfig, dep) {
   /* eslint-disable no-param-reassign */
diff --git a/lib/workers/repository/process/lookup/filter.js b/lib/workers/repository/process/lookup/filter.js
index 6cd3a42d9c..a5d3a5a68d 100644
--- a/lib/workers/repository/process/lookup/filter.js
+++ b/lib/workers/repository/process/lookup/filter.js
@@ -66,7 +66,11 @@ function filterVersions(
         'Falling back to npm semver syntax for allowedVersions'
       );
       filteredVersions = filteredVersions.filter(version =>
-        semver.satisfies(semver.coerce(version), allowedVersions)
+        semver.satisfies(
+          // @ts-ignore
+          semver.coerce(version),
+          allowedVersions
+        )
       );
     } else {
       logger.warn(
diff --git a/lib/workers/repository/process/lookup/index.js b/lib/workers/repository/process/lookup/index.js
index 64ddd9d669..5cce99116f 100644
--- a/lib/workers/repository/process/lookup/index.js
+++ b/lib/workers/repository/process/lookup/index.js
@@ -31,6 +31,7 @@ async function lookupUpdates(config) {
     getNewValue,
     valueToVersion,
   } = versioning.get(config.versionScheme);
+  /** @type any */
   const res = { updates: [], warnings: [] };
   if (isValid(currentValue)) {
     const dependency = clone(await getPkgReleases(config));
diff --git a/lib/workers/repository/process/write.js b/lib/workers/repository/process/write.js
index f72d032f74..5f24970a36 100644
--- a/lib/workers/repository/process/write.js
+++ b/lib/workers/repository/process/write.js
@@ -31,6 +31,7 @@ async function writeUpdates(config, packageFiles, allBranches) {
       packageFiles
     );
     branch.res = res;
+    // @ts-ignore
     if (res === 'pr-closed' || res === 'automerged') {
       // Stop procesing other branches because base branch has been changed
       return res;
diff --git a/lib/workers/repository/updates/branchify.js b/lib/workers/repository/updates/branchify.js
index 0f916163ec..ffbe9a4f90 100644
--- a/lib/workers/repository/updates/branchify.js
+++ b/lib/workers/repository/updates/branchify.js
@@ -1,5 +1,6 @@
+import slugify from 'slugify';
+
 const handlebars = require('handlebars');
-const slugify = require('slugify');
 const cleanGitRef = require('clean-git-ref').clean;
 const { logger, setMeta } = require('../../../logger');
 
@@ -132,6 +133,4 @@ function branchifyUpgrades(config, packageFiles) {
   };
 }
 
-module.exports = {
-  branchifyUpgrades,
-};
+export { branchifyUpgrades };
diff --git a/lib/workers/repository/updates/flatten.js b/lib/workers/repository/updates/flatten.js
index 3704d27834..94bc0e93b9 100644
--- a/lib/workers/repository/updates/flatten.js
+++ b/lib/workers/repository/updates/flatten.js
@@ -1,4 +1,5 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const {
   getManagerConfig,
   mergeChildConfig,
@@ -7,9 +8,7 @@ const {
 const { applyPackageRules } = require('../../../util/package-rules');
 const { get } = require('../../../manager');
 
-module.exports = {
-  flattenUpdates,
-};
+export { flattenUpdates };
 
 // Return only rules that contain an updateType
 function getUpdateTypeRules(packageRules) {
diff --git a/lib/workers/repository/updates/generate.js b/lib/workers/repository/updates/generate.js
index 794d7c2756..e7ad6acd47 100644
--- a/lib/workers/repository/updates/generate.js
+++ b/lib/workers/repository/updates/generate.js
@@ -21,6 +21,7 @@ function ifTypesGroup(depNames, hasGroupName, branchUpgrades) {
 function generateBranchConfig(branchUpgrades) {
   logger.debug(`generateBranchConfig(${branchUpgrades.length})`);
   logger.trace({ config: branchUpgrades });
+  /** @type any */
   let config = {
     upgrades: [],
   };
diff --git a/package.json b/package.json
index c74a7b49d7..43b9d1cfdf 100644
--- a/package.json
+++ b/package.json
@@ -7,9 +7,10 @@
     "renovate-config-validator": "bin/config-validator.js"
   },
   "scripts": {
-    "build": "yarn clean && tsc -p tsconfig.app.json && yarn copy-static-files",
+    "build": "run-s clean compile copy-static-files",
     "clean": "rimraf dist",
     "clean-cache": "node bin/clean-cache.js",
+    "compile": "tsc -p tsconfig.app.json",
     "copy-static-files": "copyfiles -u 1 lib/**/*.json lib/**/*.py dist/",
     "create-json-schema": "node bin/create-json-schema.js && prettier --write \"renovate-schema.json\"",
     "debug": "babel-node --inspect-brk  --extensions \".ts,.js\" -- lib/renovate.ts",
@@ -18,15 +19,16 @@
     "jest": "yarn clean-cache && cross-env NODE_ENV=test LOG_LEVEL=fatal jest",
     "jest-debug": "cross-env NODE_ENV=test LOG_LEVEL=fatal node --inspect-brk node_modules/jest/bin/jest.js",
     "jest-silent": "cross-env NODE_ENV=test yarn jest --reporters jest-silent-reporter",
-    "lint": "yarn eslint && yarn prettier",
-    "lint-fix": "yarn eslint-fix && yarn prettier-fix",
+    "lint": "run-s eslint prettier",
+    "lint-fix": "run-s eslint-fix prettier-fix",
     "prettier": "prettier --list-different \"**/*.{ts,js,json,md}\"",
     "prettier-fix": "prettier --write \"**/*.{ts,js,json,md}\"",
     "start": "babel-node --extensions \".ts,.js\" -- lib/renovate.ts",
     "test-dirty": "git diff --exit-code",
     "test-e2e": "npm pack && cd e2e && yarn install --no-lockfile && yarn test",
     "test-schema": "bash test/json-schema.sh",
-    "test": "yarn lint && yarn test-schema && yarn jest"
+    "test": "run-s lint test-schema type-check jest",
+    "type-check": "tsc --noEmit"
   },
   "repository": {
     "type": "git",
diff --git a/test/config/__snapshots__/validation.spec.js.snap b/test/config/__snapshots__/validation.spec.js.snap
index 7e555c2276..2865dfe627 100644
--- a/test/config/__snapshots__/validation.spec.js.snap
+++ b/test/config/__snapshots__/validation.spec.js.snap
@@ -86,7 +86,7 @@ Array [
   Object {
     "depName": "Configuration Error",
     "message": "packageRules:
-        You have included an unsupported manager in a package rule. Your list: foo. 
+        You have included an unsupported manager in a package rule. Your list: foo.
         Supported managers are: (ansible, bazel, buildkite, bundler, cargo, circleci, composer, deps-edn, docker-compose, dockerfile, github-actions, gitlabci, gitlabci-include, gomod, gradle, gradle-wrapper, kubernetes, leiningen, maven, meteor, npm, nuget, nvm, pip_requirements, pip_setup, pipenv, poetry, pub, sbt, swift, terraform, travis, ruby-version, homebrew).",
   },
 ]
diff --git a/test/config/cli.spec.js b/test/config/cli.spec.js
index ecc60376b5..5d329df90f 100644
--- a/test/config/cli.spec.js
+++ b/test/config/cli.spec.js
@@ -1,3 +1,4 @@
+/** @type any */
 const cli = require('../../lib/config/cli.js');
 const getArgv = require('./config/_fixtures/argv');
 
diff --git a/test/config/index.spec.js b/test/config/index.spec.js
index dd31c9919c..5b86396fa4 100644
--- a/test/config/index.spec.js
+++ b/test/config/index.spec.js
@@ -1,7 +1,9 @@
 const argv = require('./config/_fixtures/argv');
+/** @type any */
 const defaultConfig = require('../../lib/config/defaults').getConfig();
+/** @type any */
 const npm = require('../../lib/datasource/npm');
-const presetDefaults = require('./npm/_fixtures/renovate-config-default');
+const presetDefaults = require('./npm/_fixtures/renovate-config-default.json');
 
 npm.getPkgReleases = jest.fn(() => ({
   'renovate-config':
@@ -19,6 +21,7 @@ describe('config/index', () => {
       configParser = require('../../lib/config/index.js');
       defaultArgv = argv();
       jest.mock('delay');
+      // @ts-ignore
       require('delay').mockImplementation(() => Promise.resolve());
     });
     it('supports token in env', async () => {
diff --git a/test/config/presets.spec.js b/test/config/presets.spec.js
index 46fb26f49f..d26792c668 100644
--- a/test/config/presets.spec.js
+++ b/test/config/presets.spec.js
@@ -1,10 +1,10 @@
 const npm = require('../../lib/datasource/npm');
 const presets = require('../../lib/config/presets');
-const presetDefaults = require('./npm/_fixtures/renovate-config-default');
-const presetPackages = require('./npm/_fixtures/renovate-config-packages');
-const presetGroup = require('./npm/_fixtures/renovate-config-group');
-const presetMonorepo = require('./npm/_fixtures/renovate-config-monorepo');
-const presetIkatyang = require('./npm/_fixtures/renovate-config-ikatyang');
+const presetDefaults = require('./npm/_fixtures/renovate-config-default.json');
+const presetPackages = require('./npm/_fixtures/renovate-config-packages.json');
+const presetGroup = require('./npm/_fixtures/renovate-config-group.json');
+const presetMonorepo = require('./npm/_fixtures/renovate-config-monorepo.json');
+const presetIkatyang = require('./npm/_fixtures/renovate-config-ikatyang.json');
 
 npm.getPreset = jest.fn((dep, presetName) => {
   if (dep === 'renovate-config-default') {
diff --git a/test/datasource/docker.spec.js b/test/datasource/docker.spec.js
index 08fa8a62cc..e91566d11d 100644
--- a/test/datasource/docker.spec.js
+++ b/test/datasource/docker.spec.js
@@ -1,6 +1,7 @@
 const got = require('../../lib/util/got');
 const docker = require('../../lib/datasource/docker');
 const { getPkgReleases } = require('../../lib/datasource');
+/** @type any */
 const hostRules = require('../../lib/util/host-rules');
 
 jest.mock('../../lib/util/got');
diff --git a/test/datasource/git-tags.spec.js b/test/datasource/git-tags.spec.js
index 829875bf9b..9288c35b65 100644
--- a/test/datasource/git-tags.spec.js
+++ b/test/datasource/git-tags.spec.js
@@ -1,3 +1,4 @@
+/** @type any */
 const simpleGit = require('simple-git/promise');
 const { getPkgReleases } = require('../../lib/datasource/git-tags');
 
diff --git a/test/datasource/github.spec.js b/test/datasource/github.spec.js
index 6e4871fd91..aa72db11d1 100644
--- a/test/datasource/github.spec.js
+++ b/test/datasource/github.spec.js
@@ -1,4 +1,4 @@
-import ghGot from '../../lib/platform/github/gh-got-wrapper';
+import { api } from '../../lib/platform/github/gh-got-wrapper';
 
 const datasource = require('../../lib/datasource');
 const github = require('../../lib/datasource/github');
@@ -9,6 +9,9 @@ jest.mock('../../lib/platform/github/gh-got-wrapper');
 jest.mock('../../lib/util/got');
 jest.mock('../../lib/util/host-rules');
 
+/** @type any */
+const ghGot = api.get;
+
 describe('datasource/github', () => {
   beforeEach(() => global.renovateCache.rmAll());
   describe('getDigest', () => {
@@ -19,28 +22,19 @@ describe('datasource/github', () => {
     });
     it('returns null if no token', async () => {
       ghGot.mockReturnValueOnce({ body: [] });
-      const res = await github.getDigest(
-        { depName: 'some-dep', githubRepo: 'some/dep' },
-        null
-      );
+      const res = await github.getDigest({ lookupName: 'some/dep' }, null);
       expect(res).toBeNull();
     });
     it('returns digest', async () => {
       ghGot.mockReturnValueOnce({ body: [{ sha: 'abcdef' }] });
-      const res = await github.getDigest(
-        { depName: 'some-dep', lookupName: 'some/dep' },
-        null
-      );
+      const res = await github.getDigest({ lookupName: 'some/dep' }, null);
       expect(res).toBe('abcdef');
     });
     it('returns commit digest', async () => {
       ghGot.mockReturnValueOnce({
         body: { object: { type: 'commit', sha: 'ddd111' } },
       });
-      const res = await github.getDigest(
-        { depName: 'some-dep', lookupName: 'some/dep' },
-        'v1.2.0'
-      );
+      const res = await github.getDigest({ lookupName: 'some/dep' }, 'v1.2.0');
       expect(res).toBe('ddd111');
     });
     it('returns tagged commit digest', async () => {
@@ -50,28 +44,19 @@ describe('datasource/github', () => {
       ghGot.mockReturnValueOnce({
         body: { object: { type: 'commit', sha: 'ddd111' } },
       });
-      const res = await github.getDigest(
-        { depName: 'some-dep', lookupName: 'some/dep' },
-        'v1.2.0'
-      );
+      const res = await github.getDigest({ lookupName: 'some/dep' }, 'v1.2.0');
       expect(res).toBe('ddd111');
     });
     it('warns if unknown ref', async () => {
       ghGot.mockReturnValueOnce({
         body: { object: { sha: 'ddd111' } },
       });
-      const res = await github.getDigest(
-        { depName: 'some-dep', lookupName: 'some/dep' },
-        'v1.2.0'
-      );
+      const res = await github.getDigest({ lookupName: 'some/dep' }, 'v1.2.0');
       expect(res).toBeNull();
     });
     it('returns null for missed tagged digest', async () => {
       ghGot.mockReturnValueOnce({});
-      const res = await github.getDigest(
-        { depName: 'some-dep', lookupName: 'some/dep' },
-        'v1.2.0'
-      );
+      const res = await github.getDigest({ lookupName: 'some/dep' }, 'v1.2.0');
       expect(res).toBeNull();
     });
   });
@@ -97,6 +82,7 @@ describe('datasource/github', () => {
       await expect(github.getPreset('some/repo')).rejects.toThrow();
     });
     it('should return default.json', async () => {
+      // @ts-ignore
       hostRules.find.mockReturnValueOnce({ token: 'abc' });
       got.mockImplementationOnce(() => ({
         body: {
@@ -107,6 +93,7 @@ describe('datasource/github', () => {
       expect(content).toEqual({ foo: 'bar' });
     });
     it('should return custom.json', async () => {
+      // @ts-ignore
       hostRules.find.mockReturnValueOnce({ token: 'abc' });
       got.mockImplementationOnce(() => ({
         body: {
@@ -134,7 +121,7 @@ describe('datasource/github', () => {
       ghGot.mockReturnValueOnce({ headers: {}, body });
       const res = await datasource.getPkgReleases({
         datasource: 'github',
-        depName: 'some/dep',
+        lookupName: 'some/dep',
         lookupType: 'releases',
       });
       expect(res).toMatchSnapshot();
@@ -148,7 +135,7 @@ describe('datasource/github', () => {
       ghGot.mockReturnValueOnce({ headers: {}, body });
       const res = await datasource.getPkgReleases({
         datasource: 'github',
-        depName: 'some/dep2',
+        lookupName: 'some/dep2',
       });
       expect(res).toMatchSnapshot();
       expect(res.releases).toHaveLength(2);
diff --git a/test/datasource/gitlab.spec.js b/test/datasource/gitlab.spec.js
index 0734e45239..7b7c26dcf1 100644
--- a/test/datasource/gitlab.spec.js
+++ b/test/datasource/gitlab.spec.js
@@ -1,5 +1,6 @@
 const datasource = require('../../lib/datasource');
 const gitlab = require('../../lib/datasource/gitlab');
+/** @type any */
 const glGot = require('../../lib/platform/gitlab/gl-got-wrapper').api.get;
 
 jest.mock('../../lib/platform/gitlab/gl-got-wrapper');
diff --git a/test/datasource/go.spec.js b/test/datasource/go.spec.js
index 8684abaaa6..94795d7236 100644
--- a/test/datasource/go.spec.js
+++ b/test/datasource/go.spec.js
@@ -1,4 +1,5 @@
 const got = require('../../lib/util/got');
+/** @type any */
 const github = require('../../lib/datasource/github');
 const go = require('../../lib/datasource/go');
 
diff --git a/test/datasource/gradle-version.spec.js b/test/datasource/gradle-version.spec.js
index 35e927fb20..6719d097e6 100644
--- a/test/datasource/gradle-version.spec.js
+++ b/test/datasource/gradle-version.spec.js
@@ -4,6 +4,7 @@ const datasource = require('../../lib/datasource');
 
 jest.mock('../../lib/util/got');
 
+/** @type any */
 const allResponse = fs.readFileSync(
   'test/datasource/gradle-wrapper/_fixtures/all.json'
 );
diff --git a/test/datasource/hex.spec.js b/test/datasource/hex.spec.js
index 918c23197c..7559bb2604 100644
--- a/test/datasource/hex.spec.js
+++ b/test/datasource/hex.spec.js
@@ -1,5 +1,6 @@
 const fs = require('fs');
 const got = require('../../lib/util/got');
+/** @type any */
 const hostRules = require('../../lib/util/host-rules');
 const { getPkgReleases } = require('../../lib/datasource/hex');
 
@@ -49,7 +50,7 @@ describe('datasource/hex', () => {
       got.mockImplementationOnce(() => {
         throw new Error();
       });
-      expect(await getPkgReleases('some_package')).toBeNull();
+      expect(await getPkgReleases({ lookupName: 'some_package' })).toBeNull();
     });
     it('returns null with wrong auth token', async () => {
       hostRules.find.mockReturnValueOnce({ token: 'this_simple_token' });
diff --git a/test/datasource/index.spec.js b/test/datasource/index.spec.js
index 56d5e8b6ca..a3cf872d54 100644
--- a/test/datasource/index.spec.js
+++ b/test/datasource/index.spec.js
@@ -1,4 +1,5 @@
 const datasource = require('../../lib/datasource');
+/** @type any */
 const npmDatasource = require('../../lib/datasource/npm');
 
 jest.mock('../../lib/datasource/docker');
diff --git a/test/datasource/packagist.spec.js b/test/datasource/packagist.spec.js
index 57000b53ce..8fc2922b6b 100644
--- a/test/datasource/packagist.spec.js
+++ b/test/datasource/packagist.spec.js
@@ -6,12 +6,15 @@ const hostRules = require('../../lib/util/host-rules');
 jest.mock('../../lib/util/got');
 jest.mock('../../lib/util/host-rules');
 
+/** @type any */
 const includesJson = fs.readFileSync(
   'test/datasource/packagist/_fixtures/includes.json'
 );
+/** @type any */
 const beytJson = fs.readFileSync(
   'test/datasource/packagist/_fixtures/1beyt.json'
 );
+/** @type any */
 const mailchimpJson = fs.readFileSync(
   'test/datasource/packagist/_fixtures/mailchimp-api.json'
 );
diff --git a/test/datasource/pypi.spec.js b/test/datasource/pypi.spec.js
index 246037df0f..dbb8f1e664 100644
--- a/test/datasource/pypi.spec.js
+++ b/test/datasource/pypi.spec.js
@@ -4,6 +4,7 @@ const datasource = require('../../lib/datasource');
 
 jest.mock('../../lib/util/got');
 
+/** @type any */
 const res1 = fs.readFileSync(
   'test/datasource/pypi/_fixtures/azure-cli-monitor.json'
 );
diff --git a/test/datasource/rubygems/index.spec.js b/test/datasource/rubygems/index.spec.js
index cbe9db9f86..9e61afc139 100644
--- a/test/datasource/rubygems/index.spec.js
+++ b/test/datasource/rubygems/index.spec.js
@@ -34,7 +34,7 @@ describe('datasource/rubygems', () => {
     };
 
     beforeEach(() => {
-      process.env.RENOVATE_SKIP_CACHE = true;
+      process.env.RENOVATE_SKIP_CACHE = 'true';
       jest.resetAllMocks();
     });
 
diff --git a/test/datasource/rubygems/retriable.spec.js b/test/datasource/rubygems/retriable.spec.js
index c078415c40..27cc770a8f 100644
--- a/test/datasource/rubygems/retriable.spec.js
+++ b/test/datasource/rubygems/retriable.spec.js
@@ -4,7 +4,7 @@ describe('datasource/rubygems/retriable', () => {
   const { RENOVATE_RUBYGEMS_RETRY_DELAY_STEP } = process.env;
 
   beforeEach(() => {
-    process.env.RENOVATE_RUBYGEMS_RETRY_DELAY_STEP = 1;
+    process.env.RENOVATE_RUBYGEMS_RETRY_DELAY_STEP = '1';
   });
 
   it('returns 0 when numberOfRetries equals 0', () => {
diff --git a/test/datasource/terraform.spec.js b/test/datasource/terraform.spec.js
index 095f0ff704..247cd121b7 100644
--- a/test/datasource/terraform.spec.js
+++ b/test/datasource/terraform.spec.js
@@ -3,7 +3,7 @@ const got = require('../../lib/util/got');
 const datasource = require('../../lib/datasource');
 
 jest.mock('../../lib/util/got');
-
+/** @type any */
 const consulData = fs.readFileSync(
   'test/datasource/terraform/_fixtures/registry-consul.json'
 );
diff --git a/test/logger/err-serializer.spec.js b/test/logger/err-serializer.spec.js
index 03d9762e1b..e74c8b5f9b 100644
--- a/test/logger/err-serializer.spec.js
+++ b/test/logger/err-serializer.spec.js
@@ -1,4 +1,4 @@
-const configSerializer = require('../../lib/logger/err-serializer');
+import configSerializer from '../../lib/logger/err-serializer';
 
 describe('logger/err-serializer', () => {
   it('expands errors', () => {
diff --git a/test/manager/ansible/extract.spec.js b/test/manager/ansible/extract.spec.js
index 9662bff5b1..4683256ded 100644
--- a/test/manager/ansible/extract.spec.js
+++ b/test/manager/ansible/extract.spec.js
@@ -12,20 +12,16 @@ const yamlFile2 = fs.readFileSync(
 
 describe('lib/manager/ansible/extract', () => {
   describe('extractPackageFile()', () => {
-    let config;
-    beforeEach(() => {
-      config = {};
-    });
     it('returns null for empty', () => {
-      expect(extractPackageFile('nothing here', config)).toBeNull();
+      expect(extractPackageFile('nothing here')).toBeNull();
     });
     it('extracts multiple image lines from docker_container', () => {
-      const res = extractPackageFile(yamlFile1, config);
+      const res = extractPackageFile(yamlFile1);
       expect(res.deps).toMatchSnapshot();
       expect(res.deps).toHaveLength(9);
     });
     it('extracts multiple image lines from docker_service', () => {
-      const res = extractPackageFile(yamlFile2, config);
+      const res = extractPackageFile(yamlFile2);
       expect(res.deps).toMatchSnapshot();
       expect(res.deps).toHaveLength(4);
     });
diff --git a/test/manager/bazel/extract.spec.js b/test/manager/bazel/extract.spec.js
index 9cc45b860e..8d529f1222 100644
--- a/test/manager/bazel/extract.spec.js
+++ b/test/manager/bazel/extract.spec.js
@@ -13,24 +13,20 @@ const fileWithBzlExtension = fs.readFileSync(
 
 describe('lib/manager/bazel/extract', () => {
   describe('extractPackageFile()', () => {
-    let config;
-    beforeEach(() => {
-      config = {};
-    });
     it('returns empty if fails to parse', () => {
-      const res = extractPackageFile('blahhhhh:foo:@what\n', config);
+      const res = extractPackageFile('blahhhhh:foo:@what\n');
       expect(res).toBeNull();
     });
     it('returns empty if cannot parse dependency', () => {
-      const res = extractPackageFile('git_repository(\n  nothing\n)\n', config);
+      const res = extractPackageFile('git_repository(\n  nothing\n)\n');
       expect(res).toBeNull();
     });
     it('extracts multiple types of dependencies', () => {
-      const res = extractPackageFile(workspaceFile, config);
+      const res = extractPackageFile(workspaceFile);
       expect(res.deps).toMatchSnapshot();
     });
     it('extracts dependencies from *.bzl files', () => {
-      const res = extractPackageFile(fileWithBzlExtension, config);
+      const res = extractPackageFile(fileWithBzlExtension);
       expect(res.deps).toMatchSnapshot();
     });
 
@@ -44,8 +40,7 @@ describe('lib/manager/bazel/extract', () => {
           # v1.0.0-alpha31.cli-migrations 11/28
           digest="sha256:a4e8d8c444ca04fe706649e82263c9f4c2a4229bc30d2a64561b5e1d20cc8548",
           tag="v1.0.0-alpha31.cli-migrations"
-        )`,
-        config
+        )`
       );
       expect(res.deps).toMatchSnapshot();
     });
@@ -59,8 +54,7 @@ go_repository(
   remote = "https://github.com/test/uuid-fork",
   commit = "dec09d789f3dba190787f8b4454c7d3c936fed9e"
 )
-        `,
-        config
+        `
       );
       expect(successStory.deps[0].datasource).toBe('go');
       expect(successStory.deps[0].lookupName).toBe('github.com/test/uuid-fork');
@@ -73,8 +67,7 @@ go_repository(
   remote = "https://github.com/test/uuid.git#branch",
   commit = "dec09d789f3dba190787f8b4454c7d3c936fed9e"
 )
-        `,
-        config
+        `
       );
       expect(badStory.deps[0].skipReason).toBe('unsupported-remote');
 
@@ -86,8 +79,7 @@ go_repository(
   remote = "https://github.mycompany.com/test/uuid",
   commit = "dec09d789f3dba190787f8b4454c7d3c936fed9e"
 )
-        `,
-        config
+        `
       );
       expect(gheStory.deps[0].skipReason).toBe('unsupported-remote');
 
@@ -99,8 +91,7 @@ go_repository(
   remote = "https://gitlab.com/test/uuid",
   commit = "dec09d789f3dba190787f8b4454c7d3c936fed9e"
 )
-        `,
-        config
+        `
       );
       expect(gitlabRemote.deps[0].skipReason).toBe('unsupported-remote');
     });
diff --git a/test/manager/bazel/update.spec.js b/test/manager/bazel/update.spec.js
index 6729d866a6..d2719ef580 100644
--- a/test/manager/bazel/update.spec.js
+++ b/test/manager/bazel/update.spec.js
@@ -1,4 +1,5 @@
 const fs = require('fs');
+/** @type any */
 const hasha = require('hasha');
 const path = require('path');
 const bazelfile = require('../../../lib/manager/bazel/update');
diff --git a/test/manager/buildkite/extract.spec.js b/test/manager/buildkite/extract.spec.js
index 50c00bd43a..0a06072b78 100644
--- a/test/manager/buildkite/extract.spec.js
+++ b/test/manager/buildkite/extract.spec.js
@@ -22,30 +22,26 @@ const pipeline4 = fs.readFileSync(
 
 describe('lib/manager/buildkite/extract', () => {
   describe('extractPackageFile()', () => {
-    let config;
-    beforeEach(() => {
-      config = {};
-    });
     it('returns null for empty', () => {
-      expect(extractPackageFile('nothing here', config)).toBeNull();
+      expect(extractPackageFile('nothing here')).toBeNull();
     });
     it('extracts simple single plugin', () => {
-      const res = extractPackageFile(pipeline1, config).deps;
+      const res = extractPackageFile(pipeline1).deps;
       expect(res).toMatchSnapshot();
       expect(res).toHaveLength(1);
     });
     it('extracts multiple plugins in same file', () => {
-      const res = extractPackageFile(pipeline2, config).deps;
+      const res = extractPackageFile(pipeline2).deps;
       expect(res).toMatchSnapshot();
       expect(res).toHaveLength(2);
     });
     it('adds skipReason', () => {
-      const res = extractPackageFile(pipeline3, config).deps;
+      const res = extractPackageFile(pipeline3).deps;
       expect(res).toMatchSnapshot();
       expect(res).toHaveLength(3);
     });
     it('extracts arrays of plugins', () => {
-      const res = extractPackageFile(pipeline4, config).deps;
+      const res = extractPackageFile(pipeline4).deps;
       expect(res).toMatchSnapshot();
       expect(res).toHaveLength(2); // TODO: should be 4
     });
diff --git a/test/manager/bundler/extract.spec.js b/test/manager/bundler/extract.spec.js
index 3007eef13a..220c6fcb02 100644
--- a/test/manager/bundler/extract.spec.js
+++ b/test/manager/bundler/extract.spec.js
@@ -1,6 +1,9 @@
 const fs = require('fs');
 const { extractPackageFile } = require('../../../lib/manager/bundler/extract');
 
+/** @type any */
+const platform = global.platform;
+
 const railsGemfile = fs.readFileSync(
   'test/manager/bundler/_fixtures/Gemfile.rails',
   'utf8'
diff --git a/test/manager/bundler/range.spec.js b/test/manager/bundler/range.spec.js
index 9885a7d23f..2b69f36a7e 100644
--- a/test/manager/bundler/range.spec.js
+++ b/test/manager/bundler/range.spec.js
@@ -2,12 +2,8 @@ const { getRangeStrategy } = require('../../../lib/manager/bundler');
 
 describe('lib/manager/bundler/range', () => {
   describe('getRangeStrategy()', () => {
-    let config;
-    beforeEach(() => {
-      config = {};
-    });
     it('always returns replace', () => {
-      expect(getRangeStrategy(config)).toEqual('replace');
+      expect(getRangeStrategy()).toEqual('replace');
     });
   });
 });
diff --git a/test/manager/cargo/artifacts.spec.js b/test/manager/cargo/artifacts.spec.js
index ad8e1728b8..c6e7ce4472 100644
--- a/test/manager/cargo/artifacts.spec.js
+++ b/test/manager/cargo/artifacts.spec.js
@@ -1,10 +1,14 @@
 jest.mock('fs-extra');
 jest.mock('child-process-promise');
 
+/** @type any */
 const fs = require('fs-extra');
 const { exec } = require('child-process-promise');
 const cargo = require('../../../lib/manager/cargo/artifacts');
 
+/** @type any */
+const platform = global.platform;
+
 const config = {
   localDir: '/tmp/github/some/repo',
 };
diff --git a/test/manager/circleci/extract.spec.js b/test/manager/circleci/extract.spec.js
index 5d327ca049..92a66b5784 100644
--- a/test/manager/circleci/extract.spec.js
+++ b/test/manager/circleci/extract.spec.js
@@ -12,20 +12,16 @@ const file2 = fs.readFileSync(
 
 describe('lib/manager/circleci/extract', () => {
   describe('extractPackageFile()', () => {
-    let config;
-    beforeEach(() => {
-      config = {};
-    });
     it('returns null for empty', () => {
-      expect(extractPackageFile('nothing here', config)).toBeNull();
+      expect(extractPackageFile('nothing here')).toBeNull();
     });
     it('extracts multiple image lines', () => {
-      const res = extractPackageFile(file1, config);
+      const res = extractPackageFile(file1);
       expect(res.deps).toMatchSnapshot();
       expect(res.deps).toHaveLength(4);
     });
     it('extracts orbs too', () => {
-      const res = extractPackageFile(file2, config);
+      const res = extractPackageFile(file2);
       expect(res.deps).toMatchSnapshot();
       // expect(res.deps).toHaveLength(4);
     });
diff --git a/test/manager/composer/artifacts.spec.js b/test/manager/composer/artifacts.spec.js
index 5fbc84598f..a3e8a41936 100644
--- a/test/manager/composer/artifacts.spec.js
+++ b/test/manager/composer/artifacts.spec.js
@@ -2,11 +2,16 @@ jest.mock('fs-extra');
 jest.mock('child-process-promise');
 jest.mock('../../../lib/util/host-rules');
 
+/** @type any */
 const fs = require('fs-extra');
 const { exec } = require('child-process-promise');
 const composer = require('../../../lib/manager/composer/artifacts');
+/** @type any */
 const hostRules = require('../../../lib/util/host-rules');
 
+/** @type any */
+const platform = global.platform;
+
 const config = {
   localDir: '/tmp/github/some/repo',
   cacheDir: '/tmp/renovate/cache',
diff --git a/test/manager/composer/extract.spec.js b/test/manager/composer/extract.spec.js
index 2a59097ca9..e8420dac96 100644
--- a/test/manager/composer/extract.spec.js
+++ b/test/manager/composer/extract.spec.js
@@ -1,6 +1,9 @@
 const fs = require('fs');
 const { extractPackageFile } = require('../../../lib/manager/composer/extract');
 
+/** @type any */
+const platform = global.platform;
+
 const requirements1 = fs.readFileSync(
   'test/manager/composer/_fixtures/composer1.json',
   'utf8'
diff --git a/test/manager/deps-edn/extract.spec.js b/test/manager/deps-edn/extract.spec.js
index def76847f6..e5b1856ddb 100644
--- a/test/manager/deps-edn/extract.spec.js
+++ b/test/manager/deps-edn/extract.spec.js
@@ -10,6 +10,6 @@ const depsEdn = fs.readFileSync(
 
 describe('manager/deps-edn/extract', () => {
   it('extractPackageFile', () => {
-    expect(extractPackageFile(depsEdn, 'deps.edn')).toMatchSnapshot();
+    expect(extractPackageFile(depsEdn)).toMatchSnapshot();
   });
 });
diff --git a/test/manager/deps-edn/update.spec.js b/test/manager/deps-edn/update.spec.js
index 0e45c0f790..61ac28a57b 100644
--- a/test/manager/deps-edn/update.spec.js
+++ b/test/manager/deps-edn/update.spec.js
@@ -11,7 +11,7 @@ const depsEdn = fs.readFileSync(
 
 describe('manager/deps-edn/update', () => {
   it('updateDependency', () => {
-    const { deps } = extractPackageFile(depsEdn, 'deps.edn');
+    const { deps } = extractPackageFile(depsEdn);
     const dep = deps.pop();
     const upgrade = {
       ...dep,
diff --git a/test/manager/docker-compose/extract.spec.js b/test/manager/docker-compose/extract.spec.js
index c36878c1af..51bf755eca 100644
--- a/test/manager/docker-compose/extract.spec.js
+++ b/test/manager/docker-compose/extract.spec.js
@@ -10,15 +10,11 @@ const yamlFile = fs.readFileSync(
 
 describe('lib/manager/docker-compose/extract', () => {
   describe('extractPackageFile()', () => {
-    let config;
-    beforeEach(() => {
-      config = {};
-    });
     it('returns null for empty', () => {
-      expect(extractPackageFile('nothing here', config)).toBeNull();
+      expect(extractPackageFile('nothing here')).toBeNull();
     });
     it('extracts multiple image lines', () => {
-      const res = extractPackageFile(yamlFile, config);
+      const res = extractPackageFile(yamlFile);
       expect(res.deps).toMatchSnapshot();
       expect(res.deps).toHaveLength(8);
     });
diff --git a/test/manager/dockerfile/extract.spec.js b/test/manager/dockerfile/extract.spec.js
index 5033414b69..19dec3b0fa 100644
--- a/test/manager/dockerfile/extract.spec.js
+++ b/test/manager/dockerfile/extract.spec.js
@@ -10,70 +10,57 @@ const d1 = fs.readFileSync(
 
 describe('lib/manager/dockerfile/extract', () => {
   describe('extractPackageFile()', () => {
-    let config;
-    beforeEach(() => {
-      config = {};
-    });
     it('handles no FROM', () => {
-      const res = extractPackageFile('no from!', config);
+      const res = extractPackageFile('no from!');
       expect(res).toBeNull();
     });
     it('handles naked dep', () => {
-      const res = extractPackageFile('FROM node\n', config).deps;
+      const res = extractPackageFile('FROM node\n').deps;
       expect(res).toMatchSnapshot();
     });
     it('is case insensitive', () => {
-      const res = extractPackageFile('From node\n', config).deps;
+      const res = extractPackageFile('From node\n').deps;
       expect(res).toMatchSnapshot();
     });
     it('handles tag', () => {
-      const res = extractPackageFile('FROM node:8.9.0-alpine\n', config).deps;
+      const res = extractPackageFile('FROM node:8.9.0-alpine\n').deps;
       expect(res).toMatchSnapshot();
     });
     it('handles digest', () => {
       const res = extractPackageFile(
-        'FROM node@sha256:eb85fc5b1198f5e1ec025ea07586bdbbf397e7d82df66c90d7511f533517e063\n',
-        config
+        'FROM node@sha256:eb85fc5b1198f5e1ec025ea07586bdbbf397e7d82df66c90d7511f533517e063\n'
       ).deps;
       expect(res).toMatchSnapshot();
     });
     it('handles tag and digest', () => {
       const res = extractPackageFile(
-        'FROM node:8.9.0@sha256:eb85fc5b1198f5e1ec025ea07586bdbbf397e7d82df66c90d7511f533517e063\n',
-        config
+        'FROM node:8.9.0@sha256:eb85fc5b1198f5e1ec025ea07586bdbbf397e7d82df66c90d7511f533517e063\n'
       ).deps;
       expect(res).toMatchSnapshot();
     });
     it('handles from as', () => {
-      const res = extractPackageFile('FROM node:8.9.0-alpine as base\n', config)
-        .deps;
+      const res = extractPackageFile('FROM node:8.9.0-alpine as base\n').deps;
       expect(res).toMatchSnapshot();
     });
     it('handles comments', () => {
-      const res = extractPackageFile(
-        '# some comment\n# another\n\nFROM node\n',
-        config
-      ).deps;
+      const res = extractPackageFile('# some comment\n# another\n\nFROM node\n')
+        .deps;
       expect(res).toMatchSnapshot();
     });
     it('handles custom hosts', () => {
-      const res = extractPackageFile(
-        'FROM registry2.something.info/node:8\n',
-        config
-      ).deps;
+      const res = extractPackageFile('FROM registry2.something.info/node:8\n')
+        .deps;
       expect(res).toMatchSnapshot();
     });
     it('handles custom hosts and suffix', () => {
       const res = extractPackageFile(
-        'FROM registry2.something.info/node:8-alpine\n',
-        config
+        'FROM registry2.something.info/node:8-alpine\n'
       ).deps;
       expect(res).toMatchSnapshot();
     });
     it('handles custom hosts with port', () => {
       const res = extractPackageFile(
-        'FROM registry2.something.info:5005/node:8\n',
-        config
+        'FROM registry2.something.info:5005/node:8\n'
       ).deps;
       expect(res).toMatchSnapshot();
       expect(res[0].depName).toEqual('registry2.something.info:5005/node');
@@ -81,20 +68,18 @@ describe('lib/manager/dockerfile/extract', () => {
     });
     it('handles custom hosts with port without tag', () => {
       const res = extractPackageFile(
-        'FROM registry2.something.info:5005/node\n',
-        config
+        'FROM registry2.something.info:5005/node\n'
       ).deps;
       expect(res).toMatchSnapshot();
       expect(res[0].depName).toEqual('registry2.something.info:5005/node');
     });
     it('handles namespaced images', () => {
-      const res = extractPackageFile('FROM mynamespace/node:8\n', config).deps;
+      const res = extractPackageFile('FROM mynamespace/node:8\n').deps;
       expect(res).toMatchSnapshot();
     });
     it('handles custom hosts with namespace', () => {
       const res = extractPackageFile(
-        'FROM registry2.something.info/someaccount/node:8\n',
-        config
+        'FROM registry2.something.info/someaccount/node:8\n'
       ).deps;
       expect(res).toMatchSnapshot();
     });
@@ -106,51 +91,45 @@ describe('lib/manager/dockerfile/extract', () => {
     });
     it('extracts multiple FROM tags', () => {
       const res = extractPackageFile(
-        'FROM node:6.12.3 as frontend\n\n# comment\nENV foo=bar\nFROM python:3.6-slim\n',
-        config
+        'FROM node:6.12.3 as frontend\n\n# comment\nENV foo=bar\nFROM python:3.6-slim\n'
       ).deps;
       expect(res).toMatchSnapshot();
       expect(res).toHaveLength(2);
     });
     it('skips scratchs', () => {
-      const res = extractPackageFile('FROM scratch\nADD foo\n', config);
+      const res = extractPackageFile('FROM scratch\nADD foo\n');
       expect(res).toBeNull();
     });
     it('skips named multistage FROM tags', () => {
       const res = extractPackageFile(
-        'FROM node:6.12.3 as frontend\n\n# comment\nENV foo=bar\nFROM frontend\n',
-        config
+        'FROM node:6.12.3 as frontend\n\n# comment\nENV foo=bar\nFROM frontend\n'
       ).deps;
       expect(res).toMatchSnapshot();
       expect(res).toHaveLength(1);
     });
     it('handles COPY --from', () => {
       const res = extractPackageFile(
-        'FROM scratch\nCOPY --from=gcr.io/k8s-skaffold/skaffold:v0.11.0 /usr/bin/skaffold /usr/bin/skaffold\n',
-        config
+        'FROM scratch\nCOPY --from=gcr.io/k8s-skaffold/skaffold:v0.11.0 /usr/bin/skaffold /usr/bin/skaffold\n'
       ).deps;
       expect(res).toMatchSnapshot();
     });
     it('skips named multistage COPY --from tags', () => {
       const res = extractPackageFile(
-        'FROM node:6.12.3 as frontend\n\n# comment\nENV foo=bar\nCOPY --from=frontend /usr/bin/node /usr/bin/node\n',
-        config
+        'FROM node:6.12.3 as frontend\n\n# comment\nENV foo=bar\nCOPY --from=frontend /usr/bin/node /usr/bin/node\n'
       ).deps;
       expect(res).toMatchSnapshot();
       expect(res).toHaveLength(1);
     });
     it('skips index reference COPY --from tags', () => {
       const res = extractPackageFile(
-        'FROM node:6.12.3 as frontend\n\n# comment\nENV foo=bar\nCOPY --from=0 /usr/bin/node /usr/bin/node\n',
-        config
+        'FROM node:6.12.3 as frontend\n\n# comment\nENV foo=bar\nCOPY --from=0 /usr/bin/node /usr/bin/node\n'
       ).deps;
       expect(res).toMatchSnapshot();
       expect(res).toHaveLength(1);
     });
     it('detects ["stage"] and ["final"] deps of docker multi-stage build.', () => {
       const res = extractPackageFile(
-        'FROM node:8.15.1-alpine as skippedfrom\nFROM golang:1.7.3 as builder\n\n# comment\nWORKDIR /go/src/github.com/alexellis/href-counter/\nRUN go get -d -v golang.org/x/net/html  \nCOPY app.go    .\nRUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .\n\nFROM alpine:latest  \nRUN apk --no-cache add ca-certificates\nWORKDIR /root/\nCOPY --from=builder /go/src/github.com/alexellis/href-counter/app .\nCMD ["./app"]\n',
-        config
+        'FROM node:8.15.1-alpine as skippedfrom\nFROM golang:1.7.3 as builder\n\n# comment\nWORKDIR /go/src/github.com/alexellis/href-counter/\nRUN go get -d -v golang.org/x/net/html  \nCOPY app.go    .\nRUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .\n\nFROM alpine:latest  \nRUN apk --no-cache add ca-certificates\nWORKDIR /root/\nCOPY --from=builder /go/src/github.com/alexellis/href-counter/app .\nCMD ["./app"]\n'
       ).deps;
       expect(res).toMatchSnapshot();
       const passed = [
@@ -163,12 +142,12 @@ describe('lib/manager/dockerfile/extract', () => {
       expect(passed).toBe(true);
     });
     it('extracts images on adjacent lines', () => {
-      const res = extractPackageFile(d1, config).deps;
+      const res = extractPackageFile(d1).deps;
       expect(res).toMatchSnapshot();
       expect(res).toHaveLength(2);
     });
     it('handles calico/node', () => {
-      const res = extractPackageFile('FROM calico/node\n', config).deps;
+      const res = extractPackageFile('FROM calico/node\n').deps;
       expect(res).toMatchSnapshot();
     });
   });
diff --git a/test/manager/github-actions/extract.spec.js b/test/manager/github-actions/extract.spec.js
index 5924fe185b..c5fa9d75fd 100644
--- a/test/manager/github-actions/extract.spec.js
+++ b/test/manager/github-actions/extract.spec.js
@@ -10,15 +10,11 @@ const workflow1 = fs.readFileSync(
 
 describe('lib/manager/github-actions/extract', () => {
   describe('extractPackageFile()', () => {
-    let config;
-    beforeEach(() => {
-      config = {};
-    });
     it('returns null for empty', () => {
-      expect(extractPackageFile('nothing here', config)).toBeNull();
+      expect(extractPackageFile('nothing here')).toBeNull();
     });
     it('extracts multiple image lines from docker_container', () => {
-      const res = extractPackageFile(workflow1, config);
+      const res = extractPackageFile(workflow1);
       expect(res.deps).toMatchSnapshot();
       expect(res.deps).toHaveLength(2);
     });
diff --git a/test/manager/gitlabci/extract.spec.js b/test/manager/gitlabci/extract.spec.js
index 7106a85614..b86f618fce 100644
--- a/test/manager/gitlabci/extract.spec.js
+++ b/test/manager/gitlabci/extract.spec.js
@@ -8,15 +8,11 @@ const yamlFile = fs.readFileSync(
 
 describe('lib/manager/gitlabci/extract', () => {
   describe('extractPackageFile()', () => {
-    let config;
-    beforeEach(() => {
-      config = {};
-    });
     it('returns null for empty', () => {
-      expect(extractPackageFile('nothing here', config)).toBeNull();
+      expect(extractPackageFile('nothing here')).toBeNull();
     });
     it('extracts multiple image lines', () => {
-      const res = extractPackageFile(yamlFile, config);
+      const res = extractPackageFile(yamlFile);
       expect(res.deps).toMatchSnapshot();
       expect(res.deps).toHaveLength(6);
     });
diff --git a/test/manager/gomod/artifacts.spec.js b/test/manager/gomod/artifacts.spec.js
index 35115d7eb5..5123aa5593 100644
--- a/test/manager/gomod/artifacts.spec.js
+++ b/test/manager/gomod/artifacts.spec.js
@@ -2,11 +2,16 @@ jest.mock('fs-extra');
 jest.mock('child-process-promise');
 jest.mock('../../../lib/util/host-rules');
 
+/** @type any */
 const fs = require('fs-extra');
 const { exec } = require('child-process-promise');
 const gomod = require('../../../lib/manager/gomod/artifacts');
+/** @type any */
 const hostRules = require('../../../lib/util/host-rules');
 
+/** @type any */
+const platform = global.platform;
+
 const gomod1 = `module github.com/renovate-tests/gomod1
 
 require github.com/pkg/errors v0.7.0
diff --git a/test/manager/gomod/extract.spec.js b/test/manager/gomod/extract.spec.js
index 5cf42852e4..c4e47b93cd 100644
--- a/test/manager/gomod/extract.spec.js
+++ b/test/manager/gomod/extract.spec.js
@@ -6,21 +6,17 @@ const gomod2 = fs.readFileSync('test/manager/gomod/_fixtures/2/go.mod', 'utf8');
 
 describe('lib/manager/gomod/extract', () => {
   describe('extractPackageFile()', () => {
-    let config;
-    beforeEach(() => {
-      config = {};
-    });
     it('returns null for empty', () => {
-      expect(extractPackageFile('nothing here', config)).toBeNull();
+      expect(extractPackageFile('nothing here')).toBeNull();
     });
     it('extracts single-line requires', () => {
-      const res = extractPackageFile(gomod1, config).deps;
+      const res = extractPackageFile(gomod1).deps;
       expect(res).toMatchSnapshot();
       expect(res).toHaveLength(7);
       expect(res.filter(e => e.skipReason)).toHaveLength(1);
     });
     it('extracts multi-line requires', () => {
-      const res = extractPackageFile(gomod2, config).deps;
+      const res = extractPackageFile(gomod2).deps;
       expect(res).toMatchSnapshot();
       expect(res).toHaveLength(58);
       expect(res.filter(e => e.skipReason)).toHaveLength(0);
diff --git a/test/manager/gradle-wrapper/extract.spec.js b/test/manager/gradle-wrapper/extract.spec.js
index 2674def6b4..08a4af42b2 100644
--- a/test/manager/gradle-wrapper/extract.spec.js
+++ b/test/manager/gradle-wrapper/extract.spec.js
@@ -14,23 +14,17 @@ const propertiesFile2 = fs.readFileSync(
 
 describe('lib/manager/gradle-wrapper/extract', () => {
   describe('extractPackageFile()', () => {
-    let config;
-
-    beforeEach(() => {
-      config = {};
-    });
-
     it('returns null for empty', () => {
-      expect(extractPackageFile('nothing here', config)).toBeNull();
+      expect(extractPackageFile('nothing here')).toBeNull();
     });
 
     it('extracts bin version line', () => {
-      const res = extractPackageFile(propertiesFile1, config);
+      const res = extractPackageFile(propertiesFile1);
       expect(res.deps).toMatchSnapshot();
     });
 
     it('extracts all version line', () => {
-      const res = extractPackageFile(propertiesFile2, config);
+      const res = extractPackageFile(propertiesFile2);
       expect(res.deps).toMatchSnapshot();
     });
   });
diff --git a/test/manager/gradle/index.spec.js b/test/manager/gradle/index.spec.js
index 6575cb2e48..bde2e7ad59 100644
--- a/test/manager/gradle/index.spec.js
+++ b/test/manager/gradle/index.spec.js
@@ -2,12 +2,16 @@ jest.mock('fs-extra');
 jest.mock('child-process-promise');
 
 const { toUnix } = require('upath');
+/** @type any */
 const fs = require('fs-extra');
 const fsReal = require('fs');
 const { exec } = require('child-process-promise');
 
 const manager = require('../../../lib/manager/gradle/index');
 
+/** @type any */
+const platform = global.platform;
+
 const config = {
   localDir: 'localDir',
   gradle: {
diff --git a/test/manager/kubernetes/extract.spec.js b/test/manager/kubernetes/extract.spec.js
index 238209381c..2a51d6ff42 100644
--- a/test/manager/kubernetes/extract.spec.js
+++ b/test/manager/kubernetes/extract.spec.js
@@ -25,27 +25,21 @@ const otherYamlFile = fs.readFileSync(
 
 describe('lib/manager/kubernetes/extract', () => {
   describe('extractPackageFile()', () => {
-    let config;
-    beforeEach(() => {
-      config = {
-        fileMatch: ['(^|/)[^/]*\\.yaml$'],
-      };
-    });
     it('returns null for empty', () => {
-      expect(extractPackageFile(kubernetesConfigMapFile, config)).toBeNull();
+      expect(extractPackageFile(kubernetesConfigMapFile)).toBeNull();
     });
     it('extracts multiple image lines', () => {
-      const res = extractPackageFile(kubernetesImagesFile, config);
+      const res = extractPackageFile(kubernetesImagesFile);
       expect(res.deps).toMatchSnapshot();
       expect(res.deps).toHaveLength(2);
     });
     it('extracts image line in a YAML array', () => {
-      const res = extractPackageFile(kubernetesArraySyntaxFile, config);
+      const res = extractPackageFile(kubernetesArraySyntaxFile);
       expect(res.deps).toMatchSnapshot();
       expect(res.deps).toHaveLength(1);
     });
     it('ignores non-Kubernetes YAML files', () => {
-      expect(extractPackageFile(otherYamlFile, config)).toBeNull();
+      expect(extractPackageFile(otherYamlFile)).toBeNull();
     });
   });
 });
diff --git a/test/manager/leiningen/extract.spec.js b/test/manager/leiningen/extract.spec.js
index 09e6ce7ae9..378f21f8e1 100644
--- a/test/manager/leiningen/extract.spec.js
+++ b/test/manager/leiningen/extract.spec.js
@@ -50,6 +50,6 @@ describe('manager/clojure/extract', () => {
     ]);
   });
   it('extractPackageFile', () => {
-    expect(extractPackageFile(leinProjectClj, 'project.clj')).toMatchSnapshot();
+    expect(extractPackageFile(leinProjectClj)).toMatchSnapshot();
   });
 });
diff --git a/test/manager/leiningen/update.spec.js b/test/manager/leiningen/update.spec.js
index 6106330a7e..ea9e752222 100644
--- a/test/manager/leiningen/update.spec.js
+++ b/test/manager/leiningen/update.spec.js
@@ -13,7 +13,7 @@ const leinProjectClj = fs.readFileSync(
 
 describe('manager/leiningen/update', () => {
   it('updatePackageFile', () => {
-    const { deps } = extractPackageFile(leinProjectClj, 'project.clj');
+    const { deps } = extractPackageFile(leinProjectClj);
     const dep = deps.pop();
     const upgrade = {
       ...dep,
diff --git a/test/manager/maven/index.spec.js b/test/manager/maven/index.spec.js
index a52c4251f7..366f507f83 100644
--- a/test/manager/maven/index.spec.js
+++ b/test/manager/maven/index.spec.js
@@ -8,6 +8,9 @@ const {
   updateDependency,
 } = require('../../../lib/manager/maven/index');
 
+/** @type any */
+const platform = global.platform;
+
 const pomContent = fs.readFileSync(
   'test/manager/maven/_fixtures/simple.pom.xml',
   'utf8'
diff --git a/test/manager/meteor/__snapshots__/update.spec.js.snap b/test/manager/meteor/__snapshots__/update.spec.js.snap
index ae350256a1..58abe7ace1 100644
--- a/test/manager/meteor/__snapshots__/update.spec.js.snap
+++ b/test/manager/meteor/__snapshots__/update.spec.js.snap
@@ -1,7 +1,8 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
 exports[`workers/branch/package-js .updateDependency(fileContent, depName, currentValue, newValue) handles alternative quotes and white space 1`] = `
-"Package.describe({
+"// @ts-nocheck
+Package.describe({
     \\"name\\": \\"steffo:meteor-accounts-saml\\",
     \\"summary\\": \\"SAML Login (SP) for Meteor. Works with OpenAM, OpenIDP and provides Single Logout.\\",
     \\"version\\": \\"0.0.1\\",
@@ -31,7 +32,8 @@ Npm.depends({
 `;
 
 exports[`workers/branch/package-js .updateDependency(fileContent, depName, currentValue, newValue) replaces a dependency value 1`] = `
-"Package.describe({
+"// @ts-nocheck
+Package.describe({
 	'name': 'steffo:meteor-accounts-saml',
 	'summary': 'SAML Login (SP) for Meteor. Works with OpenAM, OpenIDP and provides Single Logout.',
 	'version': '0.0.1',
diff --git a/test/manager/meteor/_fixtures/package-1.js b/test/manager/meteor/_fixtures/package-1.js
index 65f5015c78..7a447bad3e 100644
--- a/test/manager/meteor/_fixtures/package-1.js
+++ b/test/manager/meteor/_fixtures/package-1.js
@@ -1,3 +1,4 @@
+// @ts-nocheck
 Package.describe({
 	'name': 'steffo:meteor-accounts-saml',
 	'summary': 'SAML Login (SP) for Meteor. Works with OpenAM, OpenIDP and provides Single Logout.',
diff --git a/test/manager/meteor/_fixtures/package-2.js b/test/manager/meteor/_fixtures/package-2.js
index 182fa7c9a0..631ab31db1 100644
--- a/test/manager/meteor/_fixtures/package-2.js
+++ b/test/manager/meteor/_fixtures/package-2.js
@@ -1,3 +1,4 @@
+// @ts-nocheck
 Package.describe({
     "name": "steffo:meteor-accounts-saml",
     "summary": "SAML Login (SP) for Meteor. Works with OpenAM, OpenIDP and provides Single Logout.",
diff --git a/test/manager/meteor/extract.spec.js b/test/manager/meteor/extract.spec.js
index b866334788..2b26dbd2f8 100644
--- a/test/manager/meteor/extract.spec.js
+++ b/test/manager/meteor/extract.spec.js
@@ -13,16 +13,12 @@ const input01Content = readFixture('package-1.js');
 
 describe('lib/manager/meteor/extract', () => {
   describe('extractPackageFile()', () => {
-    let config;
-    beforeEach(() => {
-      config = {};
-    });
     it('returns empty if fails to parse', () => {
-      const res = extractPackageFile('blahhhhh:foo:@what\n', config);
+      const res = extractPackageFile('blahhhhh:foo:@what\n');
       expect(res).toBeNull();
     });
     it('returns results', () => {
-      const res = extractPackageFile(input01Content, config);
+      const res = extractPackageFile(input01Content);
       expect(res).toMatchSnapshot();
       expect(res.deps).toHaveLength(6);
     });
diff --git a/test/manager/npm/extract/index.spec.js b/test/manager/npm/extract/index.spec.js
index 37d263085e..8957543bb4 100644
--- a/test/manager/npm/extract/index.spec.js
+++ b/test/manager/npm/extract/index.spec.js
@@ -3,6 +3,9 @@ const path = require('path');
 const npmExtract = require('../../../../lib/manager/npm/extract');
 const defaultConfig = require('../../../../lib/config/defaults').getConfig();
 
+/** @type any */
+const platform = global.platform;
+
 function readFixture(fixture) {
   return fs.readFileSync(
     path.resolve(__dirname, `../_fixtures/${fixture}`),
diff --git a/test/manager/npm/extract/locked-versions.spec.js b/test/manager/npm/extract/locked-versions.spec.js
index d7fda6a91e..21401bf27d 100644
--- a/test/manager/npm/extract/locked-versions.spec.js
+++ b/test/manager/npm/extract/locked-versions.spec.js
@@ -2,7 +2,9 @@ const {
   getLockedVersions,
 } = require('../../../../lib/manager/npm/extract/locked-versions');
 
+/** @type any */
 const npm = require('../../../../lib/manager/npm/extract/npm');
+/** @type any */
 const yarn = require('../../../../lib/manager/npm/extract/yarn');
 
 jest.mock('../../../../lib/manager/npm/extract/npm');
diff --git a/test/manager/npm/extract/npm.spec.js b/test/manager/npm/extract/npm.spec.js
index afb2bafafa..f3127623cc 100644
--- a/test/manager/npm/extract/npm.spec.js
+++ b/test/manager/npm/extract/npm.spec.js
@@ -1,6 +1,9 @@
 const fs = require('fs');
 const { getNpmLock } = require('../../../../lib/manager/npm/extract/npm');
 
+/** @type any */
+const platform = global.platform;
+
 describe('manager/npm/extract/npm', () => {
   describe('.getNpmLock()', () => {
     it('returns empty if failed to parse', async () => {
diff --git a/test/manager/npm/extract/yarn.spec.js b/test/manager/npm/extract/yarn.spec.js
index 0328773ea0..6e6c844648 100644
--- a/test/manager/npm/extract/yarn.spec.js
+++ b/test/manager/npm/extract/yarn.spec.js
@@ -1,6 +1,9 @@
 const fs = require('fs');
 const { getYarnLock } = require('../../../../lib/manager/npm/extract/yarn');
 
+/** @type any */
+const platform = global.platform;
+
 describe('manager/npm/extract/yarn', () => {
   describe('.getYarnLock()', () => {
     it('returns empty if exception parsing', async () => {
diff --git a/test/manager/pipenv/artifacts.spec.js b/test/manager/pipenv/artifacts.spec.js
index 1abe4b5a3a..5b5756d015 100644
--- a/test/manager/pipenv/artifacts.spec.js
+++ b/test/manager/pipenv/artifacts.spec.js
@@ -2,10 +2,14 @@ jest.mock('fs-extra');
 jest.mock('child-process-promise');
 jest.mock('../../../lib/util/host-rules');
 
+/** @type any */
 const fs = require('fs-extra');
 const { exec } = require('child-process-promise');
 const pipenv = require('../../../lib/manager/pipenv/artifacts');
 
+/** @type any */
+const platform = global.platform;
+
 const config = {
   localDir: '/tmp/github/some/repo',
   cacheDir: '/tmp/renovate/cache',
diff --git a/test/manager/pipenv/extract.spec.js b/test/manager/pipenv/extract.spec.js
index 39416bdcda..eb95ac3238 100644
--- a/test/manager/pipenv/extract.spec.js
+++ b/test/manager/pipenv/extract.spec.js
@@ -24,57 +24,48 @@ const pipfile5 = fs.readFileSync(
 
 describe('lib/manager/pipenv/extract', () => {
   describe('extractPackageFile()', () => {
-    let config;
-    beforeEach(() => {
-      config = {};
-    });
     it('returns null for empty', () => {
-      expect(extractPackageFile('[packages]\r\n', config)).toBeNull();
+      expect(extractPackageFile('[packages]\r\n')).toBeNull();
     });
     it('returns null for invalid toml file', () => {
-      expect(extractPackageFile('nothing here', config)).toBeNull();
+      expect(extractPackageFile('nothing here')).toBeNull();
     });
     it('extracts dependencies', () => {
-      const res = extractPackageFile(pipfile1, config);
+      const res = extractPackageFile(pipfile1);
       expect(res).toMatchSnapshot();
       expect(res.deps).toHaveLength(6);
       expect(res.deps.filter(dep => !dep.skipReason)).toHaveLength(4);
     });
     it('marks packages with "extras" as skipReason === any-version', () => {
-      const res = extractPackageFile(pipfile3, {
-        extends: ['config:base'],
-        pipenv: { enabled: true },
-        pip_setup: { enabled: true },
-        labels: ['dependencies'],
-      });
+      const res = extractPackageFile(pipfile3);
       expect(res.deps.filter(r => !r.skipReason)).toHaveLength(0);
       expect(res.deps.filter(r => r.skipReason)).toHaveLength(6);
     });
     it('extracts multiple dependencies', () => {
-      const res = extractPackageFile(pipfile2, config);
+      const res = extractPackageFile(pipfile2);
       expect(res).toMatchSnapshot();
       expect(res.deps).toHaveLength(5);
     });
     it('ignores git dependencies', () => {
       const content =
         '[packages]\r\nflask = {git = "https://github.com/pallets/flask.git"}\r\nwerkzeug = ">=0.14"';
-      const res = extractPackageFile(content, config);
+      const res = extractPackageFile(content);
       expect(res.deps.filter(r => !r.skipReason)).toHaveLength(1);
     });
     it('ignores invalid package names', () => {
       const content = '[packages]\r\nfoo = "==1.0.0"\r\n_invalid = "==1.0.0"';
-      const res = extractPackageFile(content, config);
+      const res = extractPackageFile(content);
       expect(res.deps).toHaveLength(2);
       expect(res.deps.filter(dep => !dep.skipReason)).toHaveLength(1);
     });
     it('ignores relative path dependencies', () => {
       const content = '[packages]\r\nfoo = "==1.0.0"\r\ntest = {path = "."}';
-      const res = extractPackageFile(content, config);
+      const res = extractPackageFile(content);
       expect(res.deps.filter(r => !r.skipReason)).toHaveLength(1);
     });
     it('ignores invalid versions', () => {
       const content = '[packages]\r\nfoo = "==1.0.0"\r\nsome-package = "==0 0"';
-      const res = extractPackageFile(content, config);
+      const res = extractPackageFile(content);
       expect(res.deps).toHaveLength(2);
       expect(res.deps.filter(dep => !dep.skipReason)).toHaveLength(1);
     });
@@ -83,15 +74,15 @@ describe('lib/manager/pipenv/extract', () => {
         '[[source]]\r\nurl = "source-url"\r\n' +
         '[[source]]\r\nurl = "other-source-url"\r\n' +
         '[packages]\r\nfoo = "==1.0.0"\r\n';
-      const res = extractPackageFile(content, config);
+      const res = extractPackageFile(content);
       expect(res.registryUrls).toEqual(['source-url', 'other-source-url']);
     });
     it('extracts example pipfile', () => {
-      const res = extractPackageFile(pipfile4, config);
+      const res = extractPackageFile(pipfile4);
       expect(res).toMatchSnapshot();
     });
     it('supports custom index', () => {
-      const res = extractPackageFile(pipfile5, config);
+      const res = extractPackageFile(pipfile5);
       expect(res).toMatchSnapshot();
       expect(res.registryUrls).toBeDefined();
       expect(res.registryUrls).toHaveLength(2);
diff --git a/test/manager/poetry/artifacts.spec.js b/test/manager/poetry/artifacts.spec.js
index 1f99df6b4c..f8871ad2a9 100644
--- a/test/manager/poetry/artifacts.spec.js
+++ b/test/manager/poetry/artifacts.spec.js
@@ -1,10 +1,14 @@
 jest.mock('fs-extra');
 jest.mock('child-process-promise');
 
+/** @type any */
 const fs = require('fs-extra');
 const { exec } = require('child-process-promise');
 const poetry = require('../../../lib/manager/poetry/artifacts');
 
+/** @type any */
+const platform = global.platform;
+
 const config = {
   localDir: '/tmp/github/some/repo',
 };
diff --git a/test/manager/terraform/extract.spec.js b/test/manager/terraform/extract.spec.js
index 901bf3c585..d4be1dd9f1 100644
--- a/test/manager/terraform/extract.spec.js
+++ b/test/manager/terraform/extract.spec.js
@@ -11,12 +11,8 @@ const tf2 = `module "relative" {
 
 describe('lib/manager/terraform/extract', () => {
   describe('extractPackageFile()', () => {
-    let config;
-    beforeEach(() => {
-      config = {};
-    });
     it('returns null for empty', () => {
-      expect(extractPackageFile('nothing here', config)).toBeNull();
+      expect(extractPackageFile('nothing here')).toBeNull();
     });
     it('extracts', () => {
       const res = extractPackageFile(tf1);
@@ -25,7 +21,7 @@ describe('lib/manager/terraform/extract', () => {
       expect(res.deps.filter(dep => dep.skipReason)).toHaveLength(5);
     });
     it('returns null if only local deps', () => {
-      expect(extractPackageFile(tf2, config)).toBeNull();
+      expect(extractPackageFile(tf2)).toBeNull();
     });
   });
 });
diff --git a/test/manager/travis/extract.spec.js b/test/manager/travis/extract.spec.js
index e24ac4ef27..8798027fb0 100644
--- a/test/manager/travis/extract.spec.js
+++ b/test/manager/travis/extract.spec.js
@@ -2,16 +2,12 @@ const { extractPackageFile } = require('../../../lib/manager/travis/extract');
 
 describe('lib/manager/travis/extract', () => {
   describe('extractPackageFile()', () => {
-    let config;
-    beforeEach(() => {
-      config = {};
-    });
     it('returns empty if fails to parse', () => {
-      const res = extractPackageFile('blahhhhh:foo:@what\n', config);
+      const res = extractPackageFile('blahhhhh:foo:@what\n');
       expect(res).toBeNull();
     });
     it('returns results', () => {
-      const res = extractPackageFile('node_js:\n  - 6\n  - 8\n', config);
+      const res = extractPackageFile('node_js:\n  - 6\n  - 8\n');
       expect(res).toMatchSnapshot();
       expect(res.deps).toHaveLength(1);
     });
diff --git a/test/manager/travis/package.spec.js b/test/manager/travis/package.spec.js
index b2d791495f..a85168e47a 100644
--- a/test/manager/travis/package.spec.js
+++ b/test/manager/travis/package.spec.js
@@ -1,5 +1,6 @@
 const node = require('../../../lib/manager/travis/package');
 const defaultConfig = require('../../../lib/config/defaults').getConfig();
+/** @type any */
 const githubDatasource = require('../../../lib/datasource/github');
 
 jest.mock('../../../lib/datasource/github');
diff --git a/test/util/env.spec.js b/test/util/env.spec.js
index 237a173ed9..c5ed09400a 100644
--- a/test/util/env.spec.js
+++ b/test/util/env.spec.js
@@ -11,7 +11,15 @@ describe('getChildProcess environment when trustlevel set to low', () => {
     envVars.forEach(env => delete process.env[env]);
   });
   it('returns default environment variables', () => {
-    expect(getChildProcessEnv()).toHaveProperty(...envVars);
+    expect(getChildProcessEnv()).toMatchInlineSnapshot(`
+      Object {
+        "HOME": "HOME",
+        "HTTPS_PROXY": "HTTPS_PROXY",
+        "HTTP_PROXY": "HTTP_PROXY",
+        "NO_PROXY": "NO_PROXY",
+        "PATH": "PATH",
+      }
+    `);
   });
   it('returns environment variable only if defined', () => {
     delete process.env.PATH;
@@ -19,7 +27,16 @@ describe('getChildProcess environment when trustlevel set to low', () => {
   });
   it('returns custom environment variables if passed and defined', () => {
     process.env.LANG = 'LANG';
-    expect(getChildProcessEnv(['LANG'])).toHaveProperty(...envVars, 'LANG');
+    expect(getChildProcessEnv(['LANG'])).toMatchInlineSnapshot(`
+      Object {
+        "HOME": "HOME",
+        "HTTPS_PROXY": "HTTPS_PROXY",
+        "HTTP_PROXY": "HTTP_PROXY",
+        "LANG": "LANG",
+        "NO_PROXY": "NO_PROXY",
+        "PATH": "PATH",
+      }
+    `);
     delete process.env.LANG;
   });
 
diff --git a/test/util/host-rules.spec.js b/test/util/host-rules.spec.js
index 260d45c1cf..7ba8f439aa 100644
--- a/test/util/host-rules.spec.js
+++ b/test/util/host-rules.spec.js
@@ -43,6 +43,7 @@ describe('util/host-rules', () => {
   });
   describe('find()', () => {
     it('warns and returns empty for bad search', () => {
+      // @ts-ignore
       expect(find({ abc: 'def' })).toEqual({});
     });
     it('needs exact host matches', () => {
diff --git a/test/versioning/docker.spec.js b/test/versioning/docker.spec.js
index a3a7b8f862..345aa31c0b 100644
--- a/test/versioning/docker.spec.js
+++ b/test/versioning/docker.spec.js
@@ -1,3 +1,4 @@
+/** @type any */
 const docker = require('../../lib/versioning/docker');
 const semver = require('../../lib/versioning/semver');
 
@@ -110,6 +111,7 @@ describe('docker.', () => {
         ['2.0.1', '1.2.3'],
         ['1.2.3', '0.9.5'],
       ].forEach(pair => {
+        // @ts-ignore
         expect(docker.sortVersions(...pair)).toBe(semver.sortVersions(...pair));
       });
     });
diff --git a/test/website-docs.spec.js b/test/website-docs.spec.js
index f484442d4f..1c95febf0e 100644
--- a/test/website-docs.spec.js
+++ b/test/website-docs.spec.js
@@ -86,6 +86,7 @@ describe('docs', () => {
   // Lists through each option in the relatedOptions array to be able to locate the exact element which causes error, in case of one
   it('has valid relateOptions values', () => {
     relatedOptions.forEach(relOption => {
+      // @ts-ignore
       expect(allOptionNames).toContainOption(relOption);
     });
   });
diff --git a/test/workers/branch/automerge.spec.js b/test/workers/branch/automerge.spec.js
index 3fbdd5cd55..4f511dba02 100644
--- a/test/workers/branch/automerge.spec.js
+++ b/test/workers/branch/automerge.spec.js
@@ -1,6 +1,9 @@
 const { tryBranchAutomerge } = require('../../../lib/workers/branch/automerge');
 const defaultConfig = require('../../../lib/config/defaults').getConfig();
 
+/** @type any */
+const platform = global.platform;
+
 describe('workers/branch/automerge', () => {
   describe('tryBranchAutomerge', () => {
     let config;
diff --git a/test/workers/branch/check-existing.spec.js b/test/workers/branch/check-existing.spec.js
index 05ae5bc5eb..1835bda7eb 100644
--- a/test/workers/branch/check-existing.spec.js
+++ b/test/workers/branch/check-existing.spec.js
@@ -3,6 +3,9 @@ const {
 } = require('../../../lib/workers/branch/check-existing');
 const defaultConfig = require('../../../lib/config/defaults').getConfig();
 
+/** @type any */
+const platform = global.platform;
+
 describe('workers/branch/check-existing', () => {
   describe('prAlreadyExisted', () => {
     let config;
diff --git a/test/workers/branch/commit.spec.js b/test/workers/branch/commit.spec.js
index ca3285175f..bbd581400a 100644
--- a/test/workers/branch/commit.spec.js
+++ b/test/workers/branch/commit.spec.js
@@ -1,6 +1,9 @@
 const { commitFilesToBranch } = require('../../../lib/workers/branch/commit');
 const defaultConfig = require('../../../lib/config/defaults').getConfig();
 
+/** @type any */
+const platform = global.platform;
+
 describe('workers/branch/automerge', () => {
   describe('commitFilesToBranch', () => {
     let config;
diff --git a/test/workers/branch/get-updated.spec.js b/test/workers/branch/get-updated.spec.js
index a00e4e9880..503c0bf8fa 100644
--- a/test/workers/branch/get-updated.spec.js
+++ b/test/workers/branch/get-updated.spec.js
@@ -1,10 +1,15 @@
+/** @type any */
 const composer = require('../../../lib/manager/composer');
+/** @type any */
 const npm = require('../../../lib/manager/npm');
 const {
   getUpdatedPackageFiles,
 } = require('../../../lib/workers/branch/get-updated');
 const defaultConfig = require('../../../lib/config/defaults').getConfig();
 
+/** @type any */
+const platform = global.platform;
+
 describe('workers/branch/get-updated', () => {
   describe('getUpdatedPackageFiles()', () => {
     let config;
diff --git a/test/workers/branch/index.spec.js b/test/workers/branch/index.spec.js
index e7f847cafa..11970153cc 100644
--- a/test/workers/branch/index.spec.js
+++ b/test/workers/branch/index.spec.js
@@ -1,14 +1,22 @@
 const branchWorker = require('../../../lib/workers/branch');
 const defaultConfig = require('../../../lib/config/defaults').getConfig();
 
+/** @type any */
 const schedule = require('../../../lib/workers/branch/schedule');
+/** @type any */
 const checkExisting = require('../../../lib/workers/branch/check-existing');
+/** @type any */
 const parent = require('../../../lib/workers/branch/parent');
+/** @type any */
 const npmPostExtract = require('../../../lib/manager/npm/post-update');
+/** @type any */
 const commit = require('../../../lib/workers/branch/commit');
 const statusChecks = require('../../../lib/workers/branch/status-checks');
+/** @type any */
 const automerge = require('../../../lib/workers/branch/automerge');
+/** @type any */
 const prWorker = require('../../../lib/workers/pr');
+/** @type any */
 const getUpdated = require('../../../lib/workers/branch/get-updated');
 const { appSlug } = require('../../../lib/config/app-strings');
 
@@ -22,6 +30,9 @@ jest.mock('../../../lib/workers/branch/automerge');
 jest.mock('../../../lib/workers/branch/commit');
 jest.mock('../../../lib/workers/pr');
 
+/** @type any */
+const platform = global.platform;
+
 describe('workers/branch', () => {
   describe('processBranch', () => {
     let config;
diff --git a/test/workers/branch/lock-files/index.spec.js b/test/workers/branch/lock-files/index.spec.js
index ee8c1df0b6..6c829471af 100644
--- a/test/workers/branch/lock-files/index.spec.js
+++ b/test/workers/branch/lock-files/index.spec.js
@@ -1,15 +1,22 @@
+/** @type any */
 const fs = require('fs-extra');
 const lockFiles = require('../../../../lib/manager/npm/post-update');
 const defaultConfig = require('../../../../lib/config/defaults').getConfig();
 // const upath = require('upath');
 
+/** @type any */
 const npm = require('../../../../lib/manager/npm/post-update/npm');
+/** @type any */
 const yarn = require('../../../../lib/manager/npm/post-update/yarn');
+/** @type any */
 const pnpm = require('../../../../lib/manager/npm/post-update/pnpm');
 const lerna = require('../../../../lib/manager/npm/post-update/lerna');
 
 const hostRules = require('../../../../lib/util/host-rules');
 
+/** @type any */
+const platform = global.platform;
+
 hostRules.find = jest.fn(() => ({
   token: 'abc',
 }));
diff --git a/test/workers/branch/lock-files/lerna.spec.js b/test/workers/branch/lock-files/lerna.spec.js
index 06adb3ac97..a54bb660b9 100644
--- a/test/workers/branch/lock-files/lerna.spec.js
+++ b/test/workers/branch/lock-files/lerna.spec.js
@@ -3,6 +3,9 @@ const lernaHelper = require('../../../../lib/manager/npm/post-update/lerna');
 
 jest.mock('child-process-promise');
 
+/** @type any */
+const platform = global.platform;
+
 describe('generateLockFiles()', () => {
   it('returns if no lernaClient', async () => {
     const res = await lernaHelper.generateLockFiles(undefined, 'some-dir', {});
diff --git a/test/workers/branch/lock-files/npm.spec.js b/test/workers/branch/lock-files/npm.spec.js
index adcc3228c7..41914eb689 100644
--- a/test/workers/branch/lock-files/npm.spec.js
+++ b/test/workers/branch/lock-files/npm.spec.js
@@ -6,6 +6,7 @@ jest.mock('get-installed-path');
 
 getInstalledPath.mockImplementation(() => null);
 
+/** @type any */
 const fs = require('fs-extra');
 const { exec } = require('child-process-promise');
 const npmHelper = require('../../../../lib/manager/npm/post-update/npm');
diff --git a/test/workers/branch/lock-files/pnpm.spec.js b/test/workers/branch/lock-files/pnpm.spec.js
index 92ab394004..75d6f4a4bb 100644
--- a/test/workers/branch/lock-files/pnpm.spec.js
+++ b/test/workers/branch/lock-files/pnpm.spec.js
@@ -6,6 +6,7 @@ jest.mock('get-installed-path');
 
 getInstalledPath.mockImplementation(() => null);
 
+/** @type any */
 const fs = require('fs-extra');
 const { exec } = require('child-process-promise');
 const pnpmHelper = require('../../../../lib/manager/npm/post-update/pnpm');
diff --git a/test/workers/branch/lock-files/yarn.spec.js b/test/workers/branch/lock-files/yarn.spec.js
index 7933d71769..f43c879021 100644
--- a/test/workers/branch/lock-files/yarn.spec.js
+++ b/test/workers/branch/lock-files/yarn.spec.js
@@ -6,6 +6,7 @@ jest.mock('get-installed-path');
 
 getInstalledPath.mockImplementation(() => null);
 
+/** @type any */
 const fs = require('fs-extra');
 const { exec } = require('child-process-promise');
 const yarnHelper = require('../../../../lib/manager/npm/post-update/yarn');
diff --git a/test/workers/branch/parent.spec.js b/test/workers/branch/parent.spec.js
index 876a3bdc2e..192425c3d9 100644
--- a/test/workers/branch/parent.spec.js
+++ b/test/workers/branch/parent.spec.js
@@ -1,5 +1,8 @@
 const { getParentBranch } = require('../../../lib/workers/branch/parent');
 
+/** @type any */
+const platform = global.platform;
+
 describe('workers/branch/parent', () => {
   describe('getParentBranch(config)', () => {
     let config;
diff --git a/test/workers/branch/schedule.spec.js b/test/workers/branch/schedule.spec.js
index 3026203aeb..8c0afdd46e 100644
--- a/test/workers/branch/schedule.spec.js
+++ b/test/workers/branch/schedule.spec.js
@@ -1,3 +1,4 @@
+/** @type any */
 const mockDate = require('mockdate');
 const schedule = require('../../../lib/workers/branch/schedule');
 
diff --git a/test/workers/branch/status-checks.spec.js b/test/workers/branch/status-checks.spec.js
index 0f2ab550aa..17fec24c5f 100644
--- a/test/workers/branch/status-checks.spec.js
+++ b/test/workers/branch/status-checks.spec.js
@@ -3,6 +3,9 @@ const {
 } = require('../../../lib/workers/branch/status-checks');
 const defaultConfig = require('../../../lib/config/defaults').getConfig();
 
+/** @type any */
+const platform = global.platform;
+
 describe('workers/branch/status-checks', () => {
   describe('setUnpublishable', () => {
     let config;
diff --git a/test/workers/global/autodiscover.spec.js b/test/workers/global/autodiscover.spec.js
index bbd5adc579..1f5a3b70d9 100644
--- a/test/workers/global/autodiscover.spec.js
+++ b/test/workers/global/autodiscover.spec.js
@@ -27,7 +27,7 @@ describe('lib/workers/global/autodiscover', () => {
     hostRules.find = jest.fn(() => ({
       token: 'abc',
     }));
-    ghApi.getRepos = jest.fn(() => []);
+    ghApi.getRepos = jest.fn(() => Promise.resolve([]));
     const res = await autodiscoverRepositories(config);
     expect(res).toEqual(config);
   });
@@ -37,7 +37,7 @@ describe('lib/workers/global/autodiscover', () => {
     hostRules.find = jest.fn(() => ({
       token: 'abc',
     }));
-    ghApi.getRepos = jest.fn(() => [{}, {}]);
+    ghApi.getRepos = jest.fn(() => Promise.resolve([{}, {}]));
     const res = await autodiscoverRepositories(config);
     expect(res.repositories).toHaveLength(2);
   });
@@ -48,7 +48,9 @@ describe('lib/workers/global/autodiscover', () => {
     hostRules.find = jest.fn(() => ({
       token: 'abc',
     }));
-    ghApi.getRepos = jest.fn(() => ['project/repo', 'project/another-repo']);
+    ghApi.getRepos = jest.fn(() =>
+      Promise.resolve(['project/repo', 'project/another-repo'])
+    );
     const res = await autodiscoverRepositories(config);
     expect(res.repositories).toEqual(['project/repo']);
   });
@@ -59,10 +61,9 @@ describe('lib/workers/global/autodiscover', () => {
     hostRules.find = jest.fn(() => ({
       token: 'abc',
     }));
-    ghApi.getRepos = jest.fn(() => [
-      'another-project/repo',
-      'another-project/another-repo',
-    ]);
+    ghApi.getRepos = jest.fn(() =>
+      Promise.resolve(['another-project/repo', 'another-project/another-repo'])
+    );
     const res = await autodiscoverRepositories(config);
     expect(res).toEqual(config);
   });
diff --git a/test/workers/global/index.spec.js b/test/workers/global/index.spec.js
index cda86e3c42..27f5212f04 100644
--- a/test/workers/global/index.spec.js
+++ b/test/workers/global/index.spec.js
@@ -1,6 +1,8 @@
 const globalWorker = require('../../../lib/workers/global');
 const repositoryWorker = require('../../../lib/workers/repository');
+/** @type any */
 const configParser = require('../../../lib/config');
+/** @type any */
 const platform = require('../../../lib/platform');
 
 jest.mock('../../../lib/platform');
diff --git a/test/workers/pr/changelog/index.spec.js b/test/workers/pr/changelog/index.spec.js
index 16989a7b33..1bc3c6d435 100644
--- a/test/workers/pr/changelog/index.spec.js
+++ b/test/workers/pr/changelog/index.spec.js
@@ -1,8 +1,11 @@
-import ghGot from '../../../../lib/platform/github/gh-got-wrapper';
+import { api } from '../../../../lib/platform/github/gh-got-wrapper';
 
 jest.mock('../../../../lib/platform/github/gh-got-wrapper');
 jest.mock('../../../../lib/datasource/npm');
 
+/** @type any */
+const ghGot = api.get;
+
 const hostRules = require('../../../../lib/util/host-rules');
 
 const { getChangeLogJSON } = require('../../../../lib/workers/pr/changelog');
diff --git a/test/workers/pr/index.spec.js b/test/workers/pr/index.spec.js
index 1be7083c53..749eccd371 100644
--- a/test/workers/pr/index.spec.js
+++ b/test/workers/pr/index.spec.js
@@ -1,8 +1,13 @@
 const prWorker = require('../../../lib/workers/pr');
+/** @type any */
 const changelogHelper = require('../../../lib/workers/pr/changelog');
 const defaultConfig = require('../../../lib/config/defaults').getConfig();
 
 jest.mock('../../../lib/workers/pr/changelog');
+
+/** @type any */
+const platform = global.platform;
+
 changelogHelper.getChangeLogJSON = jest.fn();
 changelogHelper.getChangeLogJSON.mockReturnValue({
   project: {
@@ -98,6 +103,7 @@ describe('workers/pr', () => {
     });
   });
   describe('ensurePr', () => {
+    /** @type any */
     let config;
     const existingPr = {
       displayNumber: 'Existing PR',
diff --git a/test/workers/repository/error-config.spec.js b/test/workers/repository/error-config.spec.js
index f97b2b0dc4..5031c62ece 100644
--- a/test/workers/repository/error-config.spec.js
+++ b/test/workers/repository/error-config.spec.js
@@ -2,6 +2,9 @@ const {
   raiseConfigWarningIssue,
 } = require('../../../lib/workers/repository/error-config');
 
+/** @type any */
+const platform = global.platform;
+
 let config;
 beforeEach(() => {
   jest.resetAllMocks();
diff --git a/test/workers/repository/extract/index.spec.js b/test/workers/repository/extract/index.spec.js
index a47b3fb949..d78cafd6e2 100644
--- a/test/workers/repository/extract/index.spec.js
+++ b/test/workers/repository/extract/index.spec.js
@@ -1,3 +1,4 @@
+/** @type any */
 const managerFiles = require('../../../../lib/workers/repository/extract/manager-files');
 const {
   extractAllDependencies,
diff --git a/test/workers/repository/extract/manager-files.spec.js b/test/workers/repository/extract/manager-files.spec.js
index 126d0d9087..259300fc65 100644
--- a/test/workers/repository/extract/manager-files.spec.js
+++ b/test/workers/repository/extract/manager-files.spec.js
@@ -1,12 +1,17 @@
 const {
   getManagerPackageFiles,
 } = require('../../../../lib/workers/repository/extract/manager-files');
+/** @type any */
 const fileMatch = require('../../../../lib/workers/repository/extract/file-match');
 const npm = require('../../../../lib/manager/npm');
+/** @type any */
 const dockerfile = require('../../../../lib/manager/dockerfile');
 
 jest.mock('../../../../lib/workers/repository/extract/file-match');
 
+/** @type any */
+const platform = global.platform;
+
 describe('workers/repository/extract/manager-files', () => {
   describe('getManagerPackageFiles()', () => {
     let config;
diff --git a/test/workers/repository/finalise/prune.spec.js b/test/workers/repository/finalise/prune.spec.js
index 8a6288883d..f0a9d31532 100644
--- a/test/workers/repository/finalise/prune.spec.js
+++ b/test/workers/repository/finalise/prune.spec.js
@@ -1,5 +1,9 @@
 const cleanup = require('../../../../lib/workers/repository/finalise/prune');
 
+/** @type any */
+const platform = global.platform;
+
+/** @type any */
 let config;
 beforeEach(() => {
   jest.resetAllMocks();
diff --git a/test/workers/repository/finalise/validate.spec.js b/test/workers/repository/finalise/validate.spec.js
index cc1a8f6f4e..6bedf52f59 100644
--- a/test/workers/repository/finalise/validate.spec.js
+++ b/test/workers/repository/finalise/validate.spec.js
@@ -1,5 +1,8 @@
 const validate = require('../../../../lib/workers/repository/finalise/validate');
 
+/** @type any */
+const platform = global.platform;
+
 beforeEach(() => {
   jest.resetAllMocks();
 });
diff --git a/test/workers/repository/index.spec.js b/test/workers/repository/index.spec.js
index 5f42fba1be..26a16de3e7 100644
--- a/test/workers/repository/index.spec.js
+++ b/test/workers/repository/index.spec.js
@@ -1,4 +1,5 @@
 const { renovateRepository } = require('../../../lib/workers/repository/index');
+/** @type any */
 const process = require('../../../lib/workers/repository/process');
 
 jest.mock('../../../lib/workers/repository/init');
diff --git a/test/workers/repository/init/apis.spec.js b/test/workers/repository/init/apis.spec.js
index b882079376..7bf16e3ebd 100644
--- a/test/workers/repository/init/apis.spec.js
+++ b/test/workers/repository/init/apis.spec.js
@@ -4,6 +4,7 @@ jest.mock('../../../../lib/platform/github');
 
 describe('workers/repository/init/apis', () => {
   describe('initApis', () => {
+    /** @type any */
     let config;
     beforeEach(() => {
       config = require('../../../config/config/_fixtures');
diff --git a/test/workers/repository/init/base.spec.js b/test/workers/repository/init/base.spec.js
index 1d80b7989a..184197e156 100644
--- a/test/workers/repository/init/base.spec.js
+++ b/test/workers/repository/init/base.spec.js
@@ -1,3 +1,4 @@
+/** @type any */
 let config;
 beforeEach(() => {
   jest.resetAllMocks();
@@ -10,6 +11,9 @@ const {
   checkBaseBranch,
 } = require('../../../../lib/workers/repository/init/base');
 
+/** @type any */
+const platform = global.platform;
+
 describe('workers/repository/init/base', () => {
   describe('checkBaseBranch()', () => {
     it('errors', async () => {
diff --git a/test/workers/repository/init/config.spec.js b/test/workers/repository/init/config.spec.js
index 6d254cd9a9..7c81c6a2bb 100644
--- a/test/workers/repository/init/config.spec.js
+++ b/test/workers/repository/init/config.spec.js
@@ -1,3 +1,4 @@
+/** @type any */
 let config;
 beforeEach(() => {
   jest.resetAllMocks();
@@ -9,10 +10,14 @@ beforeEach(() => {
 const {
   mergeRenovateConfig,
 } = require('../../../../lib/workers/repository/init/config');
+/** @type any */
 const migrateValidate = require('../../../../lib/config/migrate-validate');
 
 jest.mock('../../../../lib/config/migrate-validate');
 
+/** @type any */
+const platform = global.platform;
+
 describe('workers/repository/init/config', () => {
   describe('mergeRenovateConfig()', () => {
     beforeEach(() => {
diff --git a/test/workers/repository/init/index.spec.js b/test/workers/repository/init/index.spec.js
index abe30c37e6..8972907ecd 100644
--- a/test/workers/repository/init/index.spec.js
+++ b/test/workers/repository/init/index.spec.js
@@ -1,4 +1,6 @@
+/** @type any */
 const base = require('../../../../lib/workers/repository/init/base');
+/** @type any */
 const apis = require('../../../../lib/workers/repository/init/apis');
 const { initRepo } = require('../../../../lib/workers/repository/init');
 
@@ -14,7 +16,7 @@ describe('workers/repository/init', () => {
     it('runs', async () => {
       base.checkBaseBranch.mockReturnValue({});
       apis.initApis.mockReturnValue({});
-      await initRepo({}, null);
+      await initRepo({});
     });
   });
 });
diff --git a/test/workers/repository/init/semantic.spec.js b/test/workers/repository/init/semantic.spec.js
index 022340adcf..ba90dc29c0 100644
--- a/test/workers/repository/init/semantic.spec.js
+++ b/test/workers/repository/init/semantic.spec.js
@@ -1,3 +1,4 @@
+/** @type any */
 let config;
 beforeEach(() => {
   jest.resetAllMocks();
@@ -10,6 +11,9 @@ const {
   detectSemanticCommits,
 } = require('../../../../lib/workers/repository/init/semantic');
 
+/** @type any */
+const platform = global.platform;
+
 describe('workers/repository/init/semantic', () => {
   describe('detectSemanticCommits()', () => {
     it('returns config if already set', async () => {
diff --git a/test/workers/repository/init/vulnerability.spec.js b/test/workers/repository/init/vulnerability.spec.js
index adf55d3a1a..5cc3d1472e 100644
--- a/test/workers/repository/init/vulnerability.spec.js
+++ b/test/workers/repository/init/vulnerability.spec.js
@@ -10,6 +10,9 @@ const {
   detectVulnerabilityAlerts,
 } = require('../../../../lib/workers/repository/init/vulnerability');
 
+/** @type any */
+const platform = global.platform;
+
 describe('workers/repository/init/vulnerability', () => {
   describe('detectVulnerabilityAlerts()', () => {
     it('returns if alerts are missing', async () => {
diff --git a/test/workers/repository/master-issue.spec.js b/test/workers/repository/master-issue.spec.js
index 896cee0141..6c4659e4cf 100644
--- a/test/workers/repository/master-issue.spec.js
+++ b/test/workers/repository/master-issue.spec.js
@@ -1,6 +1,10 @@
 const fs = require('fs');
 const masterIssue = require('../../../lib/workers/repository/master-issue');
 
+/** @type any */
+const platform = global.platform;
+
+/** @type any */
 let config;
 beforeEach(() => {
   jest.resetAllMocks();
@@ -12,6 +16,7 @@ beforeEach(() => {
 
 async function dryRun(
   branches,
+  // eslint-disable-next-line no-shadow
   platform,
   ensureIssueClosingCalls = 0,
   ensureIssueCalls = 0,
diff --git a/test/workers/repository/onboarding/branch/index.spec.js b/test/workers/repository/onboarding/branch/index.spec.js
index 7e9cbd9fdd..e63d0d4fe1 100644
--- a/test/workers/repository/onboarding/branch/index.spec.js
+++ b/test/workers/repository/onboarding/branch/index.spec.js
@@ -5,6 +5,9 @@ const {
 
 jest.mock('../../../../../lib/workers/repository/onboarding/branch/rebase');
 
+/** @type any */
+const platform = global.platform;
+
 describe('workers/repository/onboarding/branch', () => {
   describe('checkOnboardingBranch', () => {
     let config;
diff --git a/test/workers/repository/onboarding/branch/rebase.spec.js b/test/workers/repository/onboarding/branch/rebase.spec.js
index 764b764b51..a7c2d326ab 100644
--- a/test/workers/repository/onboarding/branch/rebase.spec.js
+++ b/test/workers/repository/onboarding/branch/rebase.spec.js
@@ -3,6 +3,9 @@ const {
   rebaseOnboardingBranch,
 } = require('../../../../../lib/workers/repository/onboarding/branch/rebase');
 
+/** @type any */
+const platform = global.platform;
+
 describe('workers/repository/onboarding/branch/rebase', () => {
   describe('rebaseOnboardingBranch()', () => {
     let config;
diff --git a/test/workers/repository/onboarding/pr/index.spec.js b/test/workers/repository/onboarding/pr/index.spec.js
index a86fc10f81..a84a4996fb 100644
--- a/test/workers/repository/onboarding/pr/index.spec.js
+++ b/test/workers/repository/onboarding/pr/index.spec.js
@@ -4,6 +4,9 @@ const {
   ensureOnboardingPr,
 } = require('../../../../../lib/workers/repository/onboarding/pr');
 
+/** @type any */
+const platform = global.platform;
+
 describe('workers/repository/onboarding/pr', () => {
   describe('ensureOnboardingPr()', () => {
     let config;
diff --git a/test/workers/repository/process/deprecated.spec.js b/test/workers/repository/process/deprecated.spec.js
index 6db91efd0e..b52abbaf48 100644
--- a/test/workers/repository/process/deprecated.spec.js
+++ b/test/workers/repository/process/deprecated.spec.js
@@ -2,6 +2,9 @@ const {
   raiseDeprecationWarnings,
 } = require('../../../../lib/workers/repository/process/deprecated');
 
+/** @type any */
+const platform = global.platform;
+
 describe('workers/repository/process/deprecated', () => {
   describe('raiseDeprecationWarnings()', () => {
     it('returns if onboarding', async () => {
diff --git a/test/workers/repository/process/extract-update.spec.js b/test/workers/repository/process/extract-update.spec.js
index 3dc4e18daf..bceaa51573 100644
--- a/test/workers/repository/process/extract-update.spec.js
+++ b/test/workers/repository/process/extract-update.spec.js
@@ -1,6 +1,7 @@
 const {
   extractAndUpdate,
 } = require('../../../../lib/workers/repository/process/extract-update');
+/** @type any */
 const branchify = require('../../../../lib/workers/repository/updates/branchify');
 
 jest.mock('../../../../lib/workers/repository/process/write');
diff --git a/test/workers/repository/process/fetch.spec.js b/test/workers/repository/process/fetch.spec.js
index 9ba8875427..a722fb3a29 100644
--- a/test/workers/repository/process/fetch.spec.js
+++ b/test/workers/repository/process/fetch.spec.js
@@ -3,6 +3,7 @@ const {
 } = require('../../../../lib/workers/repository/process/fetch');
 
 const npm = require('../../../../lib/manager/npm');
+/** @type any */
 const lookup = require('../../../../lib/workers/repository/process/lookup');
 
 jest.mock('../../../../lib/workers/repository/process/lookup');
diff --git a/test/workers/repository/process/index.spec.js b/test/workers/repository/process/index.spec.js
index 4c1337ca23..3f73348553 100644
--- a/test/workers/repository/process/index.spec.js
+++ b/test/workers/repository/process/index.spec.js
@@ -1,6 +1,7 @@
 const {
   processRepo,
 } = require('../../../../lib/workers/repository/process/index');
+/** @type any */
 const extractUpdate = require('../../../../lib/workers/repository/process/extract-update');
 
 jest.mock('../../../../lib/workers/repository/process/extract-update');
diff --git a/test/workers/repository/process/limits.spec.js b/test/workers/repository/process/limits.spec.js
index 15d876f4f0..036e8788b4 100644
--- a/test/workers/repository/process/limits.spec.js
+++ b/test/workers/repository/process/limits.spec.js
@@ -1,6 +1,10 @@
 const moment = require('moment');
+/** @type any */
 const limits = require('../../../../lib/workers/repository/process/limits');
 
+/** @type any */
+const platform = global.platform;
+
 let config;
 beforeEach(() => {
   jest.resetAllMocks();
diff --git a/test/workers/repository/process/lookup/index.spec.js b/test/workers/repository/process/lookup/index.spec.js
index d53f2e2cb9..c53805d3dd 100644
--- a/test/workers/repository/process/lookup/index.spec.js
+++ b/test/workers/repository/process/lookup/index.spec.js
@@ -7,6 +7,7 @@ const webpackJson = require('../../../../config/npm/_fixtures/webpack.json');
 const nextJson = require('../../../../config/npm/_fixtures/next.json');
 const vueJson = require('../../../../config/npm/_fixtures/vue.json');
 const typescriptJson = require('../../../../config/npm/_fixtures/typescript.json');
+/** @type any */
 const docker = require('../../../../../lib/datasource/docker');
 const defaults = require('../../../../../lib/config/defaults');
 
@@ -14,6 +15,7 @@ jest.mock('../../../../../lib/datasource/docker');
 
 qJson.latestVersion = '1.4.1';
 
+/** @type any */
 let config;
 
 describe('workers/repository/process/lookup', () => {
diff --git a/test/workers/repository/process/write.spec.js b/test/workers/repository/process/write.spec.js
index 167d1828b6..3ea14619a5 100644
--- a/test/workers/repository/process/write.spec.js
+++ b/test/workers/repository/process/write.spec.js
@@ -1,7 +1,9 @@
 const {
   writeUpdates,
 } = require('../../../../lib/workers/repository/process/write');
+/** @type any */
 const branchWorker = require('../../../../lib/workers/branch');
+/** @type any */
 const limits = require('../../../../lib/workers/repository/process/limits');
 
 branchWorker.processBranch = jest.fn();
diff --git a/test/workers/repository/updates/branchify.spec.js b/test/workers/repository/updates/branchify.spec.js
index 1fb8b2c738..628e0f28df 100644
--- a/test/workers/repository/updates/branchify.spec.js
+++ b/test/workers/repository/updates/branchify.spec.js
@@ -1,3 +1,4 @@
+/** @type any */
 let config;
 beforeEach(() => {
   jest.resetAllMocks();
@@ -9,6 +10,8 @@ beforeEach(() => {
 const {
   branchifyUpgrades,
 } = require('../../../../lib/workers/repository/updates/branchify');
+
+/** @type any */
 const {
   flattenUpdates,
 } = require('../../../../lib/workers/repository/updates/flatten');
diff --git a/test/workers/repository/updates/flatten.spec.js b/test/workers/repository/updates/flatten.spec.js
index b118a958a0..2cde044339 100644
--- a/test/workers/repository/updates/flatten.spec.js
+++ b/test/workers/repository/updates/flatten.spec.js
@@ -2,6 +2,7 @@ const {
   flattenUpdates,
 } = require('../../../../lib/workers/repository/updates/flatten');
 
+/** @type any */
 let config;
 beforeEach(() => {
   jest.resetAllMocks();
diff --git a/tsconfig.app.json b/tsconfig.app.json
index 19cea95f7a..91698e6057 100644
--- a/tsconfig.app.json
+++ b/tsconfig.app.json
@@ -2,7 +2,7 @@
   "extends": "./tsconfig",
   "compilerOptions": {
     "resolveJsonModule": false,
-    "isolatedModules": false,
+    "isolatedModules": true,
     "sourceMap": false,
     "types": ["node"]
   },
diff --git a/tsconfig.json b/tsconfig.json
index 814df428d8..d05ddae809 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,15 +1,17 @@
 {
   "compilerOptions": {
     "strict": true,
+    "noImplicitAny": false /* required for js files */,
+    "strictNullChecks": false /* required for js files */,
     "outDir": "./dist",
     "target": "es2018",
     "allowJs": true,
-    "checkJs": false,
+    "checkJs": true,
     "module": "commonjs",
     "sourceMap": true,
     "allowSyntheticDefaultImports": true,
     "esModuleInterop": true,
-    "resolveJsonModule": true,
+    "resolveJsonModule": false,
     "isolatedModules": true,
     "lib": ["es2018"],
     "types": ["node", "jest"]
-- 
GitLab