build-plugins.js 4.77 KiB
/*!
 * Script to build our plugins to use them separately.
 * Copyright 2019 The Bootstrap Authors
 * Copyright 2019 Twitter, Inc.
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 */
'use strict'
const path = require('path')
const rollup = require('rollup')
const babel = require('rollup-plugin-babel')
const banner = require('./banner.js')
const TEST = process.env.NODE_ENV === 'test'
const plugins = [
  babel({
    // Only transpile our source code
    exclude: 'node_modules/**',
    // Include only required helpers
    externalHelpersWhitelist: [
      'defineProperties',
      'createClass',
      'inheritsLoose',
      'defineProperty',
      'objectSpread'
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'),
  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'),
  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 rootPath = TEST ? '../js/coverage/dist/' : '../js/dist/'
if (TEST) {
  bsPlugins.Util = path.resolve(__dirname, '../js/src/util/index.js')
  bsPlugins.Sanitizer = path.resolve(__dirname, '../js/src/util/sanitizer.js')
const defaultPluginConfig = {
  external: [
    bsPlugins.Data,
    bsPlugins.EventHandler,
    bsPlugins.SelectorEngine
  globals: {
    [bsPlugins.Data]: 'Data',
    [bsPlugins.EventHandler]: 'EventHandler',
    [bsPlugins.SelectorEngine]: 'SelectorEngine'
function getConfigByPluginKey(pluginKey) {
  if (
    pluginKey === 'Data' ||
    pluginKey === 'Manipulator' ||
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
pluginKey === 'EventHandler' || pluginKey === 'SelectorEngine' || pluginKey === 'Util' || pluginKey === 'Sanitizer' ) { return { external: [], globals: {} } } if (pluginKey === 'Alert' || pluginKey === 'Tab') { return defaultPluginConfig } 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 } 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 } 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.EventHandler, bsPlugins.Manipulator ], globals: { [bsPlugins.Data]: 'Data', [bsPlugins.EventHandler]: 'EventHandler', [bsPlugins.Manipulator]: 'Manipulator' } } } } const utilObjects = [ 'Util', 'Sanitizer'
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
] const domObjects = [ 'Data', 'EventHandler', 'Manipulator', 'SelectorEngine' ] function build(plugin) { console.log(`Building ${plugin} plugin...`) 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/` } rollup.rollup({ input: bsPlugins[plugin], plugins, external }).then(bundle => { bundle.write({ banner: banner(pluginFilename), format: 'umd', name: plugin, sourcemap: true, globals, file: path.resolve(__dirname, `${pluginPath}${pluginFilename}`) }) .then(() => console.log(`Building ${plugin} plugin... Done!`)) .catch(error => console.error(`${plugin}: ${error}`)) }) } Object.keys(bsPlugins) .forEach(plugin => build(plugin))