diff --git a/src/core/fs_storage.mbt b/src/core/fs_storage.mbt index d6d5148..43cf974 100644 --- a/src/core/fs_storage.mbt +++ b/src/core/fs_storage.mbt @@ -76,7 +76,7 @@ extern "js" fn fs_write_string(path : String, content : String) -> Unit = #| } ///| -extern "js" fn fs_readdir(path : String) -> Array[String] = +extern "js" fn fs_readdir_ffi(path : String) -> FixedArray[String] = #| (path) => { #| try { #| const fs = require("node:fs"); @@ -86,6 +86,10 @@ extern "js" fn fs_readdir(path : String) -> Array[String] = #| } #| } +fn fs_readdir(path : String) -> Array[String] { + Array::from_fixed_array(fs_readdir_ffi(path)) +} + ///| extern "js" fn fs_is_file(path : String) -> Bool = #| (path) => { diff --git a/src/core/git_loader.mbt b/src/core/git_loader.mbt index c633990..2e25fb0 100644 --- a/src/core/git_loader.mbt +++ b/src/core/git_loader.mbt @@ -239,7 +239,7 @@ extern "js" fn node_read_file_safe(path : String) -> Bytes? = #| } ///| -extern "js" fn node_readdir_safe(path : String) -> Array[String] = +extern "js" fn node_readdir_safe_ffi(path : String) -> FixedArray[String] = #| (path) => { #| try { #| const fs = require("node:fs"); @@ -249,6 +249,10 @@ extern "js" fn node_readdir_safe(path : String) -> Array[String] = #| } #| } +fn node_readdir_safe(path : String) -> Array[String] { + Array::from_fixed_array(node_readdir_safe_ffi(path)) +} + ///| extern "js" fn node_is_dir(path : String) -> Bool = #| (path) => { @@ -268,7 +272,7 @@ extern "js" fn node_is_file(path : String) -> Bool = #| } ///| -extern "js" fn scan_readdir(path : String) -> Array[String] = +extern "js" fn scan_readdir_ffi(path : String) -> FixedArray[String] = #| (path) => { #| try { #| const fs = require("node:fs"); @@ -278,6 +282,10 @@ extern "js" fn scan_readdir(path : String) -> Array[String] = #| } #| } +fn scan_readdir(path : String) -> Array[String] { + Array::from_fixed_array(scan_readdir_ffi(path)) +} + ///| /// Scan files in a directory recursively, skipping common non-source dirs. pub fn scan_files(root : String, limit~ : Int = 200) -> Array[String] { diff --git a/src/core/idb_git_fs.mbt b/src/core/idb_git_fs.mbt index 093bf4b..db73afb 100644 --- a/src/core/idb_git_fs.mbt +++ b/src/core/idb_git_fs.mbt @@ -65,10 +65,10 @@ extern "js" fn idb_fs_has(prefix : String, key : String) -> Bool = #| })() ///| -extern "js" fn idb_fs_list( +extern "js" fn idb_fs_list_ffi( prefix : String, dir : String, -) -> Array[String] = +) -> FixedArray[String] = #| (() => { #| return (prefix, dir) => { #| const cache = globalThis.__idb_fs_cache || {}; @@ -84,6 +84,13 @@ extern "js" fn idb_fs_list( #| }; #| })() +fn idb_fs_list( + prefix : String, + dir : String, +) -> Array[String] { + Array::from_fixed_array(idb_fs_list_ffi(prefix, dir)) +} + ///| extern "js" fn idb_fs_is_dir(prefix : String, path : String) -> Bool = #| (() => { diff --git a/src/core/r2_storage.mbt b/src/core/r2_storage.mbt index 62375eb..4542220 100644 --- a/src/core/r2_storage.mbt +++ b/src/core/r2_storage.mbt @@ -42,7 +42,7 @@ extern "js" fn r2_put(bucket_name : String, key : String, value : String) -> Uni #| })() ///| -extern "js" fn r2_list(bucket_name : String, prefix : String) -> Array[String] = +extern "js" fn r2_list_ffi(bucket_name : String, prefix : String) -> FixedArray[String] = #| (() => { #| return (bucket_name, prefix) => { #| const cache = globalThis.__r2_cache || {}; @@ -64,6 +64,10 @@ extern "js" fn r2_list(bucket_name : String, prefix : String) -> Array[String] = #| }; #| })() +fn r2_list(bucket_name : String, prefix : String) -> Array[String] { + Array::from_fixed_array(r2_list_ffi(bucket_name, prefix)) +} + ///| extern "js" fn r2_has(bucket_name : String, key : String) -> Bool = #| (() => {