UNPKG

mstr-viz

Version:

A new dev tool for creating custom visualizations

96 lines (83 loc) 3.04 kB
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; } };