async function createDatabase()

in server/src/lsifServer.ts [103:146]


async function createDatabase(folder: WorkspaceFolder): Promise<Database | undefined> {
	let uri: URI = URI.parse(folder.uri);
	const fsPath = uri.fsPath;
	const extName = path.extname(fsPath);
	if (fs.existsSync(fsPath)) {
		try {
			let database: Database | undefined;
			if (extName === '.db') {
				const Sqlite = await import('better-sqlite3');
				const db = new Sqlite(fsPath, { readonly: true });
				let format = 'graph';
				try {
					format = db.prepare('Select * from format f').get().format;
				} catch (err) {
					// Old DBs have no format. Treat is as graph
				} finally {
					db.close();
				}
				if (format === 'blob') {
					const module = await import('./blobStore');
					database = new module.BlobStore();
				} else {
					const module = await import ('./graphStore');
					database = new module.GraphStore();
				}
			} else if (extName === '.lsif') {
				const module = await import('./jsonStore');
				database = new module.JsonStore();
			}
			if (database !== undefined) {
				let promise = database.load(fsPath, (workspaceRoot: string) => {
					return new Transformer(uri, workspaceRoot);
				}).then(() => {
					return database!;
				});
				databases.set(getDatabaseKey(folder.uri), promise);
				return promise;
			}
		} catch (error) {
			throw error;
		}
	}
	return Promise.reject(new Error(`Can't create database for ${folder.uri}`));
}