diff --git a/src/uploads.ts b/src/uploads.ts index 8fd2154d..a920351c 100644 --- a/src/uploads.ts +++ b/src/uploads.ts @@ -107,10 +107,8 @@ export async function toFile( // If it's a promise, resolve it. value = await value; - // If we've been given a `File` we don't need to do anything - if (isFileLike(value)) { - return value; - } + // Use the file's options if there isn't one provided + options ??= isFileLike(value) ? { lastModified: value.lastModified, type: value.type } : {}; if (isResponseLike(value)) { const blob = await value.blob(); @@ -128,7 +126,7 @@ export async function toFile( name ||= getName(value) ?? 'unknown_file'; - if (!options?.type) { + if (!options.type) { const type = (bits[0] as any)?.type; if (typeof type === 'string') { options = { ...options, type }; diff --git a/tests/uploads.test.ts b/tests/uploads.test.ts index ee7e6269..94a4c9c0 100644 --- a/tests/uploads.test.ts +++ b/tests/uploads.test.ts @@ -54,12 +54,4 @@ describe('toFile', () => { const file = await toFile(input); expect(file.name).toEqual('uploads.test.ts'); }); - - it('does not copy File objects', async () => { - const input = new File(['foo'], 'input.jsonl', { type: 'jsonl' }); - const file = await toFile(input); - expect(file).toBe(input); - expect(file.name).toEqual('input.jsonl'); - expect(file.type).toBe('jsonl'); - }); });