mirror of
https://github.com/tauri-apps/plugins-workspace.git
synced 2026-10-10 22:38:44 +02:00
feat(fs): support ReadableStream<Unit8Array> for writeFile API (#1964)
This commit is contained in:
1 parent
ac2edc2159
commit
5092ea5e89
8 files changed
+120
-41
No files matched your search
@@ -266,6 +266,7 @@ function fromBytes(buffer: FixedSizeArray<number, 8>): number {
|
||||
const size = bytes.byteLength
|
||||
let x = 0
|
||||
for (let i = 0; i < size; i++) {
|
||||
// eslint-disable-next-line security/detect-object-injection
|
||||
const byte = bytes[i]
|
||||
x *= 0x100
|
||||
x += byte
|
||||
@@ -427,11 +428,11 @@ class FileHandle extends Resource {
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes `p.byteLength` bytes from `p` to the underlying data stream. It
|
||||
* resolves to the number of bytes written from `p` (`0` <= `n` <=
|
||||
* `p.byteLength`) or reject with the error encountered that caused the
|
||||
* Writes `data.byteLength` bytes from `data` to the underlying data stream. It
|
||||
* resolves to the number of bytes written from `data` (`0` <= `n` <=
|
||||
* `data.byteLength`) or reject with the error encountered that caused the
|
||||
* write to stop early. `write()` must reject with a non-null error if
|
||||
* would resolve to `n` < `p.byteLength`. `write()` must not modify the
|
||||
* would resolve to `n` < `data.byteLength`. `write()` must not modify the
|
||||
* slice data, even temporarily.
|
||||
*
|
||||
* @example
|
||||
@@ -1044,19 +1045,27 @@ interface WriteFileOptions {
|
||||
*/
|
||||
async function writeFile(
|
||||
path: string | URL,
|
||||
data: Uint8Array,
|
||||
data: Uint8Array | ReadableStream<Uint8Array>,
|
||||
options?: WriteFileOptions
|
||||
): Promise<void> {
|
||||
if (path instanceof URL && path.protocol !== 'file:') {
|
||||
throw new TypeError('Must be a file URL.')
|
||||
}
|
||||
|
||||
await invoke('plugin:fs|write_file', data, {
|
||||
headers: {
|
||||
path: encodeURIComponent(path instanceof URL ? path.toString() : path),
|
||||
options: JSON.stringify(options)
|
||||
if (data instanceof ReadableStream) {
|
||||
const file = await open(path, options)
|
||||
for await (const chunk of data) {
|
||||
await file.write(chunk)
|
||||
}
|
||||
})
|
||||
await file.close()
|
||||
} else {
|
||||
await invoke('plugin:fs|write_file', data, {
|
||||
headers: {
|
||||
path: encodeURIComponent(path instanceof URL ? path.toString() : path),
|
||||
options: JSON.stringify(options)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in new issue
Block a user