diff --git a/packages/ipfs-core-utils/package.json b/packages/ipfs-core-utils/package.json index 343452667a..cd13ad6420 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.2", "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..afd9642b7c 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} @@ -12,10 +10,12 @@ function isBytes (obj) { /** * @param {any} obj - * @returns {obj is Blob} + * @returns {obj is globalThis.Blob} */ function isBlob (obj) { - return typeof Blob !== 'undefined' && obj instanceof Blob + return obj.constructor && + (obj.constructor.name === 'Blob' || obj.constructor.name === 'File') && + typeof obj.stream === 'function' } /** 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..ef8f1ae774 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') @@ -173,6 +174,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) })