| 
									
										
										
										
											2018-06-27 17:33:07 +08:00
										 |  |  | /*! | 
					
						
							|  |  |  |  * Script to build our plugins to use them separately. | 
					
						
							| 
									
										
										
										
											2019-01-08 14:05:26 +08:00
										 |  |  |  * Copyright 2019 The Bootstrap Authors | 
					
						
							|  |  |  |  * Copyright 2019 Twitter, Inc. | 
					
						
							| 
									
										
										
										
											2018-06-27 17:33:07 +08:00
										 |  |  |  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-28 19:03:28 +08:00
										 |  |  | 'use strict' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-26 19:20:34 +08:00
										 |  |  | const path = require('path') | 
					
						
							|  |  |  | const rollup = require('rollup') | 
					
						
							|  |  |  | const babel = require('rollup-plugin-babel') | 
					
						
							|  |  |  | const banner = require('./banner.js') | 
					
						
							| 
									
										
										
										
											2018-06-27 17:33:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-26 19:20:34 +08:00
										 |  |  | const TEST = process.env.NODE_ENV === 'test' | 
					
						
							| 
									
										
										
										
											2018-06-27 17:33:07 +08:00
										 |  |  | const plugins = [ | 
					
						
							|  |  |  |   babel({ | 
					
						
							| 
									
										
										
										
											2019-02-26 19:20:34 +08:00
										 |  |  |     // Only transpile our source code
 | 
					
						
							|  |  |  |     exclude: 'node_modules/**', | 
					
						
							|  |  |  |     // Include only required helpers
 | 
					
						
							|  |  |  |     externalHelpersWhitelist: [ | 
					
						
							| 
									
										
										
										
											2018-06-27 17:33:07 +08:00
										 |  |  |       'defineProperties', | 
					
						
							|  |  |  |       'createClass', | 
					
						
							|  |  |  |       'inheritsLoose', | 
					
						
							|  |  |  |       'defineProperty', | 
					
						
							| 
									
										
										
										
											2019-07-11 17:29:35 +08:00
										 |  |  |       'objectSpread2' | 
					
						
							| 
									
										
										
										
											2018-06-27 17:33:07 +08:00
										 |  |  |     ] | 
					
						
							|  |  |  |   }) | 
					
						
							|  |  |  | ] | 
					
						
							|  |  |  | const bsPlugins = { | 
					
						
							| 
									
										
										
										
											2018-07-25 17:29:16 +08:00
										 |  |  |   Data: path.resolve(__dirname, '../js/src/dom/data.js'), | 
					
						
							| 
									
										
										
										
											2019-05-08 21:11:24 +08:00
										 |  |  |   EventHandler: path.resolve(__dirname, '../js/src/dom/event-handler.js'), | 
					
						
							| 
									
										
										
										
											2018-07-25 17:29:16 +08:00
										 |  |  |   Manipulator: path.resolve(__dirname, '../js/src/dom/manipulator.js'), | 
					
						
							| 
									
										
										
										
											2019-07-09 16:19:00 +08:00
										 |  |  |   Polyfill: path.resolve(__dirname, '../js/src/dom/polyfill.js'), | 
					
						
							| 
									
										
										
										
											2019-05-08 21:11:24 +08:00
										 |  |  |   SelectorEngine: path.resolve(__dirname, '../js/src/dom/selector-engine.js'), | 
					
						
							| 
									
										
										
										
											2018-06-27 17:33:07 +08:00
										 |  |  |   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'), | 
					
						
							| 
									
										
										
										
											2018-08-24 00:31:25 +08:00
										 |  |  |   Toast: path.resolve(__dirname, '../js/src/toast.js'), | 
					
						
							| 
									
										
										
										
											2019-02-23 06:37:55 +08:00
										 |  |  |   Tooltip: path.resolve(__dirname, '../js/src/tooltip.js') | 
					
						
							| 
									
										
										
										
											2018-06-27 17:33:07 +08:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2018-09-26 21:05:27 +08:00
										 |  |  | const rootPath = TEST ? '../js/coverage/dist/' : '../js/dist/' | 
					
						
							| 
									
										
										
										
											2018-06-27 17:33:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-23 06:37:55 +08:00
										 |  |  | if (TEST) { | 
					
						
							|  |  |  |   bsPlugins.Util = path.resolve(__dirname, '../js/src/util/index.js') | 
					
						
							|  |  |  |   bsPlugins.Sanitizer = path.resolve(__dirname, '../js/src/util/sanitizer.js') | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 17:29:16 +08:00
										 |  |  | const defaultPluginConfig = { | 
					
						
							|  |  |  |   external: [ | 
					
						
							|  |  |  |     bsPlugins.Data, | 
					
						
							|  |  |  |     bsPlugins.EventHandler, | 
					
						
							| 
									
										
										
										
											2019-02-23 06:37:55 +08:00
										 |  |  |     bsPlugins.SelectorEngine | 
					
						
							| 
									
										
										
										
											2018-07-25 17:29:16 +08:00
										 |  |  |   ], | 
					
						
							|  |  |  |   globals: { | 
					
						
							|  |  |  |     [bsPlugins.Data]: 'Data', | 
					
						
							|  |  |  |     [bsPlugins.EventHandler]: 'EventHandler', | 
					
						
							| 
									
										
										
										
											2019-02-23 06:37:55 +08:00
										 |  |  |     [bsPlugins.SelectorEngine]: 'SelectorEngine' | 
					
						
							| 
									
										
										
										
											2018-07-25 17:29:16 +08:00
										 |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function getConfigByPluginKey(pluginKey) { | 
					
						
							|  |  |  |   if ( | 
					
						
							|  |  |  |     pluginKey === 'Data' || | 
					
						
							|  |  |  |     pluginKey === 'Manipulator' || | 
					
						
							| 
									
										
										
										
											2019-03-16 22:10:23 +08:00
										 |  |  |     pluginKey === 'EventHandler' || | 
					
						
							| 
									
										
										
										
											2019-07-09 16:19:00 +08:00
										 |  |  |     pluginKey === 'Polyfill' || | 
					
						
							| 
									
										
										
										
											2019-03-16 22:10:23 +08:00
										 |  |  |     pluginKey === 'SelectorEngine' || | 
					
						
							| 
									
										
										
										
											2019-02-23 06:37:55 +08:00
										 |  |  |     pluginKey === 'Util' || | 
					
						
							|  |  |  |     pluginKey === 'Sanitizer' | 
					
						
							| 
									
										
										
										
											2018-07-25 17:29:16 +08:00
										 |  |  |   ) { | 
					
						
							|  |  |  |     return { | 
					
						
							| 
									
										
										
										
											2019-07-09 16:19:00 +08:00
										 |  |  |       external: [bsPlugins.Polyfill], | 
					
						
							|  |  |  |       globals: { | 
					
						
							|  |  |  |         [bsPlugins.Polyfill]: 'Polyfill' | 
					
						
							|  |  |  |       } | 
					
						
							| 
									
										
										
										
											2018-07-25 17:29:16 +08:00
										 |  |  |     } | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (pluginKey === 'Alert' || pluginKey === 'Tab') { | 
					
						
							|  |  |  |     return defaultPluginConfig | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2018-06-27 17:33:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 17:29:16 +08: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 21:05:27 +08:00
										 |  |  |   } | 
					
						
							| 
									
										
										
										
											2018-06-27 17:33:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 17:29:16 +08: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 21:05:27 +08:00
										 |  |  |   } | 
					
						
							| 
									
										
										
										
											2018-06-27 17:33:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 17:29:16 +08:00
										 |  |  |   if (pluginKey === 'Popover') { | 
					
						
							|  |  |  |     return { | 
					
						
							|  |  |  |       external: [ | 
					
						
							|  |  |  |         bsPlugins.Data, | 
					
						
							|  |  |  |         bsPlugins.SelectorEngine, | 
					
						
							| 
									
										
										
										
											2019-02-23 06:37:55 +08:00
										 |  |  |         bsPlugins.Tooltip | 
					
						
							| 
									
										
										
										
											2018-07-25 17:29:16 +08:00
										 |  |  |       ], | 
					
						
							|  |  |  |       globals: { | 
					
						
							|  |  |  |         [bsPlugins.Data]: 'Data', | 
					
						
							|  |  |  |         [bsPlugins.SelectorEngine]: 'SelectorEngine', | 
					
						
							| 
									
										
										
										
											2019-02-23 06:37:55 +08:00
										 |  |  |         [bsPlugins.Tooltip]: 'Tooltip' | 
					
						
							| 
									
										
										
										
											2018-07-25 17:29:16 +08:00
										 |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2018-09-26 21:05:27 +08:00
										 |  |  |   } | 
					
						
							| 
									
										
										
										
											2018-11-14 19:02:18 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   if (pluginKey === 'Toast') { | 
					
						
							|  |  |  |     return { | 
					
						
							|  |  |  |       external: [ | 
					
						
							|  |  |  |         bsPlugins.Data, | 
					
						
							|  |  |  |         bsPlugins.EventHandler, | 
					
						
							| 
									
										
										
										
											2019-02-23 06:37:55 +08:00
										 |  |  |         bsPlugins.Manipulator | 
					
						
							| 
									
										
										
										
											2018-11-14 19:02:18 +08:00
										 |  |  |       ], | 
					
						
							|  |  |  |       globals: { | 
					
						
							|  |  |  |         [bsPlugins.Data]: 'Data', | 
					
						
							|  |  |  |         [bsPlugins.EventHandler]: 'EventHandler', | 
					
						
							| 
									
										
										
										
											2019-02-23 06:37:55 +08:00
										 |  |  |         [bsPlugins.Manipulator]: 'Manipulator' | 
					
						
							| 
									
										
										
										
											2018-11-14 19:02:18 +08:00
										 |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2018-07-25 17:29:16 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-08 21:38:05 +08:00
										 |  |  | const utilObjects = [ | 
					
						
							|  |  |  |   'Util', | 
					
						
							|  |  |  |   'Sanitizer' | 
					
						
							|  |  |  | ] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const domObjects = [ | 
					
						
							|  |  |  |   'Data', | 
					
						
							|  |  |  |   'EventHandler', | 
					
						
							|  |  |  |   'Manipulator', | 
					
						
							| 
									
										
										
										
											2019-07-09 16:19:00 +08:00
										 |  |  |   'Polyfill', | 
					
						
							| 
									
										
										
										
											2019-05-08 21:38:05 +08:00
										 |  |  |   'SelectorEngine' | 
					
						
							|  |  |  | ] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 17:29:16 +08:00
										 |  |  | function build(plugin) { | 
					
						
							|  |  |  |   console.log(`Building ${plugin} plugin...`) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-26 19:20:34 +08:00
										 |  |  |   const { external, globals } = getConfigByPluginKey(plugin) | 
					
						
							| 
									
										
										
										
											2019-05-08 21:38:05 +08:00
										 |  |  |   const pluginFilename = path.basename(bsPlugins[plugin]) | 
					
						
							| 
									
										
										
										
											2019-02-23 06:37:55 +08:00
										 |  |  |   let pluginPath = rootPath | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (utilObjects.includes(plugin)) { | 
					
						
							|  |  |  |     pluginPath = `${rootPath}/util/` | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (domObjects.includes(plugin)) { | 
					
						
							|  |  |  |     pluginPath = `${rootPath}/dom/` | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2018-06-27 17:33:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-26 21:05:27 +08:00
										 |  |  |   rollup.rollup({ | 
					
						
							|  |  |  |     input: bsPlugins[plugin], | 
					
						
							|  |  |  |     plugins, | 
					
						
							|  |  |  |     external | 
					
						
							| 
									
										
										
										
											2019-02-26 19:20:34 +08:00
										 |  |  |   }).then(bundle => { | 
					
						
							| 
									
										
										
										
											2018-09-26 21:05:27 +08:00
										 |  |  |     bundle.write({ | 
					
						
							|  |  |  |       banner: banner(pluginFilename), | 
					
						
							|  |  |  |       format: 'umd', | 
					
						
							|  |  |  |       name: plugin, | 
					
						
							|  |  |  |       sourcemap: true, | 
					
						
							|  |  |  |       globals, | 
					
						
							| 
									
										
										
										
											2018-07-25 17:29:16 +08:00
										 |  |  |       file: path.resolve(__dirname, `${pluginPath}${pluginFilename}`) | 
					
						
							| 
									
										
										
										
											2018-06-27 17:33:07 +08:00
										 |  |  |     }) | 
					
						
							| 
									
										
										
										
											2018-09-26 21:05:27 +08:00
										 |  |  |       .then(() => console.log(`Building ${plugin} plugin... Done!`)) | 
					
						
							| 
									
										
										
										
											2019-02-26 19:20:34 +08:00
										 |  |  |       .catch(error => console.error(`${plugin}: ${error}`)) | 
					
						
							| 
									
										
										
										
											2018-06-27 17:33:07 +08:00
										 |  |  |   }) | 
					
						
							| 
									
										
										
										
											2018-09-26 21:05:27 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-08 21:38:05 +08:00
										 |  |  | Object.keys(bsPlugins) | 
					
						
							|  |  |  |   .forEach(plugin => build(plugin)) |