@@ -3,16 +3,15 @@ import { Chunk, StorageAdapter, StorageKey } from '@automerge/automerge-repo';
33export class OPFSStorageAdapter extends StorageAdapter {
44 private baseDirectory : string ;
55 private baseDirectoryHandle : FileSystemDirectoryHandle ;
6- private root : FileSystemDirectoryHandle ;
76
87 constructor ( baseDirectory : string = "automerge-repo-data" ) {
98 super ( ) ;
109 this . baseDirectory = baseDirectory ;
11- this . initialize ( ) ;
1210 }
1311
1412 async load ( key : StorageKey ) : Promise < Uint8Array | undefined > {
1513 const fileName = getKey ( key ) ;
14+ await this . initialize ( ) ;
1615
1716 try {
1817 const fileHandle = await this . baseDirectoryHandle . getFileHandle ( fileName ) ;
@@ -21,13 +20,14 @@ export class OPFSStorageAdapter extends StorageAdapter {
2120 return new Uint8Array ( arrayBuffer ) ;
2221 } catch ( error ) {
2322 // don't throw if file not found
24- if ( error . code === "NotFoundError" ) return undefined
23+ if ( error . name === "NotFoundError" ) return undefined
2524 throw error ;
2625 }
2726 }
2827
2928 async save ( key : StorageKey , data : Uint8Array ) : Promise < void > {
3029 const fileName = getKey ( key ) ;
30+ await this . initialize ( ) ;
3131
3232 const fileHandle = await this . baseDirectoryHandle . getFileHandle ( fileName , { create : true } ) ;
3333 const fileWritable = await fileHandle . createWritable ( ) ;
@@ -37,19 +37,21 @@ export class OPFSStorageAdapter extends StorageAdapter {
3737
3838 async remove ( key : StorageKey ) : Promise < void > {
3939 const fileName = getKey ( key ) ;
40+ await this . initialize ( ) ;
4041
4142 try {
4243 return this . baseDirectoryHandle . removeEntry ( fileName ) ;
4344 } catch ( error ) {
4445 // don't throw if file not found
45- if ( error . code === "NotFoundError" ) return undefined
46+ if ( error . name === "NotFoundError" ) return undefined
4647 throw error ;
4748 }
4849 }
4950
5051 async loadRange ( keyPrefix : StorageKey ) : Promise < Chunk [ ] > {
5152 const chunks : Chunk [ ] = [ ] ;
5253 const prefix = getKey ( keyPrefix ) ;
54+ await this . initialize ( ) ;
5355
5456 for await ( const [ name ] of this . baseDirectoryHandle ) {
5557 if ( name . startsWith ( prefix ) ) {
@@ -65,6 +67,7 @@ export class OPFSStorageAdapter extends StorageAdapter {
6567
6668 async removeRange ( keyPrefix : StorageKey ) : Promise < void > {
6769 const prefix = getKey ( keyPrefix ) ;
70+ await this . initialize ( ) ;
6871
6972 for await ( const [ name ] of this . baseDirectoryHandle ) {
7073 if ( name . startsWith ( prefix ) ) {
@@ -74,8 +77,10 @@ export class OPFSStorageAdapter extends StorageAdapter {
7477 }
7578
7679 private async initialize ( ) {
77- this . root = await navigator . storage . getDirectory ( ) ;
78- this . baseDirectoryHandle = await this . root . getDirectoryHandle ( this . baseDirectory , { create : true } ) ;
80+ if ( ! this . baseDirectoryHandle ) {
81+ const root = await navigator . storage . getDirectory ( ) ;
82+ this . baseDirectoryHandle = await root . getDirectoryHandle ( this . baseDirectory , { create : true } ) ;
83+ }
7984 }
8085
8186}
0 commit comments