80 lines
2.4 KiB
JavaScript
80 lines
2.4 KiB
JavaScript
/* eslint-env node */
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
const banner = require('./banner');
|
|
|
|
const rootDir = path.resolve(__dirname, '..', '..');
|
|
const pluginSrcDir = path.join(rootDir, 'src', 'plugin');
|
|
|
|
// find plugins
|
|
const PLUGINS = [];
|
|
fs.readdirSync(pluginSrcDir).forEach(plugin => {
|
|
findInDirectory(plugin, pluginSrcDir);
|
|
});
|
|
|
|
/**
|
|
* findInDirectory - Description: search plugins and push them in PLUGINS Array: if finds a directory, take the plugin
|
|
* called index.js
|
|
*
|
|
* @param {String} plugin Name of plugin
|
|
*
|
|
* @param {String} directory Path of plugin directory
|
|
*/
|
|
function findInDirectory(plugin, directory) {
|
|
const pluginPath = path.join(directory, plugin);
|
|
let relativePluginPath = null;
|
|
|
|
if (fs.statSync(pluginPath).isDirectory()) {
|
|
fs.readdirSync(pluginPath).forEach(pluginInDir => {
|
|
if (pluginInDir === 'index.js') {
|
|
const pathInDirectory = path.join(pluginPath, pluginInDir);
|
|
relativePluginPath = path.relative(pluginSrcDir, pathInDirectory);
|
|
PLUGINS.push(relativePluginPath);
|
|
}
|
|
});
|
|
}
|
|
else {
|
|
relativePluginPath = path.relative(pluginSrcDir, pluginPath);
|
|
PLUGINS.push(relativePluginPath);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* buildPluginEntry - Description: build the plugin entry based on PLUGINS array: if plugin name is index.js, it is
|
|
* it is renamed with his parent directory name
|
|
*
|
|
* @param {Array} plugins Name of plugins in src/plugin
|
|
*
|
|
* @returns {object} Entry object { name: nameUrl }
|
|
*/
|
|
function buildPluginEntry(plugins) {
|
|
const result = {};
|
|
plugins.forEach(
|
|
plugin => {
|
|
let basename = path.basename(plugin, '.js');
|
|
if (basename === 'index') {
|
|
basename = path.basename(path.dirname(plugin));
|
|
}
|
|
return (result[path.basename(basename, '.js')] = path.join(
|
|
pluginSrcDir,
|
|
plugin
|
|
));
|
|
}
|
|
);
|
|
return result;
|
|
}
|
|
|
|
module.exports = {
|
|
entry: buildPluginEntry(PLUGINS),
|
|
output: {
|
|
path: path.join(rootDir, 'dist', 'plugin'),
|
|
filename: 'wavesurfer.[name].js',
|
|
library: ['WaveSurfer', '[name]'],
|
|
publicPath: 'localhost:8080/dist/plugin/'
|
|
},
|
|
devServer: {
|
|
publicPath: 'localhost:8080/dist/plugin/'
|
|
},
|
|
plugins: [banner.pluginBanner]
|
|
};
|