mstr-viz
Version:
A new dev tool for creating custom visualizations
96 lines (83 loc) • 3.04 kB
JavaScript
const fs = require('fs-extra');
const path = require('path');
const copy = require('./utils/copy');
const { initPluginDevDir, installDeps } = require('./common');
const getPluginDevPath = require('./utils/getPluginDevPath');
const DIR_TYPE = {
OLD_VIS: 0,
NEW_VIS_DEV: 1,
NEW_VIS: 2,
OTHERS: 3,
};
const checkDirType = visPath => {
const absolutePath = path.resolve(visPath);
if (fs.existsSync(path.join(absolutePath, 'config.js'))) {
try {
const content = fs.readFileSync(path.join(absolutePath, 'config.js'), { encoding: 'utf-8' });
if (/visualization_name/.test(content)) {
return DIR_TYPE.NEW_VIS_DEV;
}
} catch (e) {
// do nothing
}
}
if (fs.existsSync(path.join(absolutePath, 'WEB-INF/xml/config/visualizations.xml'))) {
if (fs.existsSync(path.join(absolutePath, '_custom_vis_'))) {
return DIR_TYPE.NEW_VIS;
}
return DIR_TYPE.OLD_VIS;
}
return DIR_TYPE.OTHERS;
};
module.exports = ({ visPath }) => {
const absVisPath = path.resolve(visPath);
// check if this is a valid visualization plugin folder
const dirType = checkDirType(absVisPath);
if (dirType === DIR_TYPE.NEW_VIS_DEV) {
console.log('This is a new or migrated custom vis already.');
return;
}
if (dirType === DIR_TYPE.OTHERS || dirType === DIR_TYPE.NEW_VIS) {
console.log('This isn\'t an old custom vis dir');
return;
}
console.log('Starting Migrate this custom vis');
// directory name -> pluginName
const pluginName = path.parse(absVisPath).name;
const PLUGIN_DEV_PATH = getPluginDevPath(process.cwd(), pluginName);
try {
initPluginDevDir(PLUGIN_DEV_PATH, pluginName, false, true);
// copy original js files
console.log('Processing js files...');
const jsDir = path.join(absVisPath, 'javascript/mojo/js/source');
// copy(jsDir, './src', `${pluginName}.js`);
// copy(jsDir, './src', `${pluginName}DropZones.js`);
// copy(jsDir, './src', `${pluginName}EditorModel.js`);
fs.copySync(jsDir, 'src');
// move style files
console.log('Processing css & image files...');
const styleDir = path.join(absVisPath, 'style');
copy(styleDir, './src', 'images');
// merge Html3ViPage.css & global.css
const css1 = fs.readFileSync(path.join(styleDir, 'Html5ViPage.css'));
const css2 = fs.readFileSync(path.join(styleDir, 'global.css'));
fs.writeFileSync('./src/vis.less', `${css1}\n\n${css2}`);
// WEB-INF
console.log('Processing WEB-INF...');
const webinfDir = path.join(absVisPath, 'WEB-INF');
fs.copySync(webinfDir, 'WEB-INF');
// i18n
if (fs.existsSync(path.join(webinfDir, 'classes/resources'))) {
fs.copySync(path.join(webinfDir, 'classes/resources'), 'i18n');
fs.removeSync('WEB-INF/classes');
}
// others
copy(absVisPath, './', 'README.md');
copy(absVisPath, './', 'CHANGELOG.md');
installDeps();
console.log('Migration done! Enjoy developing!');
} catch (e) {
fs.removeSync(PLUGIN_DEV_PATH);
throw e;
}
};