feat(api): Add append option to writeFile apis (#7636)

* feat(api): Add `append` option to writeFile apis.

* wording

* fmt

* Update .changes/fs-append-file.md


* clippeeeyyyy
This commit is contained in:
Fabian-Lars 2023-08-16 18:09:05 +02:00 committed by GitHub
parent 964d81ff01
commit 58d6b899e2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 30 additions and 2 deletions

View File

@ -0,0 +1,6 @@
---
'@tauri-apps/api': 'patch:enhance'
'tauri': 'patch:enhance'
---
Add `append` option to `FsOptions` in the `fs` JS module, used in `writeTextFile` and `writeBinaryFile`, to be able to append to existing files instead of overwriting it.

View File

@ -23,7 +23,10 @@ use serde::{
};
use tauri_macros::{command_enum, module_command_handler, CommandModule};
use std::fmt::{Debug, Formatter};
use std::{
fmt::{Debug, Formatter},
fs::OpenOptions,
};
use std::{
fs,
fs::File,
@ -49,6 +52,8 @@ pub struct FileOperationOptions {
/// The base directory of the operation.
/// The directory path of the BaseDirectory will be the prefix of the defined file path.
pub dir: Option<BaseDirectory>,
/// Whether writeFile should append to a file or truncate it.
pub append: Option<bool>,
}
/// The API descriptor.
@ -166,6 +171,11 @@ impl Cmd {
contents: Vec<u8>,
options: Option<FileOperationOptions>,
) -> super::Result<()> {
let append = options
.as_ref()
.and_then(|opt| opt.append)
.unwrap_or_default();
let resolved_path = resolve_path(
&context.config,
&context.package_info,
@ -173,7 +183,12 @@ impl Cmd {
path,
options.and_then(|o| o.dir),
)?;
File::create(&resolved_path)
OpenOptions::new()
.append(append)
.write(true)
.create(true)
.open(&resolved_path)
.with_context(|| format!("path: {}", resolved_path.display()))
.map_err(Into::into)
.and_then(|mut f| f.write_all(&contents).map_err(|err| err.into()))
@ -409,6 +424,7 @@ mod tests {
fn arbitrary(g: &mut Gen) -> Self {
Self {
dir: Option::arbitrary(g),
append: Option::arbitrary(g),
}
}
}

View File

@ -110,6 +110,12 @@ export enum BaseDirectory {
*/
interface FsOptions {
dir?: BaseDirectory
/**
* Whether the content should overwrite the content of the file or append to it.
*
* @since 1.5.0
*/
append?: boolean
// note that adding fields here needs a change in the writeBinaryFile check
}