diff --git a/lib/datasource/common.ts b/lib/datasource/common.ts
index 0f31ca9cb227eeabd92e4cc6b0176eaa33c60e2a..47090ef8768a81ed6f02b9930bd6ad2e9194994a 100644
--- a/lib/datasource/common.ts
+++ b/lib/datasource/common.ts
@@ -69,7 +69,7 @@ export interface ReleaseResult {
   registryUrl?: string;
 }
 
-export interface Datasource {
+export interface DatasourceApi {
   id: string;
   getDigest?(config: DigestConfig, newValue?: string): Promise<string | null>;
   getReleases(config: GetReleasesConfig): Promise<ReleaseResult | null>;
@@ -78,3 +78,6 @@ export interface Datasource {
   defaultConfig?: object;
   registryStrategy?: 'first' | 'hunt' | 'merge';
 }
+
+// TODO: remove, only for compatabillity
+export type Datasource = DatasourceApi;
diff --git a/lib/datasource/index.spec.ts b/lib/datasource/index.spec.ts
index b477d9f4d8d346b9a6eb07308a4fcedc016a3e88..70e3b17251b1ebc0648636e17c1581aefcbdabeb 100644
--- a/lib/datasource/index.spec.ts
+++ b/lib/datasource/index.spec.ts
@@ -30,7 +30,7 @@ describe('datasource/index', () => {
     expect(datasource.getDatasources()).toBeDefined();
     expect(datasource.getDatasourceList()).toBeDefined();
   });
-  it('validates dataource', async () => {
+  it('validates dataource', () => {
     function validateDatasource(
       module: datasource.Datasource,
       name: string
@@ -49,13 +49,13 @@ describe('datasource/index', () => {
     expect(Array.from(dss.keys())).toEqual(Object.keys(loadedDs));
 
     for (const dsName of dss.keys()) {
-      const ds = await dss.get(dsName);
+      const ds = dss.get(dsName);
       expect(validateDatasource(ds, dsName)).toBe(true);
     }
   });
-  it('returns if digests are supported', async () => {
+  it('returns if digests are supported', () => {
     expect(
-      await datasource.supportsDigests({ datasource: datasourceGithubTags.id })
+      datasource.supportsDigests({ datasource: datasourceGithubTags.id })
     ).toBe(true);
   });
   it('returns null for no datasource', async () => {
diff --git a/lib/datasource/index.ts b/lib/datasource/index.ts
index 415557fc1e600ae19bd2435ea46c87c0c462dc09..f52ec82090170dc9f46d868cff66e4cdfae42f40 100644
--- a/lib/datasource/index.ts
+++ b/lib/datasource/index.ts
@@ -19,13 +19,12 @@ import { addMetaData } from './metadata';
 
 export * from './common';
 
-export const getDatasources = (): Map<string, Promise<Datasource>> =>
-  datasources;
+export const getDatasources = (): Map<string, Datasource> => datasources;
 export const getDatasourceList = (): string[] => Array.from(datasources.keys());
 
 const cacheNamespace = 'datasource-releases';
 
-function load(datasource: string): Promise<Datasource> {
+function load(datasource: string): Datasource {
   return datasources.get(datasource);
 }
 
@@ -170,7 +169,7 @@ async function fetchReleases(
     logger.warn('Unknown datasource: ' + datasourceName);
     return null;
   }
-  const datasource = await load(datasourceName);
+  const datasource = load(datasourceName);
   const registryUrls = resolveRegistryUrls(datasource, config.registryUrls);
   let dep: ReleaseResult = null;
   try {
@@ -275,15 +274,15 @@ export async function getPkgReleases(
   return res;
 }
 
-export async function supportsDigests(config: DigestConfig): Promise<boolean> {
-  return 'getDigest' in (await load(config.datasource));
+export function supportsDigests(config: DigestConfig): boolean {
+  return 'getDigest' in load(config.datasource);
 }
 
 export async function getDigest(
   config: DigestConfig,
   value?: string
 ): Promise<string | null> {
-  const datasource = await load(config.datasource);
+  const datasource = load(config.datasource);
   const lookupName = config.lookupName || config.depName;
   const registryUrls = resolveRegistryUrls(datasource, config.registryUrls);
   return datasource.getDigest(
@@ -292,7 +291,7 @@ export async function getDigest(
   );
 }
 
-export async function getDefaultConfig(datasource: string): Promise<object> {
-  const loadedDatasource = await load(datasource);
-  return loadedDatasource?.defaultConfig || {};
+export function getDefaultConfig(datasource: string): Promise<object> {
+  const loadedDatasource = load(datasource);
+  return Promise.resolve(loadedDatasource?.defaultConfig || {});
 }
diff --git a/lib/workers/repository/process/lookup/index.ts b/lib/workers/repository/process/lookup/index.ts
index 4a97ca511cded8c426fd6c4859b621c4aa3d3d9c..3a1bdde3da5b779c9e15e00b1eb2abcd1f1540e5 100644
--- a/lib/workers/repository/process/lookup/index.ts
+++ b/lib/workers/repository/process/lookup/index.ts
@@ -364,7 +364,7 @@ export async function lookupUpdates(
     }
   }
   // Add digests if necessary
-  if (config.newDigest || (await supportsDigests(config))) {
+  if (config.newDigest || supportsDigests(config)) {
     if (
       config.currentDigest &&
       config.datasource !== datasourceGitSubmodules.id
diff --git a/tools/generate-imports.ts b/tools/generate-imports.ts
index b8f5e1cb01d96f014d402dc9ad9f8302479a56d2..530b284894176b0445a00d54c0bcc14ebfb9173f 100644
--- a/tools/generate-imports.ts
+++ b/tools/generate-imports.ts
@@ -68,16 +68,7 @@ async function generate({
 (async () => {
   try {
     // datasources
-    shell.echo('> datasources');
-    let code = `
-import { Datasource } from './common';
-const api = new Map<string, Promise<Datasource>>();
-export default api;
-`;
-    for (const ds of findModules('lib/datasource')) {
-      code += `api.set('${ds}', import('./${ds}'));\n`;
-    }
-    await updateFile('lib/datasource/api.generated.ts', code);
+    await generate({ path: 'datasource', types: ['DatasourceApi'] });
 
     // managers
     await generate({ path: 'manager', types: ['ManagerApi'] });