diff --git a/.babelrc.js b/.babelrc.js
index ab2b8606efd4..8035e082456e 100644
--- a/.babelrc.js
+++ b/.babelrc.js
@@ -11,6 +11,7 @@ module.exports = {
],
plugins: [
process.env.ROLLUP && 'external-helpers',
- process.env.PLUGINS && 'transform-es2015-modules-strip'
+ process.env.PLUGINS && 'transform-es2015-modules-strip',
+ '@babel/proposal-object-rest-spread'
].filter(Boolean)
};
diff --git a/build/rollup.config.js b/build/rollup.config.js
index 44ffac71002d..99bf637c0d89 100644
--- a/build/rollup.config.js
+++ b/build/rollup.config.js
@@ -15,7 +15,8 @@ const plugins = [
externalHelpersWhitelist: [ // include only required helpers
'defineProperties',
'createClass',
- 'inheritsLoose'
+ 'inheritsLoose',
+ 'extends'
]
})
]
diff --git a/js/src/carousel.js b/js/src/carousel.js
index 10ed2203edeb..ea443f189f06 100644
--- a/js/src/carousel.js
+++ b/js/src/carousel.js
@@ -223,7 +223,10 @@ const Carousel = (($) => {
// private
_getConfig(config) {
- config = $.extend({}, Default, config)
+ config = {
+ ...Default,
+ ...config
+ }
Util.typeCheckConfig(NAME, config, DefaultType)
return config
}
@@ -428,10 +431,16 @@ const Carousel = (($) => {
static _jQueryInterface(config) {
return this.each(function () {
let data = $(this).data(DATA_KEY)
- const _config = $.extend({}, Default, $(this).data())
+ let _config = {
+ ...Default,
+ ...$(this).data()
+ }
if (typeof config === 'object') {
- $.extend(_config, config)
+ _config = {
+ ..._config,
+ ...config
+ }
}
const action = typeof config === 'string' ? config : _config.slide
@@ -468,7 +477,10 @@ const Carousel = (($) => {
return
}
- const config = $.extend({}, $(target).data(), $(this).data())
+ const config = {
+ ...$(target).data(),
+ ...$(this).data()
+ }
const slideIndex = this.getAttribute('data-slide-to')
if (slideIndex) {
diff --git a/js/src/collapse.js b/js/src/collapse.js
index f907aec54d82..1456294f43e1 100644
--- a/js/src/collapse.js
+++ b/js/src/collapse.js
@@ -277,7 +277,10 @@ const Collapse = (($) => {
// private
_getConfig(config) {
- config = $.extend({}, Default, config)
+ config = {
+ ...Default,
+ ...config
+ }
config.toggle = Boolean(config.toggle) // coerce string values
Util.typeCheckConfig(NAME, config, DefaultType)
return config
@@ -338,12 +341,11 @@ const Collapse = (($) => {
return this.each(function () {
const $this = $(this)
let data = $this.data(DATA_KEY)
- const _config = $.extend(
- {},
- Default,
- $this.data(),
- typeof config === 'object' && config
- )
+ const _config = {
+ ...Default,
+ ...$this.data(),
+ ...typeof config === 'object' && config
+ }
if (!data && _config.toggle && /show|hide/.test(config)) {
_config.toggle = false
diff --git a/js/src/dropdown.js b/js/src/dropdown.js
index 57ee10ebdddf..8affedc6ce9e 100644
--- a/js/src/dropdown.js
+++ b/js/src/dropdown.js
@@ -210,12 +210,11 @@ const Dropdown = (($) => {
}
_getConfig(config) {
- config = $.extend(
- {},
- this.constructor.Default,
- $(this._element).data(),
- config
- )
+ config = {
+ ...this.constructor.Default,
+ ...$(this._element).data(),
+ ...config
+ }
Util.typeCheckConfig(
NAME,
@@ -262,7 +261,10 @@ const Dropdown = (($) => {
const offsetConf = {}
if (typeof this._config.offset === 'function') {
offsetConf.fn = (data) => {
- data.offsets = $.extend({}, data.offsets, this._config.offset(data.offsets) || {})
+ data.offsets = {
+ ...data.offsets,
+ ...this._config.offset(data.offsets) || {}
+ }
return data
}
} else {
diff --git a/js/src/modal.js b/js/src/modal.js
index 95565aabcceb..be3105fa150c 100644
--- a/js/src/modal.js
+++ b/js/src/modal.js
@@ -227,7 +227,10 @@ const Modal = (($) => {
// private
_getConfig(config) {
- config = $.extend({}, Default, config)
+ config = {
+ ...Default,
+ ...config
+ }
Util.typeCheckConfig(NAME, config, DefaultType)
return config
}
@@ -506,12 +509,11 @@ const Modal = (($) => {
static _jQueryInterface(config, relatedTarget) {
return this.each(function () {
let data = $(this).data(DATA_KEY)
- const _config = $.extend(
- {},
- Modal.Default,
- $(this).data(),
- typeof config === 'object' && config
- )
+ const _config = {
+ ...Modal.Default,
+ ...$(this).data(),
+ ...typeof config === 'object' && config
+ }
if (!data) {
data = new Modal(this, _config)
@@ -547,7 +549,10 @@ const Modal = (($) => {
}
const config = $(target).data(DATA_KEY) ?
- 'toggle' : $.extend({}, $(target).data(), $(this).data())
+ 'toggle' : {
+ ...$(target).data(),
+ ...$(this).data()
+ }
if (this.tagName === 'A' || this.tagName === 'AREA') {
event.preventDefault()
diff --git a/js/src/popover.js b/js/src/popover.js
index 4fb96a792e7d..1bd3b198eb3e 100644
--- a/js/src/popover.js
+++ b/js/src/popover.js
@@ -26,19 +26,25 @@ const Popover = (($) => {
const CLASS_PREFIX = 'bs-popover'
const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\s)${CLASS_PREFIX}\\S+`, 'g')
- const Default = $.extend({}, Tooltip.Default, {
- placement : 'right',
- trigger : 'click',
- content : '',
- template : '
'
- })
-
- const DefaultType = $.extend({}, Tooltip.DefaultType, {
- content : '(string|element|function)'
- })
+ const Default = {
+ ...Tooltip.Default,
+ ...{
+ placement : 'right',
+ trigger : 'click',
+ content : '',
+ template : ''
+ }
+ }
+
+ const DefaultType = {
+ ...Tooltip.DefaultType,
+ ...{
+ content : '(string|element|function)'
+ }
+ }
const ClassName = {
FADE : 'fade',
diff --git a/js/src/scrollspy.js b/js/src/scrollspy.js
index 3a13d954ac57..fd5197e383fd 100644
--- a/js/src/scrollspy.js
+++ b/js/src/scrollspy.js
@@ -171,7 +171,10 @@ const ScrollSpy = (($) => {
// private
_getConfig(config) {
- config = $.extend({}, Default, config)
+ config = {
+ ...Default,
+ ...config
+ }
if (typeof config.target !== 'string') {
let id = $(config.target).attr('id')
diff --git a/js/src/tooltip.js b/js/src/tooltip.js
index 7cefd0be6aa1..002dea429835 100644
--- a/js/src/tooltip.js
+++ b/js/src/tooltip.js
@@ -501,10 +501,13 @@ const Tooltip = (($) => {
})
if (this.config.selector) {
- this.config = $.extend({}, this.config, {
- trigger : 'manual',
- selector : ''
- })
+ this.config = {
+ ...this.config,
+ ...{
+ trigger : 'manual',
+ selector : ''
+ }
+ }
} else {
this._fixTitle()
}
@@ -613,12 +616,11 @@ const Tooltip = (($) => {
}
_getConfig(config) {
- config = $.extend(
- {},
- this.constructor.Default,
- $(this.element).data(),
- config
- )
+ config = {
+ ...this.constructor.Default,
+ ...$(this.element).data(),
+ ...config
+ }
if (typeof config.delay === 'number') {
config.delay = {
diff --git a/package-lock.json b/package-lock.json
index f73bcd33e267..bdc5fa2e0795 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -4,6 +4,21 @@
"lockfileVersion": 1,
"requires": true,
"dependencies": {
+ "@babel/plugin-proposal-object-rest-spread": {
+ "version": "7.0.0-beta.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.0.0-beta.5.tgz",
+ "integrity": "sha512-P0JS8FMo1qoBTChGuHPCEf2iPaZicZVDGbJwqiho/zwY0aA/QLbFk+kSvCbSugJ402oDnefekDTCiEVr0xYTIQ==",
+ "dev": true,
+ "requires": {
+ "@babel/plugin-syntax-object-rest-spread": "7.0.0-beta.5"
+ }
+ },
+ "@babel/plugin-syntax-object-rest-spread": {
+ "version": "7.0.0-beta.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.0.0-beta.5.tgz",
+ "integrity": "sha512-E7dwmPLRkewpMx4R7fOoig1WgH9uA9AEpCe83B+OJpAGxP1CmnUAcnaJzYyiN5PjsB9pSaJ4dAlLVRTup2xLOg==",
+ "dev": true
+ },
"abbrev": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
@@ -416,7 +431,7 @@
"babel-types": "7.0.0-beta.0",
"babylon": "7.0.0-beta.22",
"debug": "3.1.0",
- "globals": "10.2.0",
+ "globals": "10.3.0",
"invariant": "2.2.2",
"lodash": "4.17.4"
}
@@ -1110,7 +1125,7 @@
"babel-types": "7.0.0-beta.2",
"babylon": "7.0.0-beta.25",
"debug": "3.1.0",
- "globals": "10.2.0",
+ "globals": "10.3.0",
"invariant": "2.2.2",
"lodash": "4.17.4"
}
@@ -2070,9 +2085,9 @@
}
},
"eslint-plugin-compat": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-2.0.1.tgz",
- "integrity": "sha512-6LtsFQsrFyPGLBVJMnQEmUEY1Sc0Trpz56i/y3qTCA5JKc1KePKS5q5Xcc8LoGgPyeDw3IfnyYqS4Q7vR1Ffeg==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-2.1.0.tgz",
+ "integrity": "sha512-ml+CAjn9c6E4Vi1U/CBLtm9GBEtWw1rNtoPxCf9kj/FVyDhlOlffYAzZ1J1yQ1eeN4JqZ3gVSoKnKcuk/80oWA==",
"dev": true,
"requires": {
"babel-runtime": "6.26.0",
@@ -2746,9 +2761,9 @@
}
},
"globals": {
- "version": "10.2.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-10.2.0.tgz",
- "integrity": "sha512-Kqkw0LTOBKEwtVuBiw52QwD6qI1TkJZQKdIYUfVEitfPbSiSmclVicQV0hPS3oqVBkr+O/TPpKk7+dRn1h5Hog==",
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-10.3.0.tgz",
+ "integrity": "sha512-1g6qO5vMbiPHbRTDtR9JVjRkAhkgH4nSANYGyx1eOfqgxcMnYMMD+7MjmjfzXjwFpVUE/7/NzF+jQxYE7P4r7A==",
"dev": true
},
"globby": {
@@ -4290,9 +4305,9 @@
"dev": true
},
"node-sass": {
- "version": "4.5.3",
- "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.5.3.tgz",
- "integrity": "sha1-0JydEXlkEjnRuX/8YjH9zsU+FWg=",
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.6.0.tgz",
+ "integrity": "sha512-rh0CvkxpYdQdbWx4EQfunmG0+99BVyVwQHlFE+yUzc6lteF5K3WUcJ0bdmv9E9CqQA1RfuMyvmpDP99cmBObow==",
"dev": true,
"requires": {
"async-foreach": "0.1.3",
@@ -6465,7 +6480,7 @@
"specificity": "0.3.2",
"string-width": "2.1.1",
"style-search": "0.1.0",
- "sugarss": "1.0.0",
+ "sugarss": "1.0.1",
"svg-tags": "1.0.0",
"table": "4.0.2"
},
@@ -6590,9 +6605,9 @@
}
},
"sugarss": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-1.0.0.tgz",
- "integrity": "sha1-ZeUbOVhDL7cNVFGmi7M+MtDPHvc=",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-1.0.1.tgz",
+ "integrity": "sha512-3qgLZytikQQEVn1/FrhY7B68gPUUGY3R1Q1vTiD5xT+Ti1DP/8iZuwFet9ONs5+bmL8pZoDQ6JrQHVgrNlK6mA==",
"dev": true,
"requires": {
"postcss": "6.0.14"
@@ -6765,9 +6780,9 @@
"dev": true
},
"uglify-js": {
- "version": "3.1.6",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.1.6.tgz",
- "integrity": "sha512-/rseyxEKEVMBo8279lqpoJgD6C/i/CIi+9TJDvWmb+Xo6mqMKwjA8Io3IMHlcXQzj99feR6zrN8m3wqqvm/nYA==",
+ "version": "3.1.7",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.1.7.tgz",
+ "integrity": "sha512-ZRs/A6LJhLac7SN3Hv22LXEtndFliqTkfTilYSx84cxHXoC2bbhdSOsUZqRvfwEAjlIE4AK8pLd47+RxINCTjg==",
"dev": true,
"requires": {
"commander": "2.11.0",
diff --git a/package.json b/package.json
index 4f0efda65dd3..1e3971ec53e2 100644
--- a/package.json
+++ b/package.json
@@ -80,6 +80,7 @@
"popper.js": "^1.12.6"
},
"devDependencies": {
+ "@babel/plugin-proposal-object-rest-spread": "7.0.0-beta.5",
"autoprefixer": "^7.1.2",
"babel-cli": "7.0.0-beta.2",
"babel-eslint": "^8.0.0",