strapi/packages/core/admin/scripts/create-plugins-file.js
2022-08-11 10:20:49 +02:00

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,
};