From 47abab06208eec638e8c9a86835b8930b3f631bb Mon Sep 17 00:00:00 2001 From: MoustaphaDev <81974850+MoustaphaDev@users.noreply.github.com> Date: Fri, 20 May 2022 08:38:14 +0000 Subject: [PATCH 1/4] docs(readme): fix typo (#81) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9a4dea32..938e9024 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,7 @@ const { users } = await $fetch('/api/users') For binary content types, `$fetch` will instead return a `Blob` object. -You can optionally provde a different parser than destr, or specify `blob`, `arrayBuffer` or `text` to force parsing the body with the respective `FetchResponse` method. +You can optionally provide a different parser than destr, or specify `blob`, `arrayBuffer` or `text` to force parsing the body with the respective `FetchResponse` method. ```js // Use JSON.parse From dc237d489a68936996c9ab95dce35ca9e0d2b2e4 Mon Sep 17 00:00:00 2001 From: Pascal Sthamer <10992664+P4sca1@users.noreply.github.com> Date: Fri, 20 May 2022 10:39:12 +0200 Subject: [PATCH 2/4] fix: only serialize JSON bodies (#80) --- src/fetch.ts | 8 +++++++- test/index.test.ts | 9 ++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/fetch.ts b/src/fetch.ts index 086875ad..281cbbb2 100644 --- a/src/fetch.ts +++ b/src/fetch.ts @@ -106,7 +106,13 @@ export function createFetch (globalOptions: CreateFetchOptions): $Fetch { } if (ctx.options.body && isPayloadMethod(ctx.options.method)) { if (isJSONSerializable(ctx.options.body)) { - ctx.options.body = JSON.stringify(ctx.options.body) + // Automatically JSON stringify request bodies, when not already a string. + ctx.options.body = typeof ctx.options.body === 'string' + ? ctx.options.body + : JSON.stringify(ctx.options.body) + + // Set Content-Type and Accept headers to application/json by default + // for JSON serializable request bodies. ctx.options.headers = new Headers(ctx.options.headers) if (!ctx.options.headers.has('content-type')) { ctx.options.headers.set('content-type', 'application/json') diff --git a/test/index.test.ts b/test/index.test.ts index 1a6b7fe4..d5c5fbb2 100644 --- a/test/index.test.ts +++ b/test/index.test.ts @@ -1,6 +1,6 @@ import { listen } from 'listhen' import { getQuery, joinURL } from 'ufo' -import { createApp, useBody } from 'h3' +import { createApp, useBody, useRawBody } from 'h3' import { Blob } from 'fetch-blob' import { FormData } from 'formdata-polyfill/esm.min.js' import { describe, beforeEach, afterEach, it, expect } from 'vitest' @@ -20,6 +20,7 @@ describe('ohmyfetch', () => { res.setHeader('Content-Type', 'application/octet-stream') return new Blob(['binary']) }) + .use('/echo', async req => ({ body: await useRawBody(req) })) listener = await listen(app) }) @@ -73,6 +74,12 @@ describe('ohmyfetch', () => { } }) + it('does not stringify body when content type != application/json', async () => { + const msg = '"Hallo von Pascal"' + const { body } = await $fetch(getURL('echo'), { method: 'POST', body: msg, headers: { 'Content-Type': 'text/plain' } }) + expect(body).to.deep.eq(msg) + }) + it('Bypass FormData body', async () => { const data = new FormData() data.append('foo', 'bar') From 96a9cbc847b7df3e30b6634e0f71c04dfdb14424 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 20 May 2022 10:39:21 +0200 Subject: [PATCH 3/4] chore(deps): update all non-major dependencies (#78) Co-authored-by: Renovate Bot --- package.json | 10 ++--- pnpm-lock.yaml | 115 ++++++++++++++++++++++--------------------------- 2 files changed, 56 insertions(+), 69 deletions(-) diff --git a/package.json b/package.json index 748375d5..9d81c72f 100644 --- a/package.json +++ b/package.json @@ -45,14 +45,14 @@ "dependencies": { "destr": "^1.1.1", "node-fetch-native": "^0.1.3", - "ufo": "^0.8.3", - "undici": "^5.0.0" + "ufo": "^0.8.4", + "undici": "^5.2.0" }, "devDependencies": { "@nuxtjs/eslint-config-typescript": "latest", "@types/flat": "latest", "@types/node": "latest", - "c8": "^7.11.2", + "c8": "^7.11.3", "eslint": "latest", "fetch-blob": "^3.1.5", "formdata-polyfill": "^4.0.10", @@ -62,7 +62,7 @@ "standard-version": "latest", "typescript": "latest", "unbuild": "latest", - "vitest": "^0.10.0" + "vitest": "^0.12.6" }, - "packageManager": "pnpm@7.0.1" + "packageManager": "pnpm@7.1.2" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d48f5fc2..d4d5b751 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,7 +4,7 @@ specifiers: '@nuxtjs/eslint-config-typescript': latest '@types/flat': latest '@types/node': latest - c8: ^7.11.2 + c8: ^7.11.3 destr: ^1.1.1 eslint: latest fetch-blob: ^3.1.5 @@ -15,32 +15,32 @@ specifiers: node-fetch-native: ^0.1.3 standard-version: latest typescript: latest - ufo: ^0.8.3 + ufo: ^0.8.4 unbuild: latest - undici: ^5.0.0 - vitest: ^0.10.0 + undici: ^5.2.0 + vitest: ^0.12.6 dependencies: destr: 1.1.1 node-fetch-native: 0.1.3 - ufo: 0.8.3 - undici: 5.0.0 + ufo: 0.8.4 + undici: 5.2.0 devDependencies: '@nuxtjs/eslint-config-typescript': 10.0.0_hcfsmds2fshutdssjqluwm76uu '@types/flat': 5.0.2 - '@types/node': 17.0.32 - c8: 7.11.2 + '@types/node': 17.0.34 + c8: 7.11.3 eslint: 8.15.0 fetch-blob: 3.1.5 formdata-polyfill: 4.0.10 h3: 0.7.8 jiti: 1.13.0 listhen: 0.2.11 - standard-version: 9.3.2 + standard-version: 9.5.0 typescript: 4.6.4 unbuild: 0.7.4 - vitest: 0.10.0_c8@7.11.2 + vitest: 0.12.6_c8@7.11.3 packages: @@ -476,15 +476,15 @@ packages: dev: true /@types/json5/0.0.29: - resolution: {integrity: sha1-7ihweulOEdK4J7y+UnC86n8+ce4=} + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} dev: true /@types/minimist/1.2.2: resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} dev: true - /@types/node/17.0.32: - resolution: {integrity: sha512-eAIcfAvhf/BkHcf4pkLJ7ECpBAhh9kcxRBpip9cTiO+hf+aJrsxYxBeS6OXvOd9WqNAJmavXVpZvY1rBjNsXmw==} + /@types/node/17.0.34: + resolution: {integrity: sha512-XImEz7XwTvDBtzlTnm8YvMqGW/ErMWBsKZ+hMTvnDIjGCKxwK5Xpc+c/oQjOauwq8M4OS11hEkpjX8rrI/eEgA==} dev: true /@types/normalize-package-data/2.4.1: @@ -494,7 +494,7 @@ packages: /@types/resolve/1.17.1: resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} dependencies: - '@types/node': 17.0.32 + '@types/node': 17.0.34 dev: true /@typescript-eslint/eslint-plugin/5.22.0_tal4xlmvnofklupd3hwjtzfb4q: @@ -646,7 +646,7 @@ packages: dev: true /add-stream/1.0.0: - resolution: {integrity: sha1-anmQQ3ynNtXhKI25K9MmbV9csqo=} + resolution: {integrity: sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==} dev: true /ajv/6.12.6: @@ -686,7 +686,7 @@ packages: dev: true /array-ify/1.0.0: - resolution: {integrity: sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=} + resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} dev: true /array-includes/3.1.4: @@ -716,7 +716,7 @@ packages: dev: true /arrify/1.0.1: - resolution: {integrity: sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=} + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} engines: {node: '>=0.10.0'} dev: true @@ -729,7 +729,7 @@ packages: dev: true /boolbase/1.0.0: - resolution: {integrity: sha1-aN/1++YMUes3cl6p4+0xDcwed24=} + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} dev: true /brace-expansion/1.1.11: @@ -773,8 +773,8 @@ packages: semver: 7.3.7 dev: true - /c8/7.11.2: - resolution: {integrity: sha512-6ahJSrhS6TqSghHm+HnWt/8Y2+z0hM/FQyB1ybKhAR30+NYL9CTQ1uwHxuWw6U7BHlHv6wvhgOrH81I+lfCkxg==} + /c8/7.11.3: + resolution: {integrity: sha512-6YBmsaNmqRm9OS3ZbIiL2EZgi1+Xc4O24jL3vMYGE6idixYuGdy76rIfIdltSKDj9DpLNrcXSonUTR1miBD0wA==} engines: {node: '>=10.12.0'} hasBin: true dependencies: @@ -858,7 +858,7 @@ packages: dev: true /check-error/1.0.2: - resolution: {integrity: sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=} + resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==} dev: true /ci-info/3.3.0: @@ -866,7 +866,7 @@ packages: dev: true /clean-regexp/1.0.0: - resolution: {integrity: sha1-jffHquUf02h06PjQW5GAvBGj/tc=} + resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} engines: {node: '>=4'} dependencies: escape-string-regexp: 1.0.5 @@ -969,8 +969,8 @@ packages: resolution: {integrity: sha512-IpVePh16EbbB02V+UA+HQnnPIohgXvJRxHcS5+Uwk4AT5LjzCZJm5sp/yqs5C6KZJ1jMsV4paEV13BN1pvDuxQ==} dev: true - /conventional-changelog-conventionalcommits/4.6.1: - resolution: {integrity: sha512-lzWJpPZhbM1R0PIzkwzGBCnAkH5RKJzJfFQZcl/D+2lsJxAwGnDKBqn/F4C1RD31GJNn8NuKWQzAZDAVXPp2Mw==} + /conventional-changelog-conventionalcommits/4.6.3: + resolution: {integrity: sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==} engines: {node: '>=10'} dependencies: compare-func: 2.0.0 @@ -1055,14 +1055,14 @@ packages: through2: 4.0.2 dev: true - /conventional-changelog/3.1.24: - resolution: {integrity: sha512-ed6k8PO00UVvhExYohroVPXcOJ/K1N0/drJHx/faTH37OIZthlecuLIRX/T6uOp682CAoVoFpu+sSEaeuH6Asg==} + /conventional-changelog/3.1.25: + resolution: {integrity: sha512-ryhi3fd1mKf3fSjbLXOfK2D06YwKNic1nC9mWqybBHdObPd8KJ2vjaXZfYj1U23t+V8T8n0d7gwnc9XbIdFbyQ==} engines: {node: '>=10'} dependencies: conventional-changelog-angular: 5.0.13 conventional-changelog-atom: 2.0.8 conventional-changelog-codemirror: 2.0.8 - conventional-changelog-conventionalcommits: 4.6.1 + conventional-changelog-conventionalcommits: 4.6.3 conventional-changelog-core: 4.2.4 conventional-changelog-ember: 2.0.9 conventional-changelog-eslint: 3.0.9 @@ -2185,13 +2185,6 @@ packages: fetch-blob: 3.1.5 dev: true - /fs-access/1.0.1: - resolution: {integrity: sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=} - engines: {node: '>=0.10.0'} - dependencies: - null-check: 1.0.0 - dev: true - /fs-extra/10.0.1: resolution: {integrity: sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==} engines: {node: '>=12'} @@ -2371,7 +2364,7 @@ packages: cookie-es: 0.5.0 destr: 1.1.1 radix3: 0.1.2 - ufo: 0.8.3 + ufo: 0.8.4 dev: true /handlebars/4.7.7: @@ -3013,8 +3006,8 @@ packages: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} dev: true - /nanoid/3.3.1: - resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==} + /nanoid/3.3.4: + resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true dev: true @@ -3077,11 +3070,6 @@ packages: boolbase: 1.0.0 dev: true - /null-check/1.0.0: - resolution: {integrity: sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=} - engines: {node: '>=0.10.0'} - dev: true - /object-inspect/1.12.0: resolution: {integrity: sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==} dev: true @@ -3303,11 +3291,11 @@ packages: util-deprecate: 1.0.2 dev: true - /postcss/8.4.12: - resolution: {integrity: sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg==} + /postcss/8.4.14: + resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==} engines: {node: ^10 || ^12 || >=14} dependencies: - nanoid: 3.3.1 + nanoid: 3.3.4 picocolors: 1.0.0 source-map-js: 1.0.2 dev: true @@ -3626,22 +3614,21 @@ packages: readable-stream: 3.6.0 dev: true - /standard-version/9.3.2: - resolution: {integrity: sha512-u1rfKP4o4ew7Yjbfycv80aNMN2feTiqseAhUhrrx2XtdQGmu7gucpziXe68Z4YfHVqlxVEzo4aUA0Iu3VQOTgQ==} + /standard-version/9.5.0: + resolution: {integrity: sha512-3zWJ/mmZQsOaO+fOlsa0+QK90pwhNd042qEcw6hKFNoLFs7peGyvPffpEBbK/DSGPbyOvli0mUIFv5A4qTjh2Q==} engines: {node: '>=10'} hasBin: true dependencies: chalk: 2.4.2 - conventional-changelog: 3.1.24 + conventional-changelog: 3.1.25 conventional-changelog-config-spec: 2.1.0 - conventional-changelog-conventionalcommits: 4.6.1 + conventional-changelog-conventionalcommits: 4.6.3 conventional-recommended-bump: 6.1.0 detect-indent: 6.1.0 detect-newline: 3.1.0 dotgitignore: 2.1.0 figures: 3.2.0 find-up: 5.0.0 - fs-access: 1.0.1 git-semver-tags: 4.1.1 semver: 7.3.7 stringify-package: 1.0.1 @@ -3770,8 +3757,8 @@ packages: readable-stream: 3.6.0 dev: true - /tinypool/0.1.2: - resolution: {integrity: sha512-fvtYGXoui2RpeMILfkvGIgOVkzJEGediv8UJt7TxdAOY8pnvUkFg/fkvqTfXG9Acc9S17Cnn1S4osDc2164guA==} + /tinypool/0.1.3: + resolution: {integrity: sha512-2IfcQh7CP46XGWGGbdyO4pjcKqsmVqFAPcXfPxcPXmOWt9cYkTP9HcDmGgsfijYoAEc4z9qcpM/BaBz46Y9/CQ==} engines: {node: '>=14.0.0'} dev: true @@ -3862,8 +3849,8 @@ packages: hasBin: true dev: true - /ufo/0.8.3: - resolution: {integrity: sha512-AIkk06G21y/P+NCatfU+1qldCmI0XCszZLn8AkuKotffF3eqCvlce0KuwM7ZemLE/my0GSYADOAeM5zDYWMB+A==} + /ufo/0.8.4: + resolution: {integrity: sha512-/+BmBDe8GvlB2nIflWasLLAInjYG0bC9HRnfEpNi4sw77J2AJNnEVnTDReVrehoh825+Q/evF3THXTAweyam2g==} /uglify-js/3.15.4: resolution: {integrity: sha512-vMOPGDuvXecPs34V74qDKk4iJ/SN4vL3Ow/23ixafENYvtrNvtbcgUeugTcUGRGsOF/5fU8/NYSL5Hyb3l1OJA==} @@ -3917,8 +3904,8 @@ packages: - supports-color dev: true - /undici/5.0.0: - resolution: {integrity: sha512-VhUpiZ3No1DOPPQVQnsDZyfcbTTcHdcgWej1PdFnSvOeJmOVDgiOHkunJmBLfmjt4CqgPQddPVjSWW0dsTs5Yg==} + /undici/5.2.0: + resolution: {integrity: sha512-XY6+NS3WH9b3TKOHeNz2CjR+qrVz/k4fO9g3etPpLozRvULoQmZ1+dk9JbIz40ehn27xzFk4jYVU2MU3Nle62A==} engines: {node: '>=12.18'} dev: false @@ -3968,8 +3955,8 @@ packages: spdx-expression-parse: 3.0.1 dev: true - /vite/2.9.6: - resolution: {integrity: sha512-3IffdrByHW95Yjv0a13TQOQfJs7L5dVlSPuTt432XLbRMriWbThqJN2k/IS6kXn5WY4xBLhK9XoaWay1B8VzUw==} + /vite/2.9.9: + resolution: {integrity: sha512-ffaam+NgHfbEmfw/Vuh6BHKKlI/XIAhxE5QSS7gFLIngxg171mg1P3a4LSRME0z2ZU1ScxoKzphkipcYwSD5Ew==} engines: {node: '>=12.2.0'} hasBin: true peerDependencies: @@ -3985,15 +3972,15 @@ packages: optional: true dependencies: esbuild: 0.14.36 - postcss: 8.4.12 + postcss: 8.4.14 resolve: 1.22.0 rollup: 2.70.1 optionalDependencies: fsevents: 2.3.2 dev: true - /vitest/0.10.0_c8@7.11.2: - resolution: {integrity: sha512-8UXemUg9CA4QYppDTsDV76nH0e1p6C8lV9q+o9i0qMSK9AQ7vA2sjoxtkDP0M+pwNmc3ZGYetBXgSJx0M1D/gg==} + /vitest/0.12.6_c8@7.11.3: + resolution: {integrity: sha512-YWbCTv0XKBuBw5YtuW/iufuguoi8QhGpYyi2g57Oo7akpscMkkWTAaZGgY0ux1oJJtO/pc/8GFt0EF32WFBUUQ==} engines: {node: '>=v14.16.0'} hasBin: true peerDependencies: @@ -4013,12 +4000,12 @@ packages: dependencies: '@types/chai': 4.3.1 '@types/chai-subset': 1.3.3 - c8: 7.11.2 + c8: 7.11.3 chai: 4.3.6 local-pkg: 0.4.1 - tinypool: 0.1.2 + tinypool: 0.1.3 tinyspy: 0.3.2 - vite: 2.9.6 + vite: 2.9.9 transitivePeerDependencies: - less - sass From d62d7ea7fc04b94b9c0bb8108464381073356de9 Mon Sep 17 00:00:00 2001 From: Pooya Parsa Date: Fri, 20 May 2022 10:53:58 +0200 Subject: [PATCH 4/4] chore(release): 0.4.18 --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5d37fb1b..e454f3ac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [0.4.18](https://github.com/unjs/ohmyfetch/compare/v0.4.17...v0.4.18) (2022-05-20) + + +### Bug Fixes + +* only serialize JSON bodies ([#80](https://github.com/unjs/ohmyfetch/issues/80)) ([dc237d4](https://github.com/unjs/ohmyfetch/commit/dc237d489a68936996c9ab95dce35ca9e0d2b2e4)) + ### [0.4.17](https://github.com/unjs/ohmyfetch/compare/v0.4.16...v0.4.17) (2022-05-11) diff --git a/package.json b/package.json index 9d81c72f..69ab23ad 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ohmyfetch", - "version": "0.4.17", + "version": "0.4.18", "description": "oh-my-fetch", "repository": "unjs/ohmyfetch", "license": "MIT",