diff --git a/packages/fiber/src/native/polyfills.ts b/packages/fiber/src/native/polyfills.ts index d3bade8317..49baad2edd 100644 --- a/packages/fiber/src/native/polyfills.ts +++ b/packages/fiber/src/native/polyfills.ts @@ -161,7 +161,19 @@ export function polyfills() { .then(async (uri) => { const base64 = await fs.readAsStringAsync(uri, { encoding: fs.EncodingType.Base64 }) const data = Buffer.from(base64, 'base64') - onLoad?.(data.buffer) + + switch (this.responseType) { + case 'arrayBuffer': + return onLoad?.(data.buffer) + case 'blob': + // @ts-ignore + return onLoad?.(new Blob([data.buffer])) + // case 'document': + case 'json': + return onLoad?.(JSON.parse(THREE.LoaderUtils.decodeText(data))) + default: + return onLoad?.(THREE.LoaderUtils.decodeText(data)) + } }) .catch((error) => { onError?.(error) diff --git a/packages/fiber/tests/native/polyfills.test.ts b/packages/fiber/tests/native/polyfills.test.ts index 24c895d343..93cc68e7be 100644 --- a/packages/fiber/tests/native/polyfills.test.ts +++ b/packages/fiber/tests/native/polyfills.test.ts @@ -26,12 +26,16 @@ describe('polyfills', () => { it('loads files via the file system', async () => { const asset = 1 - const file = await new THREE.FileLoader().loadAsync(asset as any) + const loader = new THREE.FileLoader() + loader.setResponseType('arrayBuffer') + const file = await loader.loadAsync(asset as any) expect(typeof (file as ArrayBuffer).byteLength).toBe('number') // TODO: ArrayBuffer instanceof }) it('loads files via http', async () => { - const file = await new THREE.FileLoader().loadAsync('https://example.com/test.png') + const loader = new THREE.FileLoader() + loader.setResponseType('arrayBuffer') + const file = await loader.loadAsync('https://example.com/test.png') expect(typeof (file as ArrayBuffer).byteLength).toBe('number') // TODO: ArrayBuffer instanceof }) })