| 
									
										
										
										
											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. | 
					
						
							| 
									
										
										
										
											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' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-27 00:20:15 +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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-27 00:20:15 +08:00
										 |  |  | const TEST = process.env.NODE_ENV === 'test' | 
					
						
							| 
									
										
										
										
											2018-06-27 17:33:07 +08:00
										 |  |  | const plugins = [ | 
					
						
							|  |  |  |   babel({ | 
					
						
							| 
									
										
										
										
											2020-05-05 01:11:30 +08:00
										 |  |  |     // Only transpile our source code
 | 
					
						
							|  |  |  |     exclude: 'node_modules/**', | 
					
						
							| 
									
										
										
										
											2020-05-27 00:20:15 +08:00
										 |  |  |     // Inline the required helpers in each file
 | 
					
						
							|  |  |  |     babelHelpers: 'inline' | 
					
						
							| 
									
										
										
										
											2018-06-27 17:33:07 +08:00
										 |  |  |   }) | 
					
						
							|  |  |  | ] | 
					
						
							|  |  |  | const bsPlugins = { | 
					
						
							|  |  |  |   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'), | 
					
						
							| 
									
										
										
										
											2018-06-27 17:33:07 +08:00
										 |  |  |   Tooltip: path.resolve(__dirname, '../js/src/tooltip.js'), | 
					
						
							|  |  |  |   Util: path.resolve(__dirname, '../js/src/util.js') | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2018-09-26 21:05:27 +08:00
										 |  |  | const rootPath = TEST ? '../js/coverage/dist/' : '../js/dist/' | 
					
						
							| 
									
										
										
										
											2018-06-27 17:33:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-06 12:52:06 +08:00
										 |  |  | const build = async (plugin) => { | 
					
						
							| 
									
										
										
										
											2018-09-26 21:05:27 +08:00
										 |  |  |   console.log(`Building ${plugin} plugin...`) | 
					
						
							| 
									
										
										
										
											2018-06-27 17:33:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-14 19:59:51 +08:00
										 |  |  |   const external = ['jquery', 'popper.js'] | 
					
						
							| 
									
										
										
										
											2018-09-26 21:05:27 +08:00
										 |  |  |   const globals = { | 
					
						
							|  |  |  |     jquery: 'jQuery', // Ensure we use jQuery which is always available even in noConflict mode
 | 
					
						
							|  |  |  |     'popper.js': 'Popper' | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2018-06-27 17:33:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-26 21:05:27 +08:00
										 |  |  |   // Do not bundle Util in plugins
 | 
					
						
							|  |  |  |   if (plugin !== 'Util') { | 
					
						
							|  |  |  |     external.push(bsPlugins.Util) | 
					
						
							|  |  |  |     globals[bsPlugins.Util] = 'Util' | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2018-06-27 17:33:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-26 21:05:27 +08:00
										 |  |  |   // Do not bundle Tooltip in Popover
 | 
					
						
							|  |  |  |   if (plugin === 'Popover') { | 
					
						
							|  |  |  |     external.push(bsPlugins.Tooltip) | 
					
						
							|  |  |  |     globals[bsPlugins.Tooltip] = 'Tooltip' | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2018-06-27 17:33:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-26 21:05:27 +08:00
										 |  |  |   const pluginFilename = `${plugin.toLowerCase()}.js` | 
					
						
							| 
									
										
										
										
											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, `${rootPath}${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() |