You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			45 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			TypeScript
		
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			TypeScript
		
	
| import * as BetterSqlite3 from 'better-sqlite3';
 | |
| 
 | |
| let globalInstance: BetterSqlite3.Database | null = null;
 | |
| 
 | |
| export function assertGlobalInstance(): BetterSqlite3.Database {
 | |
|   if (!globalInstance) {
 | |
|     throw new Error('globalInstance is not initialized.');
 | |
|   }
 | |
|   return globalInstance;
 | |
| }
 | |
| 
 | |
| export function isInstanceInitialized(): boolean {
 | |
|   return !!globalInstance;
 | |
| }
 | |
| 
 | |
| export function assertGlobalInstanceOrInstance(
 | |
|   instance?: BetterSqlite3.Database | null
 | |
| ): BetterSqlite3.Database {
 | |
|   // if none of them are initialized, throw
 | |
|   if (!globalInstance && !instance) {
 | |
|     throw new Error('neither globalInstance nor initialized is initialized.');
 | |
|   }
 | |
|   // otherwise, return which ever is true, priority to the global one
 | |
|   return globalInstance || (instance as BetterSqlite3.Database);
 | |
| }
 | |
| 
 | |
| export function initDbInstanceWith(instance: BetterSqlite3.Database) {
 | |
|   if (globalInstance) {
 | |
|     throw new Error('already init');
 | |
|   }
 | |
|   globalInstance = instance;
 | |
| }
 | |
| 
 | |
| export function closeDbInstance() {
 | |
|   if (!globalInstance) {
 | |
|     return;
 | |
|   }
 | |
|   const dbRef = globalInstance;
 | |
|   globalInstance = null;
 | |
|   // SQLLite documentation suggests that we run `PRAGMA optimize` right before
 | |
|   // closing the database connection.
 | |
|   dbRef.pragma('optimize');
 | |
|   dbRef.close();
 | |
| }
 |