fix(fs): support any UTF-8 path in writeFile (#1640)

* In the `writeFile` function, when `options.baseDir` is not set, convert `path` to URL to avoid errors caused by Chinese characters.

* fmt

* use TextEncoder

* use percent encoding

* add change file

* fmt

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
pull/1767/head
SRutile 9 months ago committed by GitHub
parent 3715f3c9a6
commit 9291e4d2ca
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -0,0 +1,5 @@
---
"fs": patch
---
Support any UTF-8 character in the writeFile API.

1
Cargo.lock generated

@ -6538,6 +6538,7 @@ dependencies = [
"glob",
"notify",
"notify-debouncer-full",
"percent-encoding",
"schemars",
"serde",
"serde_json",

@ -31,6 +31,7 @@ glob = "0.3"
notify = { version = "6", optional = true, features = ["serde"] }
notify-debouncer-full = { version = "0.3", optional = true }
dunce = { workspace = true }
percent-encoding = "2"
[features]
watch = ["notify", "notify-debouncer-full"]

File diff suppressed because one or more lines are too long

@ -1015,7 +1015,7 @@ async function writeFile(
await invoke('plugin:fs|write_file', data, {
headers: {
path: path instanceof URL ? path.toString() : path,
path: encodeURIComponent(path instanceof URL ? path.toString() : path),
options: JSON.stringify(options)
}
})

@ -855,10 +855,11 @@ pub async fn write_file<R: Runtime>(
.get("path")
.ok_or_else(|| anyhow::anyhow!("missing file path").into())
.and_then(|p| {
p.to_str()
.map_err(|e| anyhow::anyhow!("invalid path: {e}").into())
percent_encoding::percent_decode(p.as_ref())
.decode_utf8()
.map_err(|_| anyhow::anyhow!("path is not a valid UTF-8").into())
})
.and_then(|p| SafeFilePath::from_str(p).map_err(CommandError::from))?;
.and_then(|p| SafeFilePath::from_str(&p).map_err(CommandError::from))?;
let options = request
.headers()
.get("options")

Loading…
Cancel
Save