All files / app/core/services storage-provider.factory.ts

63.15% Statements 12/19
53.33% Branches 8/15
66.66% Functions 2/3
63.15% Lines 12/19

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60              1x   1x 1x 1x 1x 1x                   17x   4x   3x   2x     8x       1x                                              
import { InjectionToken } from '@angular/core';
import { IStorageProvider } from '../domain/interfaces/storage.interface';
import { LocalStorageService } from './local-storage.service';
import { IndexedDbStorageService } from './indexed-db-storage.service';
import { IPFSStorageService } from './ipfs/ipfs-storage.service';
import { HeliaStorageService } from './helia/helia-storage.service';
 
export const STORAGE_PROVIDER = new InjectionToken<IStorageProvider>('storage.provider');
 
export enum StorageType {
  IN_MEMORY = 'in-memory',
  INDEXED_DB = 'indexed-db',
  IPFS = 'ipfs',
  HELIA = 'helia'
}
 
export function storageProviderFactory(
  localStorageService: LocalStorageService,
  indexedDbService: IndexedDbStorageService,
  ipfsStorageService: IPFSStorageService,
  heliaStorageService: HeliaStorageService,
  storageType: StorageType = StorageType.IN_MEMORY
): IStorageProvider {
  switch (storageType) {
    case StorageType.INDEXED_DB:
      return indexedDbService;
    case StorageType.IPFS:
      return ipfsStorageService;
    case StorageType.HELIA:
      return heliaStorageService;
    case StorageType.IN_MEMORY:
    default:
      return localStorageService;
  }
}
 
export const STORAGE_TYPE = new InjectionToken<StorageType>('storage.type');
 
export function getStorageType(): StorageType {
  // Check user preference from localStorage
  Iif (typeof window !== 'undefined') {
    const savedPreference = localStorage.getItem('cas-storage-type');
    
    // Return saved preference if it's a valid storage type
    Iif (savedPreference === StorageType.INDEXED_DB || 
        savedPreference === StorageType.IPFS ||
        savedPreference === StorageType.HELIA ||
        savedPreference === StorageType.IN_MEMORY) {
      return savedPreference as StorageType;
    }
    
    // Check if IndexedDB is available for default
    Iif ('indexedDB' in window) {
      return StorageType.INDEXED_DB;
    }
  }
  
  // Default to in-memory storage
  return StorageType.IN_MEMORY;
}