@@ -7,6 +7,8 @@ export class OPFSStorage extends AbstractStorage {
77 #handle;
88 #io;
99
10+ static #isAvailable?: boolean ;
11+
1012 constructor ( root : FileSystemDirectoryHandle , handle : FileSystemFileHandle , reader : FileSystemSyncAccessHandle ) {
1113 super ( ) ;
1214 this . #root = root ;
@@ -38,16 +40,33 @@ export class OPFSStorage extends AbstractStorage {
3840 await this . #root. removeEntry ( this . #handle. name ) ;
3941 }
4042
41- static isAvailable ( ) {
43+ static async #computeIsAvailable ( ) {
4244 if ( typeof navigator === 'undefined' )
4345 return false ;
4446
45- return 'storage' in navigator && 'getDirectory' in navigator . storage ;
47+ if ( 'storage' in navigator && 'getDirectory' in navigator . storage ) {
48+ try {
49+ await navigator . storage . getDirectory ( ) ;
50+ return true ;
51+ } catch {
52+ return false ;
53+ }
54+ }
55+
56+ return false ;
57+ }
58+
59+ static async isAvailable ( ) {
60+ if ( this . #isAvailable === undefined ) {
61+ this . #isAvailable = await this . #computeIsAvailable( ) ;
62+ }
63+
64+ return this . #isAvailable;
4665 }
4766}
4867
4968export const removeFromFileStorage = async ( filename : string ) => {
50- if ( OPFSStorage . isAvailable ( ) ) {
69+ if ( await OPFSStorage . isAvailable ( ) ) {
5170 const root = await navigator . storage . getDirectory ( ) ;
5271
5372 try {
@@ -60,7 +79,7 @@ export const removeFromFileStorage = async (filename: string) => {
6079}
6180
6281export const clearFileStorage = async ( ) => {
63- if ( OPFSStorage . isAvailable ( ) ) {
82+ if ( await OPFSStorage . isAvailable ( ) ) {
6483 const root = await navigator . storage . getDirectory ( ) ;
6584 try {
6685 await root . removeEntry ( COBALT_PROCESSING_DIR , { recursive : true } ) ;
0 commit comments