| 
									
										
										
										
											2020-05-06 02:20:44 +08:00
										 |  |  | #!/usr/bin/env node
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-27 17:33:07 +08:00
										 |  |  | /*! | 
					
						
							|  |  |  |  * Script to build our plugins to use them separately. | 
					
						
							| 
									
										
										
										
											2020-01-02 17:34:48 +08:00
										 |  |  |  * Copyright 2020 The Bootstrap Authors | 
					
						
							|  |  |  |  * Copyright 2020 Twitter, Inc. | 
					
						
							| 
									
										
										
										
											2020-06-17 02:41:47 +08:00
										 |  |  |  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
 | 
					
						
							| 
									
										
										
										
											2018-06-27 17:33:07 +08:00
										 |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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') | 
					
						
							| 
									
										
										
										
											2020-05-26 11:14:12 +08:00
										 |  |  | const { babel } = require('@rollup/plugin-babel') | 
					
						
							| 
									
										
										
										
											2019-02-26 19:20:34 +08:00
										 |  |  | const banner = require('./banner.js') | 
					
						
							| 
									
										
										
										
											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/**', | 
					
						
							| 
									
										
										
										
											2020-05-26 11:14:12 +08:00
										 |  |  |     // Inline the required helpers in each file
 | 
					
						
							|  |  |  |     babelHelpers: 'inline' | 
					
						
							| 
									
										
										
										
											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'), | 
					
						
							| 
									
										
										
										
											2019-10-02 17:43:54 +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'), | 
					
						
							|  |  |  |   Toast: path.resolve(__dirname, '../js/src/toast.js'), | 
					
						
							|  |  |  |   Tooltip: path.resolve(__dirname, '../js/src/tooltip.js') | 
					
						
							| 
									
										
										
										
											2018-06-27 17:33:07 +08:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2019-10-02 17:43:54 +08:00
										 |  |  | const rootPath = path.resolve(__dirname, '../js/dist/') | 
					
						
							| 
									
										
										
										
											2019-02-23 06:37:55 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											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
										 |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-06 12:52:06 +08:00
										 |  |  | const getConfigByPluginKey = pluginKey => { | 
					
						
							| 
									
										
										
										
											2018-07-25 17:29:16 +08:00
										 |  |  |   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' | 
					
						
							|  |  |  | ] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-06 12:52:06 +08:00
										 |  |  | const build = async plugin => { | 
					
						
							| 
									
										
										
										
											2018-07-25 17:29:16 +08:00
										 |  |  |   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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-06 12:52:06 +08:00
										 |  |  |   const bundle = await rollup.rollup({ | 
					
						
							| 
									
										
										
										
											2018-09-26 21:05:27 +08:00
										 |  |  |     input: bsPlugins[plugin], | 
					
						
							|  |  |  |     plugins, | 
					
						
							|  |  |  |     external | 
					
						
							| 
									
										
										
										
											2018-06-27 17:33:07 +08:00
										 |  |  |   }) | 
					
						
							| 
									
										
										
										
											2020-05-06 12:52:06 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   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) | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2018-09-26 21:05:27 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-06 12:52:06 +08:00
										 |  |  | main() |