// 📦 IndexedDB Helper /** @type {()=>Promise} */ function openDB() { return new Promise((resolve, reject) => { const request = indexedDB.open('directory-handle-db', 1); request.onupgradeneeded = () => { request.result.createObjectStore('handles'); }; request.onsuccess = () => resolve(request.result); request.onerror = () => reject(request.error); }); } // 💾 Store a directory handle /** @type {(handle:FileSystemDirectoryHandle)=>Promise} */ export async function setDirectoryHandle(handle) { const db = await openDB(); const tx = db.transaction('handles', 'readwrite'); tx.objectStore('handles').put(handle, 'user-folder'); console.log("handle set", handle); await tx.done; } // 📂 Retrieve a directory handle /** @type {()=>Promise} */ export async function getDirectoryHandle() { const db = await openDB(); const tx = db.transaction('handles', 'readonly'); return new Promise((resolve, reject) => { const getRequest = tx.objectStore('handles').get('user-folder'); getRequest.onsuccess = () => { return resolve(getRequest.result); } getRequest.onerror = () => { console.error('Error retrieving directory handle:', getRequest.error); return resolve(false); } }); } /** @type {(handle:FileSystemDirectoryHandle, parts:string[], create?:boolean)=>Promise} */ export async function Dig(handle, parts, create=false) { try { let filePointer = handle; for(let i=0; iPromise} */ export async function Read(handle, parts) { const fileHandle = await Dig(handle, parts); if(fileHandle) { const file = await fileHandle.getFile(); return await file.text(); } return false; } /** @type {(handle:FileSystemDirectoryHandle, parts:string[], text:string)=>Promise} */ export async function Write(handle, parts, text) { const fileHandle = await Dig(handle, parts, true); if(fileHandle) { const writeable = await fileHandle.createWritable(); await writeable.write(text); await writeable.close(); return true; } return false; } // // 🔐 Check or request permission // async function verifyPermission(handle, mode = 'readwrite') { // const opts = { mode }; // if ((await handle.queryPermission(opts)) === 'granted') return true; // if ((await handle.requestPermission(opts)) === 'granted') return true; // return false; // } // // // // 📌 Request persistent storage // async function ensurePersistentStorage() { // if (navigator.storage && navigator.storage.persist) { // const granted = await navigator.storage.persist(); // console.log(granted // ? '✅ Persistent storage granted.' // : '⚠️ Storage may be cleared under pressure.'); // } // }