diff --git a/CHANGELOG.md b/CHANGELOG.md index 6c89dcff74dc..30fdc5274061 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ ## Changelog ##### Unreleased +- Fixed work of `fetch` with polyfilled `URLSearchParams`, [#674](https://github.com/zloirock/core-js/issues/674) - `package-lock.json` no longer generated in libraries ##### 3.3.3 - 2019.10.22 diff --git a/packages/core-js/modules/es.promise.js b/packages/core-js/modules/es.promise.js index 7b457fd61eed..298d2c5cfaf1 100644 --- a/packages/core-js/modules/es.promise.js +++ b/packages/core-js/modules/es.promise.js @@ -2,7 +2,7 @@ var $ = require('../internals/export'); var IS_PURE = require('../internals/is-pure'); var global = require('../internals/global'); -var path = require('../internals/path'); +var getBuiltIn = require('../internals/get-built-in'); var NativePromise = require('../internals/native-promise-constructor'); var redefine = require('../internals/redefine'); var redefineAll = require('../internals/redefine-all'); @@ -35,7 +35,7 @@ var PromiseConstructor = NativePromise; var TypeError = global.TypeError; var document = global.document; var process = global.process; -var $fetch = global.fetch; +var $fetch = getBuiltIn('fetch'); var versions = process && process.versions; var v8 = versions && versions.v8 || ''; var newPromiseCapability = newPromiseCapabilityModule.f; @@ -289,7 +289,7 @@ if (FORCED) { // wrap fetch result if (typeof $fetch == 'function') $({ global: true, enumerable: true, forced: true }, { // eslint-disable-next-line no-unused-vars - fetch: function fetch(input) { + fetch: function fetch(input /* , init */) { return promiseResolve(PromiseConstructor, $fetch.apply(global, arguments)); } }); @@ -303,7 +303,7 @@ $({ global: true, wrap: true, forced: FORCED }, { setToStringTag(PromiseConstructor, PROMISE, false, true); setSpecies(PROMISE); -PromiseWrapper = path[PROMISE]; +PromiseWrapper = getBuiltIn(PROMISE); // statics $({ target: PROMISE, stat: true, forced: FORCED }, { diff --git a/packages/core-js/modules/web.url-search-params.js b/packages/core-js/modules/web.url-search-params.js index 7d046ba04b65..e09b6fc036ec 100644 --- a/packages/core-js/modules/web.url-search-params.js +++ b/packages/core-js/modules/web.url-search-params.js @@ -2,6 +2,7 @@ // TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env` require('../modules/es.array.iterator'); var $ = require('../internals/export'); +var getBuiltIn = require('../internals/get-built-in'); var USE_NATIVE_URL = require('../internals/native-url'); var redefine = require('../internals/redefine'); var redefineAll = require('../internals/redefine-all'); @@ -11,12 +12,17 @@ var InternalStateModule = require('../internals/internal-state'); var anInstance = require('../internals/an-instance'); var hasOwn = require('../internals/has'); var bind = require('../internals/bind-context'); +var classof = require('../internals/classof'); var anObject = require('../internals/an-object'); var isObject = require('../internals/is-object'); +var create = require('../internals/object-create'); +var createPropertyDescriptor = require('../internals/create-property-descriptor'); var getIterator = require('../internals/get-iterator'); var getIteratorMethod = require('../internals/get-iterator-method'); var wellKnownSymbol = require('../internals/well-known-symbol'); +var $fetch = getBuiltIn('fetch'); +var Headers = getBuiltIn('Headers'); var ITERATOR = wellKnownSymbol('iterator'); var URL_SEARCH_PARAMS = 'URLSearchParams'; var URL_SEARCH_PARAMS_ITERATOR = URL_SEARCH_PARAMS + 'Iterator'; @@ -307,6 +313,34 @@ $({ global: true, forced: !USE_NATIVE_URL }, { URLSearchParams: URLSearchParamsConstructor }); +// Wrap `fetch` for correct work with polyfilled `URLSearchParams` +// https://github.com/zloirock/core-js/issues/674 +if (!USE_NATIVE_URL && typeof $fetch == 'function' && typeof Headers == 'function') { + $({ global: true, enumerable: true, forced: true }, { + fetch: function fetch(input /* , init */) { + var args = [input]; + var init, body, headers; + if (arguments.length > 1) { + init = arguments[1]; + if (isObject(init)) { + body = init.body; + if (classof(body) === URL_SEARCH_PARAMS) { + headers = new Headers(init.headers); + if (!headers.has('content-type')) { + headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8'); + } + init = create(init, { + body: createPropertyDescriptor(0, String(body)), + headers: createPropertyDescriptor(0, headers) + }); + } + } + args.push(init); + } return $fetch.apply(this, args); + } + }); +} + module.exports = { URLSearchParams: URLSearchParamsConstructor, getState: getInternalParamsState