Skip to content

Commit c741b35

Browse files
committed
fix(api/{fs/web.js,internal/pickers.js}): fix save file picker and web handle writes
1 parent 89b3d77 commit c741b35

File tree

2 files changed

+14
-5
lines changed

2 files changed

+14
-5
lines changed

api/fs/web.js

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/* global ReadableStream, WritableStream, Blob */
2+
import { isBufferLike, toBuffer, splitBuffer } from '../util.js'
23
import { DEFAULT_STREAM_HIGH_WATER_MARK } from './stream.js'
3-
import { isBufferLike, toBuffer } from '../util.js'
44
import { NotAllowedError } from '../errors.js'
55
import { readFileSync } from './index.js'
66
import mime from '../mime.js'
@@ -282,7 +282,7 @@ export async function createFileSystemWritableFileStream (handle, options) {
282282

283283
const file = await handle.getFile()
284284
let offset = 0
285-
let fd = null
285+
let fd = file?.[kFileDescriptor] || null
286286

287287
if (options?.keepExistingData === true) {
288288
try {
@@ -350,7 +350,12 @@ export async function createFileSystemWritableFileStream (handle, options) {
350350
}
351351

352352
const buffer = toBuffer(data)
353-
await fd.write(buffer, 0, buffer.byteLength, offset)
353+
const buffers = splitBuffer(buffer, 16 * 1024)
354+
while (buffers.length) {
355+
const buffer = buffers.shift()
356+
await fd.write(buffer, 0, buffer.byteLength, offset)
357+
offset += buffer.byteLength
358+
}
354359
}
355360
}
356361

@@ -384,7 +389,7 @@ export async function createFileSystemFileHandle (file, options = null) {
384389
return path.basename(file)
385390
}
386391

387-
return file.name
392+
return file?.name ?? ''
388393
}
389394

390395
get kind () {

api/internal/pickers.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import { SecurityError } from '../errors.js'
22
import application from '../application.js'
33
import path from '../path.js'
4+
import fs from '../fs/promises.js'
45

56
import {
67
createFileSystemDirectoryHandle,
78
createFileSystemFileHandle,
9+
createFile,
810
FileSystemHandle
911
} from '../fs/web.js'
1012

@@ -281,8 +283,10 @@ export async function showSaveFilePicker (options = null) {
281283
}
282284

283285
bookmarks.temporary.set(filename, null)
286+
const fd = await fs.open(filename, 'w+')
287+
const file = await createFile(filename, { fd })
284288

285-
return await createFileSystemFileHandle(filename)
289+
return await createFileSystemFileHandle(file)
286290
}
287291

288292
export default {

0 commit comments

Comments
 (0)