From c98b79b11a40d3997f658cd92d432c2da3c2d440 Mon Sep 17 00:00:00 2001
From: Sergei Zharinov <zharinov@users.noreply.github.com>
Date: Tue, 16 Nov 2021 10:45:17 +0300
Subject: [PATCH] test(typescript): Gradual migration to strict "null" and
 "any" checks (#12681)

---
 lib/util/clone.ts    |   2 +-
 package.json         |   3 +-
 tsconfig.strict.json | 121 +++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 124 insertions(+), 2 deletions(-)
 create mode 100644 tsconfig.strict.json

diff --git a/lib/util/clone.ts b/lib/util/clone.ts
index d1c9530e7e..cb0b5ba7be 100644
--- a/lib/util/clone.ts
+++ b/lib/util/clone.ts
@@ -1,5 +1,5 @@
 import safeStringify from 'fast-safe-stringify';
 
-export function clone<T>(input: T = null): T {
+export function clone<T>(input: T | null = null): T {
   return JSON.parse(safeStringify(input));
 }
diff --git a/package.json b/package.json
index 96745e3216..a2bd8da0ba 100644
--- a/package.json
+++ b/package.json
@@ -29,6 +29,7 @@
     "ls-lint": "ls-lint",
     "markdown-lint": "markdownlint-cli2",
     "markdown-lint-fix": "markdownlint-cli2-fix",
+    "null-check": "run-s generate:* \"tsc --noEmit -p tsconfig.strict.json {@}\"",
     "prepare": "run-s prepare:*",
     "prepare:husky": "husky install",
     "prepare:generate": "run-s generate:*",
@@ -39,7 +40,7 @@
     "prettier-fix": "prettier --write \"**/*.{ts,js,mjs,json,md,yml}\"",
     "release": "node tools/release.mjs",
     "start": "node -r ts-node/register/transpile-only -- lib/renovate.ts",
-    "test": "run-s lint test-schema type-check jest",
+    "test": "run-s lint test-schema type-check null-check jest",
     "test-dirty": "git diff --exit-code",
     "test-e2e": "npm pack && cd test/e2e && yarn install --no-lockfile --ignore-optional --prod && yarn test",
     "test-schema": "node -r ts-node/register/transpile-only -- test/json-schema.ts",
diff --git a/tsconfig.strict.json b/tsconfig.strict.json
new file mode 100644
index 0000000000..e256ff01fc
--- /dev/null
+++ b/tsconfig.strict.json
@@ -0,0 +1,121 @@
+{
+  "extends": "./tsconfig.json",
+  "compilerOptions": {
+    "strictNullChecks": true,
+    "noImplicitAny": true
+  },
+  "files": [
+    "./lib/constants/error-messages.ts",
+    "./lib/util/clone.ts",
+    "./lib/util/sanitize.ts",
+    "./lib/config/app-strings.ts",
+    "./lib/config/presets/common.ts",
+    "./lib/constants/platforms.ts",
+    "./lib/constants/programming-language.ts",
+    "./lib/data-files.generated.ts",
+    "./lib/datasource/adoptium-java/common.ts",
+    "./lib/datasource/adoptium-java/types.ts",
+    "./lib/datasource/artifactory/common.ts",
+    "./lib/datasource/bitbucket-tags/types.ts",
+    "./lib/datasource/cdnjs/types.ts",
+    "./lib/datasource/crate/types.ts",
+    "./lib/datasource/dart/types.ts",
+    "./lib/datasource/docker/types.ts",
+    "./lib/datasource/galaxy-collection/types.ts",
+    "./lib/datasource/galaxy/types.ts",
+    "./lib/datasource/git-refs/types.ts",
+    "./lib/datasource/github-releases/types.ts",
+    "./lib/datasource/github-tags/types.ts",
+    "./lib/datasource/gitlab-packages/common.ts",
+    "./lib/datasource/gitlab-packages/types.ts",
+    "./lib/datasource/gitlab-releases/types.ts",
+    "./lib/datasource/gitlab-tags/types.ts",
+    "./lib/datasource/gradle-version/types.ts",
+    "./lib/datasource/hex/types.ts",
+    "./lib/datasource/jenkins-plugins/common.ts",
+    "./lib/datasource/maven/common.ts",
+    "./lib/datasource/node/common.ts",
+    "./lib/datasource/node/types.ts",
+    "./lib/datasource/npm/common.ts",
+    "./lib/datasource/nuget/types.ts",
+    "./lib/datasource/orb/types.ts",
+    "./lib/datasource/pypi/types.ts",
+    "./lib/datasource/repology/types.ts",
+    "./lib/datasource/rubygems/types.ts",
+    "./lib/datasource/terraform-module/types.ts",
+    "./lib/datasource/terraform-provider/types.ts",
+    "./lib/datasource/types.ts",
+    "./lib/globals.d.ts",
+    "./lib/logger/__mocks__/index.ts",
+    "./lib/logger/cmd-serializer.ts",
+    "./lib/manager/argocd/types.ts",
+    "./lib/manager/azure-pipelines/types.ts",
+    "./lib/manager/bazel/types.ts",
+    "./lib/manager/cargo/types.ts",
+    "./lib/manager/cocoapods/types.ts",
+    "./lib/manager/composer/types.ts",
+    "./lib/manager/docker-compose/types.ts",
+    "./lib/manager/git-submodules/types.ts",
+    "./lib/manager/gitlabci/types.ts",
+    "./lib/manager/gitlabci/utils.ts",
+    "./lib/manager/gradle-wrapper/types.ts",
+    "./lib/manager/gradle/deep/types.ts",
+    "./lib/manager/gradle/types.ts",
+    "./lib/manager/helm-values/types.ts",
+    "./lib/manager/helmfile/types.ts",
+    "./lib/manager/helmsman/types.ts",
+    "./lib/manager/homebrew/types.ts",
+    "./lib/manager/jenkins/types.ts",
+    "./lib/manager/kustomize/types.ts",
+    "./lib/manager/leiningen/types.ts",
+    "./lib/manager/maven/types.ts",
+    "./lib/manager/npm/extract/types.ts",
+    "./lib/manager/npm/update/locked-dependency/types.ts",
+    "./lib/manager/nuget/types.ts",
+    "./lib/manager/pip_setup/types.ts",
+    "./lib/manager/pipenv/types.ts",
+    "./lib/manager/poetry/types.ts",
+    "./lib/manager/pre-commit/types.ts",
+    "./lib/manager/regex/types.ts",
+    "./lib/manager/sbt/types.ts",
+    "./lib/manager/swift/types.ts",
+    "./lib/manager/terraform/common.ts",
+    "./lib/manager/terraform/lockfile/types.ts",
+    "./lib/manager/terragrunt/common.ts",
+    "./lib/platform/bitbucket/types.ts",
+    "./lib/platform/gitea/types.ts",
+    "./lib/platform/github/graphql.ts",
+    "./lib/platform/gitlab/types.ts",
+    "./lib/platform/utils/pr-body.ts",
+    "./lib/proxy.ts",
+    "./lib/types/branch-status.ts",
+    "./lib/types/git.ts",
+    "./lib/types/host-rules.ts",
+    "./lib/types/later.d.ts",
+    "./lib/types/platform/bitbucket-server/index.ts",
+    "./lib/types/pr-state.ts",
+    "./lib/types/skip-reason.ts",
+    "./lib/types/versioning.ts",
+    "./lib/types/vulnerability-alert.ts",
+    "./lib/util/cache/memory/index.ts",
+    "./lib/util/cache/package/types.ts",
+    "./lib/util/date.ts",
+    "./lib/util/exec/common.ts",
+    "./lib/util/exec/types.ts",
+    "./lib/util/git/config.ts",
+    "./lib/util/html.ts",
+    "./lib/util/http/hooks.ts",
+    "./lib/util/http/types.ts",
+    "./lib/util/index.ts",
+    "./lib/util/json-writer/indentation-type.ts",
+    "./lib/util/object.ts",
+    "./lib/util/split.ts",
+    "./lib/workers/pr/changelog/hbs-template.ts",
+    "./lib/workers/pr/changelog/types.ts",
+    "./lib/workers/repository/init/types.ts",
+    "./test/json-schema.ts",
+    "./test/newline-snapshot-serializer.ts",
+    "./test/static-files.spec.ts",
+    "./tools/utils/index.ts"
+  ]
+}
-- 
GitLab