123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- #!/usr/bin/env node
- 'use strict'
- const path = require('path')
- const rollup = require('rollup')
- const { babel } = require('@rollup/plugin-babel')
- const banner = require('./banner.js')
- const rootPath = path.resolve(__dirname, '../js/dist/')
- const plugins = [
- babel({
-
- exclude: 'node_modules/**',
-
- babelHelpers: 'bundled'
- })
- ]
- const bsPlugins = {
- Data: path.resolve(__dirname, '../js/src/dom/data.js'),
- EventHandler: path.resolve(__dirname, '../js/src/dom/event-handler.js'),
- Manipulator: path.resolve(__dirname, '../js/src/dom/manipulator.js'),
- SelectorEngine: path.resolve(__dirname, '../js/src/dom/selector-engine.js'),
- Alert: path.resolve(__dirname, '../js/src/alert.js'),
- Base: path.resolve(__dirname, '../js/src/base-component.js'),
- Button: path.resolve(__dirname, '../js/src/button.js'),
- Carousel: path.resolve(__dirname, '../js/src/carousel.js'),
- Collapse: path.resolve(__dirname, '../js/src/collapse.js'),
- Dropdown: path.resolve(__dirname, '../js/src/dropdown.js'),
- Modal: path.resolve(__dirname, '../js/src/modal.js'),
- Offcanvas: path.resolve(__dirname, '../js/src/offcanvas.js'),
- Popover: path.resolve(__dirname, '../js/src/popover.js'),
- ScrollSpy: path.resolve(__dirname, '../js/src/scrollspy.js'),
- Tab: path.resolve(__dirname, '../js/src/tab.js'),
- Toast: path.resolve(__dirname, '../js/src/toast.js'),
- Tooltip: path.resolve(__dirname, '../js/src/tooltip.js')
- }
- const defaultPluginConfig = {
- external: [
- bsPlugins.Data,
- bsPlugins.Base,
- bsPlugins.EventHandler,
- bsPlugins.SelectorEngine
- ],
- globals: {
- [bsPlugins.Data]: 'Data',
- [bsPlugins.Base]: 'Base',
- [bsPlugins.EventHandler]: 'EventHandler',
- [bsPlugins.SelectorEngine]: 'SelectorEngine'
- }
- }
- const getConfigByPluginKey = pluginKey => {
- if (
- pluginKey === 'Data' ||
- pluginKey === 'Manipulator' ||
- pluginKey === 'EventHandler' ||
- pluginKey === 'SelectorEngine' ||
- pluginKey === 'Util' ||
- pluginKey === 'Sanitizer' ||
- pluginKey === 'Backdrop'
- ) {
- return {
- external: []
- }
- }
- if (pluginKey === 'Alert' || pluginKey === 'Tab' || pluginKey === 'Offcanvas') {
- return defaultPluginConfig
- }
- if (
- pluginKey === 'Base' ||
- 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
- }
- if (pluginKey === 'Dropdown' || pluginKey === 'Tooltip') {
- const config = Object.assign(defaultPluginConfig)
- config.external.push(bsPlugins.Manipulator, '@popperjs/core')
- config.globals[bsPlugins.Manipulator] = 'Manipulator'
- config.globals['@popperjs/core'] = 'Popper'
- return config
- }
- if (pluginKey === 'Popover') {
- return {
- external: [
- bsPlugins.Data,
- bsPlugins.SelectorEngine,
- bsPlugins.Tooltip
- ],
- globals: {
- [bsPlugins.Data]: 'Data',
- [bsPlugins.SelectorEngine]: 'SelectorEngine',
- [bsPlugins.Tooltip]: 'Tooltip'
- }
- }
- }
- if (pluginKey === 'Toast') {
- return {
- external: [
- bsPlugins.Data,
- bsPlugins.Base,
- bsPlugins.EventHandler,
- bsPlugins.Manipulator
- ],
- globals: {
- [bsPlugins.Data]: 'Data',
- [bsPlugins.Base]: 'Base',
- [bsPlugins.EventHandler]: 'EventHandler',
- [bsPlugins.Manipulator]: 'Manipulator'
- }
- }
- }
- }
- const utilObjects = new Set([
- 'Util',
- 'Sanitizer',
- 'Backdrop'
- ])
- const domObjects = new Set([
- 'Data',
- 'EventHandler',
- 'Manipulator',
- 'SelectorEngine'
- ])
- const build = async plugin => {
- console.log(`Building ${plugin} plugin...`)
- const { external, globals } = getConfigByPluginKey(plugin)
- const pluginFilename = path.basename(bsPlugins[plugin])
- let pluginPath = rootPath
- if (utilObjects.has(plugin)) {
- pluginPath = `${rootPath}/util/`
- }
- if (domObjects.has(plugin)) {
- pluginPath = `${rootPath}/dom/`
- }
- const bundle = await rollup.rollup({
- input: bsPlugins[plugin],
- plugins,
- external
- })
- await bundle.write({
- banner: banner(pluginFilename),
- format: 'umd',
- name: plugin,
- sourcemap: true,
- globals,
- file: path.resolve(__dirname, `${pluginPath}/${pluginFilename}`)
- })
- console.log(`Building ${plugin} plugin... Done!`)
- }
- const main = async () => {
- try {
- await Promise.all(Object.keys(bsPlugins).map(plugin => build(plugin)))
- } catch (error) {
- console.error(error)
- process.exit(1)
- }
- }
- main()
|