@ -44,11 +44,11 @@ import { Contact } from "@/db/tables/contacts";
import { QueryExecResult , DatabaseExecResult } from "@/interfaces/database" ;
// =================================================
// CACHING INFRASTRUCTURE
// TYPESCRIPT INTERFACES
// =================================================
/ * *
* Cache entry with TTL support
* Cache entry interface for storing data with TTL
* /
interface CacheEntry < T > {
data : T ;
@ -56,11 +56,25 @@ interface CacheEntry<T> {
ttl : number ; // milliseconds
}
/ * *
* Vue component interface that uses the PlatformServiceMixin
* This provides proper typing for the cache system
* /
interface VueComponentWithMixin {
_platformService : PlatformService | null ;
$options : { name? : string } ;
activeDid? : string ;
platformService ( ) : PlatformService ;
}
/ * *
* Global cache store for mixin instances
* Uses WeakMap to avoid memory leaks when components are destroyed
* /
const componentCaches = new WeakMap < any , Map < string , CacheEntry < any > >> ( ) ;
const componentCaches = new WeakMap <
VueComponentWithMixin ,
Map < string , CacheEntry < unknown > >
> ( ) ;
/ * *
* Cache configuration constants
@ -90,32 +104,41 @@ export const PlatformServiceMixin = {
* Created once per component lifecycle
* /
platformService ( ) : PlatformService {
if ( ! ( this as any ) . _platformService ) {
( this as any ) . _platformService = PlatformServiceFactory . getInstance ( ) ;
if ( ! ( this as unknown as VueComponentWithMixin ) . _platformService ) {
( this as unknown as VueComponentWithMixin ) . _platformService =
PlatformServiceFactory . getInstance ( ) ;
}
return ( this as any ) . _platformService ;
return ( this as unknown as VueComponentWithMixin ) . _platformService ! ;
} ,
/ * *
* Platform detection utilities
* /
isCapacitor ( ) : boolean {
return ( this as any ) . platformService ( ) . isCapacitor ( ) ;
return ( this as unknown as VueComponentWithMixin )
. platformService ( )
. isCapacitor ( ) ;
} ,
isWeb ( ) : boolean {
return ( this as any ) . platformService ( ) . isWeb ( ) ;
return ( this as unknown as VueComponentWithMixin )
. platformService ( )
. isWeb ( ) ;
} ,
isElectron ( ) : boolean {
return ( this as any ) . platformService ( ) . isElectron ( ) ;
return ( this as unknown as VueComponentWithMixin )
. platformService ( )
. isElectron ( ) ;
} ,
/ * *
* Platform capabilities
* /
capabilities() {
return ( this as any ) . platformService ( ) . getCapabilities ( ) ;
return ( this as unknown as VueComponentWithMixin )
. platformService ( )
. getCapabilities ( ) ;
} ,
} ,
@ -127,11 +150,11 @@ export const PlatformServiceMixin = {
/ * *
* Get or initialize cache for this component instance
* /
_getCache ( ) : Map < string , CacheEntry < any > > {
let cache = componentCaches . get ( this ) ;
_getCache ( ) : Map < string , CacheEntry < unknown > > {
let cache = componentCaches . get ( this as unknown as VueComponentWithMixin ) ;
if ( ! cache ) {
cache = new Map ( ) ;
componentCaches . set ( this , cache ) ;
componentCaches . set ( this as unknown as VueComponentWithMixin , cache ) ;
}
return cache ;
} ,
@ -139,7 +162,7 @@ export const PlatformServiceMixin = {
/ * *
* Check if cache entry is valid ( not expired )
* /
_isCacheValid ( entry : CacheEntry < any > ) : boolean {
_isCacheValid ( entry : CacheEntry < unknown > ) : boolean {
return Date . now ( ) - entry . timestamp < entry . ttl ;
} ,
@ -150,7 +173,7 @@ export const PlatformServiceMixin = {
const cache = this . _getCache ( ) ;
const entry = cache . get ( key ) ;
if ( entry && this . _isCacheValid ( entry ) ) {
return entry . data ;
return entry . data as T ;
}
cache . delete ( key ) ; // Clean up expired entries
return null ;