From 08b109b2a11b5046882e9fe3ad380a08a4bf32a7 Mon Sep 17 00:00:00 2001 From: thepassle Date: Thu, 6 Jul 2023 11:38:27 +0200 Subject: [PATCH 1/2] fix: avoid JSON.parsing empty responses --- packages/ajax/src/Ajax.js | 6 ++++-- packages/ajax/test/Ajax.test.js | 7 +++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/packages/ajax/src/Ajax.js b/packages/ajax/src/Ajax.js index bce865dd6..4b6e5e1a1 100644 --- a/packages/ajax/src/Ajax.js +++ b/packages/ajax/src/Ajax.js @@ -193,9 +193,11 @@ export class Ajax { /** @type {any} */ let body = responseText; + if ( - !response.headers.get('content-type') || - response.headers.get('content-type')?.includes('json') + body.length && + (!response.headers.get('content-type') || + response.headers.get('content-type')?.includes('json')) ) { try { body = JSON.parse(responseText); diff --git a/packages/ajax/test/Ajax.test.js b/packages/ajax/test/Ajax.test.js index 2c7f46d32..1a4b88c45 100644 --- a/packages/ajax/test/Ajax.test.js +++ b/packages/ajax/test/Ajax.test.js @@ -221,6 +221,13 @@ describe('Ajax', () => { } expect(thrown).to.be.true; }); + + it('doesnt throw on empty response', async () => { + fetchStub.returns(Promise.resolve(new Response('', responseInit()))); + + const { response } = await ajax.fetchJson('/foo'); + expect(response.ok); + }); }); describe('request and response interceptors', () => { From fd93cc0cc2fed569a8e001b14e681dd0af04c79b Mon Sep 17 00:00:00 2001 From: Pascal Schilp Date: Thu, 6 Jul 2023 11:41:02 +0200 Subject: [PATCH 2/2] Create chilly-bananas-talk.md --- .changeset/chilly-bananas-talk.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/chilly-bananas-talk.md diff --git a/.changeset/chilly-bananas-talk.md b/.changeset/chilly-bananas-talk.md new file mode 100644 index 000000000..a53e9adca --- /dev/null +++ b/.changeset/chilly-bananas-talk.md @@ -0,0 +1,5 @@ +--- +"@lion/ajax": patch +--- + +fix: avoid JSON.parsing empty responses