mstr-viz
Version:
A new dev tool for creating custom visualizations
94 lines (86 loc) • 3.7 kB
JavaScript
/**
* @file common steps during process
*/
const fs = require('fs-extra');
const path = require('path');
const { /* execSync, */ spawnSync } = require('child_process');
// const { isGitAvailable } = require('./utils/isGitAvailable');
const replaceTemplate = require('./utils/replaceTemplate');
module.exports = {
/**
* init the dir of new plugin
* @param pluginDevDir
* @param pluginName
* @param useReact
* @param [migrate=false]
*/
initPluginDevDir: (pluginDevDir, pluginName, useReact, migrate = false) => {
const TEMPLATE_DIR = path.join(__dirname, '../template');
const TEMPLATE_USE_REACT_DIR = path.join(__dirname, '../template-use-react');
console.log(`Creating a custom vis in ${pluginDevDir}`);
// create plugin dev folder
fs.mkdirSync(pluginDevDir);
// change cwd
process.chdir(pluginDevDir);
// if git is available
// if (isGitAvailable()) {
// execSync('git init', { stdio: 'ignore' });
// console.log('Initialized a git repository.');
// }
const replace = replaceTemplate({ pluginName, migrate });
// copy and generate from template
if (useReact) {
fs.copySync(TEMPLATE_USE_REACT_DIR, './');
replace('config.js');
replace('./formatPanelConfig/config.js');
replace('./formatPanelConfig/textAndForm/textAndFormConfig.js');
replace('./formatPanelConfig/vizOptions/visualizationConfig.js');
replace('./i18n/MessagesBundle.properties');
replace('./i18n/MessagesBundle_da_DK.properties');
replace('./i18n/MessagesBundle_de.properties');
replace('./i18n/MessagesBundle_en.properties');
replace('./i18n/MessagesBundle_en_GB.properties');
replace('./i18n/MessagesBundle_en_US.properties');
replace('./i18n/MessagesBundle_es.properties');
replace('./i18n/MessagesBundle_fr.properties');
replace('./i18n/MessagesBundle_it.properties');
replace('./i18n/MessagesBundle_ja.properties');
replace('./i18n/MessagesBundle_ko.properties');
replace('./i18n/MessagesBundle_nl.properties');
replace('./i18n/MessagesBundle_pl.properties');
replace('./i18n/MessagesBundle_pt.properties');
replace('./i18n/MessagesBundle_ru.properties');
replace('./i18n/MessagesBundle_sv.properties');
replace('./i18n/MessagesBundle_zh.properties');
replace('./i18n/MessagesBundle_zh_TW.properties');
replace('package.json');
replace('./src/SampleViz.js');
replace('./src/SampleVizDropZones.js');
replace('./src/SampleVizEditorModel.js');
replace('./src/vis.less');
fs.renameSync('./src/SampleViz.js', `./src/${pluginName}.js`);
fs.renameSync('./src/SampleVizDropZones.js', `./src/${pluginName}DropZones.js`);
fs.renameSync('./src/SampleVizEditorModel.js', `./src/${pluginName}EditorModel.js`);
} else {
fs.copySync(TEMPLATE_DIR, './');
replace('package.json');
replace('config.js');
replace('./src/vis.less');
replace('./src/CustomVis.js');
replace('./src/CustomVisDropZones.js');
replace('./src/CustomVisEditorModel.js');
fs.renameSync('./src/CustomVis.js', `./src/${pluginName}.js`);
fs.renameSync('./src/CustomVisDropZones.js', `./src/${pluginName}DropZones.js`);
fs.renameSync('./src/CustomVisEditorModel.js', `./src/${pluginName}EditorModel.js`);
}
},
/**
* install npm dependencies
*/
installDeps: () => {
if (global.noInstallDep) { return; }
console.log('Installing dependencies...');
const { status } = spawnSync('npm', ['install'], { stdio: 'inherit', shell: process.platform === 'win32' });
if (status !== 0) { process.exit(); }
},
};