diff --git a/packages/ipfs-core-utils/package.json b/packages/ipfs-core-utils/package.json index 343452667a..f37161a509 100644 --- a/packages/ipfs-core-utils/package.json +++ b/packages/ipfs-core-utils/package.json @@ -59,6 +59,7 @@ "uint8arrays": "^2.1.6" }, "devDependencies": { + "@web-std/file": "^1.1.0", "aegir": "^34.0.2", "rimraf": "^3.0.2" } diff --git a/packages/ipfs-core-utils/src/files/normalise-input/utils.js b/packages/ipfs-core-utils/src/files/normalise-input/utils.js index 990546971b..4cbf6ed59b 100644 --- a/packages/ipfs-core-utils/src/files/normalise-input/utils.js +++ b/packages/ipfs-core-utils/src/files/normalise-input/utils.js @@ -1,7 +1,5 @@ 'use strict' -const { Blob } = globalThis - /** * @param {any} obj * @returns {obj is ArrayBufferView|ArrayBuffer} @@ -15,7 +13,7 @@ function isBytes (obj) { * @returns {obj is Blob} */ function isBlob (obj) { - return typeof Blob !== 'undefined' && obj instanceof Blob + return obj.constructor && (obj.constructor.name === 'Blob' || obj.constructor.name === 'File') } /** diff --git a/packages/ipfs-core-utils/test/files/normalise-input.spec.js b/packages/ipfs-core-utils/test/files/normalise-input.spec.js index e052368f85..1b2ec38964 100644 --- a/packages/ipfs-core-utils/test/files/normalise-input.spec.js +++ b/packages/ipfs-core-utils/test/files/normalise-input.spec.js @@ -6,6 +6,7 @@ const { expect } = require('aegir/utils/chai') const blobToIt = require('blob-to-it') const uint8ArrayFromString = require('uint8arrays/from-string') const all = require('it-all') +const { File } = require('@web-std/file') const { Blob, ReadableStream } = globalThis const { isBrowser, isWebWorker, isElectronRenderer } = require('ipfs-utils/src/env') @@ -35,7 +36,12 @@ async function verifyNormalisation (input) { let content = input[0].content if (isBrowser || isWebWorker || isElectronRenderer) { - expect(content).to.be.an.instanceOf(Blob) + try { + expect(content).to.be.an.instanceOf(Blob) + } catch (err) { + // Fallback to instance of File + expect(content).to.be.an.instanceOf(File) + } content = blobToIt(content) } @@ -173,6 +179,14 @@ describe('normalise-input', function () { testInputType(BLOB, 'Blob', false) }) + describe('@web-std/file', () => { + it('normalizes File input', async () => { + const FILE = new File([BUFFER()], 'test-file.txt') + + await testContent(FILE) + }) + }) + describe('Iterable', () => { testInputType(ARRAY, 'Iterable', false) })