11import type { MergeableStore } from '../../@types/mergeable-store/index.d.ts' ;
22import type {
33 PersistedContent ,
4+ PersisterListener ,
45 Persists as PersistsType ,
56} from '../../@types/persisters/index.d.ts' ;
67import type {
@@ -14,6 +15,11 @@ import {
1415} from '../../common/json.ts' ;
1516import { createCustomPersister } from '../common/create.ts' ;
1617
18+ type FileSystemObserver = {
19+ observe : ( handle : FileSystemFileHandle ) => Promise < void > ;
20+ disconnect : ( ) => void ;
21+ } ;
22+
1723export const createOpfsPersister = ( (
1824 store : Store | MergeableStore ,
1925 handle : FileSystemFileHandle ,
@@ -31,9 +37,17 @@ export const createOpfsPersister = ((
3137 await writable . close ( ) ;
3238 } ;
3339
34- const addPersisterListener = ( ) => { } ;
40+ const addPersisterListener = async (
41+ listener : PersisterListener < PersistsType . StoreOrMergeableStore > ,
42+ ) : Promise < FileSystemObserver > => {
43+ // @ts -expect-error FileSystemObserver is not yet typed
44+ const observer = new FileSystemObserver ( ( ) => listener ( ) ) ;
45+ await observer . observe ( handle ) ;
46+ return observer ;
47+ } ;
3548
36- const delPersisterListener = ( ) => { } ;
49+ const delPersisterListener = ( observer : FileSystemObserver ) =>
50+ observer ?. disconnect ( ) ;
3751
3852 return createCustomPersister (
3953 store ,
0 commit comments