Skip to content

Commit fa2618c

Browse files
committed
[opfs] Experimental observing
1 parent 7e8372d commit fa2618c

File tree

2 files changed

+22
-5
lines changed

2 files changed

+22
-5
lines changed

src/persisters/persister-opfs/index.ts

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import type {MergeableStore} from '../../@types/mergeable-store/index.d.ts';
22
import type {
33
PersistedContent,
4+
PersisterListener,
45
Persists as PersistsType,
56
} from '../../@types/persisters/index.d.ts';
67
import type {
@@ -14,6 +15,11 @@ import {
1415
} from '../../common/json.ts';
1516
import {createCustomPersister} from '../common/create.ts';
1617

18+
type FileSystemObserver = {
19+
observe: (handle: FileSystemFileHandle) => Promise<void>;
20+
disconnect: () => void;
21+
};
22+
1723
export 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,

test/jest/environment.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,12 @@ export default class TinyBaseEnvironment extends TestEnvironment {
2020
setImmediate,
2121
clearImmediate,
2222
});
23-
this.global.navigator.storage = {
24-
getDirectory: () => fsa({mode: 'readwrite'}).dir,
25-
};
23+
24+
// OPFS mocks
25+
const opfs = fsa({mode: 'readwrite'});
26+
this.global.navigator.storage = {getDirectory: () => opfs.dir};
27+
this.global.FileSystemObserver = opfs.FileSystemObserver;
28+
2629
await super.setup();
2730
}
2831

0 commit comments

Comments
 (0)