From 9cdac8e947927c2863a91ad39e42c9e865670018 Mon Sep 17 00:00:00 2001 From: Joren Broekema Date: Tue, 1 Aug 2023 10:45:27 +0200 Subject: [PATCH] fix: clone response when reading the response for error (#2049) --- .changeset/old-camels-deliver.md | 5 +++++ package-lock.json | 4 ++-- packages/ajax/src/Ajax.js | 3 ++- packages/ajax/test/Ajax.test.js | 2 ++ 4 files changed, 11 insertions(+), 3 deletions(-) create mode 100644 .changeset/old-camels-deliver.md diff --git a/.changeset/old-camels-deliver.md b/.changeset/old-camels-deliver.md new file mode 100644 index 000000000..41847044e --- /dev/null +++ b/.changeset/old-camels-deliver.md @@ -0,0 +1,5 @@ +--- +'@lion/ajax': patch +--- + +Clone response before reading and parsing the body. diff --git a/package-lock.json b/package-lock.json index 9dfcb0add..06d28515a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22384,7 +22384,7 @@ }, "packages/ajax": { "name": "@lion/ajax", - "version": "1.1.4", + "version": "1.2.0", "license": "MIT" }, "packages/singleton-manager": { @@ -22393,7 +22393,7 @@ }, "packages/ui": { "name": "@lion/ui", - "version": "0.3.4", + "version": "0.3.5", "license": "MIT", "dependencies": { "@bundled-es-modules/message-format": "^6.0.4", diff --git a/packages/ajax/src/Ajax.js b/packages/ajax/src/Ajax.js index 933c6794d..d5267d157 100644 --- a/packages/ajax/src/Ajax.js +++ b/packages/ajax/src/Ajax.js @@ -203,7 +203,8 @@ export class Ajax { * @returns {Promise} */ async __parseBody(response) { - let responseText = await response.text(); + // clone the response, so the consumer can also read it out manually as well + let responseText = await response.clone().text(); const { jsonPrefix } = this.__config; if (typeof jsonPrefix === 'string' && responseText.startsWith(jsonPrefix)) { diff --git a/packages/ajax/test/Ajax.test.js b/packages/ajax/test/Ajax.test.js index d990cfa16..f8d0a321b 100644 --- a/packages/ajax/test/Ajax.test.js +++ b/packages/ajax/test/Ajax.test.js @@ -215,6 +215,8 @@ describe('Ajax', () => { expect(_e.request).to.be.an.instanceOf(Request); expect(_e.response).to.be.an.instanceOf(Response); expect(_e.body).to.equal('my response'); + const bodyFromResponse = await _e.response.text(); + expect(bodyFromResponse).to.equal('my response'); thrown = true; } expect(thrown).to.be.true;