0
0
mirror of https://github.com/twbs/bootstrap.git synced 2024-11-29 11:24:18 +01:00
Bootstrap/build/build-plugins.js

184 lines
4.8 KiB
JavaScript
Raw Normal View History

/*!
* Script to build our plugins to use them separately.
2019-01-08 07:05:26 +01:00
* Copyright 2019 The Bootstrap Authors
* Copyright 2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
'use strict'
2019-02-26 12:20:34 +01:00
const path = require('path')
const rollup = require('rollup')
const babel = require('rollup-plugin-babel')
const banner = require('./banner.js')
const plugins = [
babel({
2019-02-26 12:20:34 +01:00
// Only transpile our source code
exclude: 'node_modules/**',
// Include only required helpers
externalHelpersWhitelist: [
'defineProperties',
'createClass',
'inheritsLoose',
'defineProperty',
2019-07-11 11:29:35 +02:00
'objectSpread2'
]
})
]
const bsPlugins = {
2018-07-25 11:29:16 +02:00
Data: path.resolve(__dirname, '../js/src/dom/data.js'),
EventHandler: path.resolve(__dirname, '../js/src/dom/event-handler.js'),
2018-07-25 11:29:16 +02:00
Manipulator: path.resolve(__dirname, '../js/src/dom/manipulator.js'),
Polyfill: path.resolve(__dirname, '../js/src/dom/polyfill.js'),
SelectorEngine: path.resolve(__dirname, '../js/src/dom/selector-engine.js'),
2019-03-13 15:23:50 +01:00
Alert: path.resolve(__dirname, '../js/src/alert/alert.js'),
2019-03-25 11:32:02 +01:00
Button: path.resolve(__dirname, '../js/src/button/button.js'),
2019-03-27 11:58:00 +01:00
Carousel: path.resolve(__dirname, '../js/src/carousel/carousel.js'),
2019-04-03 20:38:28 +02:00
Collapse: path.resolve(__dirname, '../js/src/collapse/collapse.js'),
2019-04-10 10:46:50 +02:00
Dropdown: path.resolve(__dirname, '../js/src/dropdown/dropdown.js'),
2019-05-01 15:43:40 +02:00
Modal: path.resolve(__dirname, '../js/src/modal/modal.js'),
2019-05-08 21:32:50 +02:00
Popover: path.resolve(__dirname, '../js/src/popover/popover.js'),
2019-06-30 11:37:25 +02:00
ScrollSpy: path.resolve(__dirname, '../js/src/scrollspy/scrollspy.js'),
2019-07-22 15:24:17 +02:00
Tab: path.resolve(__dirname, '../js/src/tab/tab.js'),
2019-03-29 19:43:56 +01:00
Toast: path.resolve(__dirname, '../js/src/toast/toast.js'),
2019-05-10 21:57:27 +02:00
Tooltip: path.resolve(__dirname, '../js/src/tooltip/tooltip.js')
}
2019-03-13 15:23:50 +01:00
const rootPath = '../js/dist/'
2018-07-25 11:29:16 +02:00
const defaultPluginConfig = {
external: [
bsPlugins.Data,
bsPlugins.EventHandler,
bsPlugins.SelectorEngine
2018-07-25 11:29:16 +02:00
],
globals: {
[bsPlugins.Data]: 'Data',
[bsPlugins.EventHandler]: 'EventHandler',
[bsPlugins.SelectorEngine]: 'SelectorEngine'
2018-07-25 11:29:16 +02:00
}
}
function getConfigByPluginKey(pluginKey) {
if (
pluginKey === 'Data' ||
pluginKey === 'Manipulator' ||
2019-03-16 15:10:23 +01:00
pluginKey === 'EventHandler' ||
pluginKey === 'Polyfill' ||
2019-03-16 15:10:23 +01:00
pluginKey === 'SelectorEngine' ||
pluginKey === 'Util' ||
pluginKey === 'Sanitizer'
2018-07-25 11:29:16 +02:00
) {
return {
external: [bsPlugins.Polyfill],
globals: {
[bsPlugins.Polyfill]: 'Polyfill'
}
2018-07-25 11:29:16 +02:00
}
}
if (pluginKey === 'Alert' || pluginKey === 'Tab') {
return defaultPluginConfig
}
2018-07-25 11:29:16 +02:00
if (
pluginKey === 'Button' ||
pluginKey === 'Carousel' ||
pluginKey === 'Collapse' ||
pluginKey === 'Modal' ||
pluginKey === 'ScrollSpy'
) {
const config = Object.assign(defaultPluginConfig)
config.external.push(bsPlugins.Manipulator)
config.globals[bsPlugins.Manipulator] = 'Manipulator'
return config
2018-09-26 15:05:27 +02:00
}
2018-07-25 11:29:16 +02:00
if (pluginKey === 'Dropdown' || pluginKey === 'Tooltip') {
const config = Object.assign(defaultPluginConfig)
config.external.push(bsPlugins.Manipulator, 'popper.js')
config.globals[bsPlugins.Manipulator] = 'Manipulator'
config.globals['popper.js'] = 'Popper'
return config
2018-09-26 15:05:27 +02:00
}
2018-07-25 11:29:16 +02:00
if (pluginKey === 'Popover') {
return {
external: [
bsPlugins.Data,
bsPlugins.SelectorEngine,
bsPlugins.Tooltip
2018-07-25 11:29:16 +02:00
],
globals: {
[bsPlugins.Data]: 'Data',
[bsPlugins.SelectorEngine]: 'SelectorEngine',
[bsPlugins.Tooltip]: 'Tooltip'
2018-07-25 11:29:16 +02:00
}
}
2018-09-26 15:05:27 +02:00
}
2018-11-14 12:02:18 +01:00
if (pluginKey === 'Toast') {
return {
external: [
bsPlugins.Data,
bsPlugins.EventHandler,
bsPlugins.Manipulator
2018-11-14 12:02:18 +01:00
],
globals: {
[bsPlugins.Data]: 'Data',
[bsPlugins.EventHandler]: 'EventHandler',
[bsPlugins.Manipulator]: 'Manipulator'
2018-11-14 12:02:18 +01:00
}
}
}
2018-07-25 11:29:16 +02:00
}
const utilObjects = [
'Util',
'Sanitizer'
]
const domObjects = [
'Data',
'EventHandler',
'Manipulator',
'Polyfill',
'SelectorEngine'
]
2018-07-25 11:29:16 +02:00
function build(plugin) {
console.log(`Building ${plugin} plugin...`)
2019-02-26 12:20:34 +01:00
const { external, globals } = getConfigByPluginKey(plugin)
const pluginFilename = path.basename(bsPlugins[plugin])
let pluginPath = rootPath
if (utilObjects.includes(plugin)) {
pluginPath = `${rootPath}/util/`
}
if (domObjects.includes(plugin)) {
pluginPath = `${rootPath}/dom/`
}
2018-09-26 15:05:27 +02:00
rollup.rollup({
input: bsPlugins[plugin],
plugins,
external
2019-02-26 12:20:34 +01:00
}).then(bundle => {
2018-09-26 15:05:27 +02:00
bundle.write({
banner: banner(pluginFilename),
format: 'umd',
name: plugin,
sourcemap: true,
globals,
2018-07-25 11:29:16 +02:00
file: path.resolve(__dirname, `${pluginPath}${pluginFilename}`)
})
2018-09-26 15:05:27 +02:00
.then(() => console.log(`Building ${plugin} plugin... Done!`))
2019-02-26 12:20:34 +01:00
.catch(error => console.error(`${plugin}: ${error}`))
})
2018-09-26 15:05:27 +02:00
}
Object.keys(bsPlugins)
.forEach(plugin => build(plugin))