diff --git a/lib/plugin.js b/lib/plugin.js index 40e93fd..fe00b49 100644 --- a/lib/plugin.js +++ b/lib/plugin.js @@ -57,9 +57,9 @@ class HTTP { } create(options) { - const { retry, timeout, prefixUrl, headers } = this._defaults + const { retry, timeout, prefixUrl, headers, searchParams } = this._defaults - return createHttpInstance(defu(options, { retry, timeout, prefixUrl, headers })) + return createHttpInstance(defu(options, { retry, timeout, prefixUrl, headers, searchParams })) } } @@ -82,7 +82,23 @@ for (let method of ['get', 'head', 'delete', 'post', 'put', 'patch']) { } } - const _options = { ...this._defaults, ...options } + const _options = defu(options, this._defaults) + + // Merge searchParams (mix strings, objects, and URLSearchParams instances) + if (this._defaults.searchParams && options && options.searchParams) { + const params1 = new URLSearchParams(this._defaults.searchParams); + const params2 = new URLSearchParams(options.searchParams); + + for (let [key] of params2.entries()) { + // params2 overrides params1 to let's remove any param with the same key + params1.delete(key) + } + + for (let [key, val] of params2.entries()) { + params1.append(key, val); + } + _options.searchParams = params1 + } if (/^https?/.test(url)) { delete _options.prefixUrl diff --git a/package.json b/package.json index 411d4f3..674b74a 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "consola": "^2.15.0", "defu": "^3.2.2", "destr": "^1.0.1", - "ky": "^0.25.1", + "ky": "^0.31.3", "node-fetch": "^2.6.1", "web-streams-polyfill": "^3.0.1" }, diff --git a/yarn.lock b/yarn.lock index 0fc6792..28e1e8c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6973,10 +6973,10 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== -ky@^0.25.1: - version "0.25.1" - resolved "https://registry.yarnpkg.com/ky/-/ky-0.25.1.tgz#0df0bd872a9cc57e31acd5dbc1443547c881bfbc" - integrity sha512-PjpCEWlIU7VpiMVrTwssahkYXX1by6NCT0fhTUX34F3DTinARlgMpriuroolugFPcMgpPWrOW4mTb984Qm1RXA== +ky@^0.31.3: + version "0.31.3" + resolved "https://registry.yarnpkg.com/ky/-/ky-0.31.3.tgz#f00e72b9c0467ab19b0b20f15daf7dff09f67dde" + integrity sha512-YDDQKG0Lt4PFSPZGJI8WKAm5y+1ebbeA306am+4nT7riX13wjNVD5sR/QOKtgsaQaARwrdUHlv0M9kJ1qv+Jug== last-call-webpack-plugin@^3.0.0: version "3.0.0"