node and browser bindings for gleam

add remove entry and get directory handle to file_system

Changed files
+51 -5
src
+1 -1
gleam.toml
··· 1 1 name = "plinth" 2 - version = "0.5.3" 2 + version = "0.5.4" 3 3 description = "Bindings to Node.js and browser platform APIs" 4 4 target = "javascript" 5 5
+22 -2
src/file_system_ffi.mjs
··· 8 8 } 9 9 } 10 10 11 - export async function getFileHandle(directoryHandle, name) { 11 + export function name(handle) { 12 + return handle.name 13 + } 14 + 15 + export async function getDirectoryHandle(directoryHandle, name, create) { 12 16 try { 13 - return new Ok(await directoryHandle.getFileHandle(name)); 17 + return new Ok(await directoryHandle.getDirectoryHandle(name, { create })); 18 + } catch (error) { 19 + return new Error(error.toString()); 20 + } 21 + } 22 + 23 + export async function getFileHandle(directoryHandle, name, create) { 24 + try { 25 + return new Ok(await directoryHandle.getFileHandle(name, { create })); 26 + } catch (error) { 27 + return new Error(error.toString()); 28 + } 29 + } 30 + 31 + export async function removeEntry(directoryHandle, name, recursive) { 32 + try { 33 + return new Ok(await directoryHandle.removeEntry(name, { recursive })); 14 34 } catch (error) { 15 35 return new Error(error.toString()); 16 36 }
+28 -2
src/plinth/browser/file_system.gleam
··· 2 2 import gleam/javascript/promise.{type Promise} 3 3 import plinth/browser/file.{type File} 4 4 5 - pub type DirectoryHandle 5 + pub type Handle(a) 6 + 7 + pub type D 8 + 9 + pub type F 10 + 11 + pub type DirectoryHandle = 12 + Handle(D) 6 13 7 - pub type FileHandle 14 + pub type FileHandle = 15 + Handle(F) 8 16 9 17 @external(javascript, "../../file_system_ffi.mjs", "showDirectoryPicker") 10 18 pub fn show_directory_picker() -> Promise(Result(DirectoryHandle, String)) 11 19 20 + @external(javascript, "../../file_system_ffi.mjs", "name") 21 + pub fn name(handle: Handle(a)) -> String 22 + 23 + @external(javascript, "../../file_system_ffi.mjs", "getDirectoryHandle") 24 + pub fn get_directory_handle( 25 + handle: DirectoryHandle, 26 + name: String, 27 + create: Bool, 28 + ) -> Promise(Result(DirectoryHandle, String)) 29 + 12 30 @external(javascript, "../../file_system_ffi.mjs", "getFileHandle") 13 31 pub fn get_file_handle( 14 32 handle: DirectoryHandle, 15 33 name: String, 34 + create: Bool, 16 35 ) -> Promise(Result(FileHandle, String)) 36 + 37 + @external(javascript, "../../file_system_ffi.mjs", "removeEntry") 38 + pub fn remove_entry( 39 + handle: DirectoryHandle, 40 + name: String, 41 + create: Bool, 42 + ) -> Promise(Result(Nil, String)) 17 43 18 44 @external(javascript, "../../file_system_ffi.mjs", "allEntries") 19 45 pub fn all_entries(