mirror of
				https://github.com/strapi/strapi.git
				synced 2025-10-30 09:23:28 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			93 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| const { join, resolve, relative } = require('path');
 | |
| const { camelCase } = require('lodash');
 | |
| const fs = require('fs-extra');
 | |
| 
 | |
| const CORE_PLUGINS = ['content-type-builder', 'email', 'upload'];
 | |
| 
 | |
| /**
 | |
|  * Retrieve the core plugins path
 | |
|  * @returns {Object}
 | |
|  */
 | |
| const getCorePluginsPath = () => {
 | |
|   const corePlugins = {};
 | |
| 
 | |
|   for (const dep of CORE_PLUGINS) {
 | |
|     const packageAdminPath = join(__dirname, '..', '..', dep, 'admin', 'src');
 | |
| 
 | |
|     const adminEntryPoint = resolve(join(__dirname, '..', 'admin', 'src'));
 | |
|     const pathToPlugin = join(relative(adminEntryPoint, packageAdminPath)).replace(/\\/g, '/');
 | |
| 
 | |
|     corePlugins[dep] = pathToPlugin;
 | |
|   }
 | |
| 
 | |
|   return corePlugins;
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Retrieve the plugins real path
 | |
|  * @param {Object[]} pluginsToInstall array of plugins located in the plugins folder
 | |
|  * @returns Object of plugin's paths
 | |
|  */
 | |
| const getPluginToInstallPath = (pluginsToInstall) => {
 | |
|   const plugins = {};
 | |
| 
 | |
|   for (const dep of pluginsToInstall) {
 | |
|     const packageAdminPath = join(__dirname, '..', '..', '..', 'plugins', dep, 'admin', 'src');
 | |
| 
 | |
|     const adminEntryPoint = resolve(join(__dirname, '..', 'admin', 'src'));
 | |
|     const pathToPlugin = join(relative(adminEntryPoint, packageAdminPath)).replace(/\\/g, '/');
 | |
| 
 | |
|     plugins[dep] = pathToPlugin;
 | |
|   }
 | |
| 
 | |
|   return plugins;
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Write the plugins.js file
 | |
|  * @param {Object} plugins
 | |
|  */
 | |
| const createPluginsFile = async (plugins) => {
 | |
|   const pluginFileDest = resolve(__dirname, '..', 'admin', 'src', 'plugins.js');
 | |
| 
 | |
|   const allPluginsArray = Object.entries(plugins).map(([plugin, pluginPath]) => {
 | |
|     return {
 | |
|       shortName: camelCase(plugin),
 | |
|       name: plugin,
 | |
|       pluginPath,
 | |
|     };
 | |
|   });
 | |
| 
 | |
|   const content = `
 | |
| // To override this file create a plugins-dev.js one and copy the content of the plugin.js one.
 | |
| // When starting the app the script will copy the plugins-dev.js into this one instead.
 | |
| ${allPluginsArray
 | |
|   .map(({ shortName, pluginPath }) => {
 | |
|     const req = `'${pluginPath}'`;
 | |
| 
 | |
|     return `import ${shortName} from ${req};`;
 | |
|   })
 | |
|   .join('\n')}
 | |
| 
 | |
| const plugins = {
 | |
| ${[...allPluginsArray]
 | |
|   .map(({ name, shortName }) => {
 | |
|     return `  '${name}': ${shortName},`;
 | |
|   })
 | |
|   .join('\n')}
 | |
| };
 | |
|   
 | |
| export default plugins;
 | |
| `;
 | |
| 
 | |
|   return fs.writeFile(pluginFileDest, content);
 | |
| };
 | |
| 
 | |
| module.exports = {
 | |
|   createPluginsFile,
 | |
|   getCorePluginsPath,
 | |
|   getPluginToInstallPath,
 | |
| };
 | 
