StackGenVis: Alignment of Data, Algorithms, and Models for Stacking Ensemble Learning Using Performance Metrics
https://doi.org/10.1109/TVCG.2020.3030352
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
311 lines
8.1 KiB
311 lines
8.1 KiB
var path = require('path');
|
|
var fs = require('fs-extra');
|
|
var exec = require('child_process').exec;
|
|
var runSeries = require('run-series');
|
|
var glob = require('glob');
|
|
|
|
var common = require('./util/common');
|
|
var constants = require('./util/constants');
|
|
var pkg = require('../package.json');
|
|
|
|
var year = (new Date()).getFullYear();
|
|
|
|
var copyrightAndLicense = [
|
|
'## Copyright and license',
|
|
'',
|
|
'Code and documentation copyright ' + year + ' Plotly, Inc.',
|
|
'',
|
|
'Code released under the [MIT license](https://github.com/plotly/plotly.js/blob/master/LICENSE).',
|
|
'',
|
|
'Docs released under the [Creative Commons license](https://github.com/plotly/documentation/blob/source/LICENSE).',
|
|
''
|
|
].join('\n');
|
|
|
|
// sync "partial bundle" packages
|
|
constants.partialBundlePaths
|
|
.map(function(d) {
|
|
return {
|
|
name: 'plotly.js-' + d.name + '-dist',
|
|
index: d.index,
|
|
main: 'plotly-' + d.name + '.js',
|
|
dist: d.dist,
|
|
desc: 'Ready-to-use plotly.js ' + d.name + ' distributed bundle.',
|
|
};
|
|
})
|
|
.concat([{
|
|
name: 'plotly.js-dist',
|
|
index: path.join(constants.pathToLib, 'index.js'),
|
|
main: 'plotly.js',
|
|
dist: constants.pathToPlotlyDist,
|
|
desc: 'Ready-to-use plotly.js distributed bundle.',
|
|
}])
|
|
.forEach(syncPartialBundlePkg);
|
|
|
|
// sync "minified partial bundle" packages
|
|
constants.partialBundlePaths
|
|
.map(function(d) {
|
|
return {
|
|
name: 'plotly.js-' + d.name + '-dist-min',
|
|
index: d.index,
|
|
main: 'plotly-' + d.name + '.min.js',
|
|
dist: d.distMin,
|
|
desc: 'Ready-to-use minified plotly.js ' + d.name + ' distributed bundle.',
|
|
};
|
|
})
|
|
.concat([{
|
|
name: 'plotly.js-dist-min',
|
|
index: path.join(constants.pathToLib, 'index.js'),
|
|
main: 'plotly.min.js',
|
|
dist: constants.pathToPlotlyDistMin,
|
|
desc: 'Ready-to-use minified plotly.js distributed bundle.',
|
|
}])
|
|
.forEach(syncPartialBundlePkg);
|
|
|
|
// sync "locales" package
|
|
syncLocalesPkg({
|
|
name: 'plotly.js-locales',
|
|
dir: path.join(constants.pathToLib, 'locales'),
|
|
main: 'index.js',
|
|
desc: 'Ready-to-use plotly.js locales',
|
|
});
|
|
|
|
function syncPartialBundlePkg(d) {
|
|
var pkgPath = path.join(constants.pathToBuild, d.name);
|
|
|
|
var initDirectory = _initDirectory(d, pkgPath);
|
|
|
|
function writePackageJSON(cb) {
|
|
var cnt = {
|
|
name: d.name,
|
|
version: pkg.version,
|
|
description: d.desc,
|
|
license: pkg.license,
|
|
main: d.main,
|
|
repository: pkg.repository,
|
|
bugs: pkg.bugs,
|
|
author: pkg.author,
|
|
keywords: pkg.keywords,
|
|
files: [
|
|
'LICENSE',
|
|
'README.md',
|
|
d.main
|
|
]
|
|
};
|
|
|
|
fs.writeFile(
|
|
path.join(pkgPath, 'package.json'),
|
|
JSON.stringify(cnt, null, 2) + '\n',
|
|
cb
|
|
);
|
|
}
|
|
|
|
|
|
function writeREADME(cb) {
|
|
var moduleList = common.findModuleList(d.index);
|
|
|
|
var cnt = [
|
|
'# ' + d.name,
|
|
'',
|
|
d.desc,
|
|
'',
|
|
'Contains trace modules ' + common.formatEnumeration(moduleList) + '.',
|
|
'',
|
|
'For more info on plotly.js, go to https://github.com/plotly/plotly.js',
|
|
'',
|
|
'## Installation',
|
|
'',
|
|
'```',
|
|
'npm install ' + d.name,
|
|
'```',
|
|
'## Usage',
|
|
'',
|
|
'```js',
|
|
'// ES6 module',
|
|
'import Plotly from \'' + d.name + '\';',
|
|
'',
|
|
'// CommonJS',
|
|
'var Plotly = require(\'' + d.name + '\');',
|
|
'```',
|
|
'',
|
|
copyrightAndLicense
|
|
];
|
|
|
|
fs.writeFile(
|
|
path.join(pkgPath, 'README.md'),
|
|
cnt.join('\n'),
|
|
cb
|
|
);
|
|
}
|
|
|
|
function copyMain(cb) {
|
|
fs.copy(d.dist, path.join(pkgPath, d.main), cb);
|
|
}
|
|
|
|
var copyLicense = _copyLicense(d, pkgPath);
|
|
|
|
var publishToNPM = _publishToNPM(d, pkgPath);
|
|
|
|
runSeries([
|
|
initDirectory,
|
|
writePackageJSON,
|
|
writeREADME,
|
|
copyMain,
|
|
copyLicense,
|
|
publishToNPM
|
|
], function(err) {
|
|
if(err) throw err;
|
|
});
|
|
}
|
|
|
|
function syncLocalesPkg(d) {
|
|
var pkgPath = path.join(constants.pathToBuild, d.name);
|
|
|
|
var initDirectory = _initDirectory(d, pkgPath);
|
|
|
|
var localeFiles;
|
|
function listLocalFiles(cb) {
|
|
var localeGlob = path.join(constants.pathToLib, 'locales', '*.js');
|
|
glob(localeGlob, function(err, _localeFiles) {
|
|
if(err) cb(null);
|
|
localeFiles = _localeFiles;
|
|
cb();
|
|
});
|
|
}
|
|
|
|
function writePackageJSON(cb) {
|
|
var cnt = {
|
|
name: d.name,
|
|
version: pkg.version,
|
|
description: d.desc,
|
|
license: pkg.license,
|
|
main: d.main,
|
|
repository: pkg.repository,
|
|
bugs: pkg.bugs,
|
|
author: pkg.author,
|
|
keywords: pkg.keywords,
|
|
files: [
|
|
'LICENSE',
|
|
'README.md',
|
|
d.main
|
|
].concat(localeFiles.map(function(f) { return path.basename(f); }))
|
|
};
|
|
|
|
fs.writeFile(
|
|
path.join(pkgPath, 'package.json'),
|
|
JSON.stringify(cnt, null, 2) + '\n',
|
|
cb
|
|
);
|
|
}
|
|
|
|
function writeREADME(cb) {
|
|
var cnt = [
|
|
'# ' + d.name,
|
|
'',
|
|
d.desc,
|
|
'',
|
|
'For more info on plotly.js, go to https://github.com/plotly/plotly.js',
|
|
'',
|
|
'## Installation',
|
|
'',
|
|
'```',
|
|
'npm install ' + d.name,
|
|
'```',
|
|
'## Usage',
|
|
'',
|
|
'For example to setup the `fr` locale:',
|
|
'',
|
|
'```js',
|
|
'// ES6 module',
|
|
'import Plotly from \'plotly.js\';',
|
|
'import locale from \'' + d.name + '/fr' + '\';',
|
|
'',
|
|
'// CommonJS',
|
|
'var Plotly = require(\'plotly.js\');',
|
|
'var locale = require(\'' + d.name + '/fr\');',
|
|
'',
|
|
'// then',
|
|
'Plotly.register(locale);',
|
|
'Plotly.setPlotConfig({locale: \'fr\'})',
|
|
'```',
|
|
'',
|
|
copyrightAndLicense
|
|
];
|
|
|
|
fs.writeFile(
|
|
path.join(pkgPath, 'README.md'),
|
|
cnt.join('\n'),
|
|
cb
|
|
);
|
|
}
|
|
|
|
function writeMain(cb) {
|
|
var cnt = [constants.licenseSrc, ''];
|
|
localeFiles.forEach(function(f) {
|
|
var n = path.basename(f, '.js');
|
|
cnt.push('exports[\'' + n + '\'] = require(\'./' + n + '.js\');');
|
|
});
|
|
cnt.push('');
|
|
|
|
fs.writeFile(
|
|
path.join(pkgPath, d.main),
|
|
cnt.join('\n'),
|
|
cb
|
|
);
|
|
}
|
|
|
|
function copyLocaleFiles(cb) {
|
|
runSeries(localeFiles.map(function(f) {
|
|
return function(cb) {
|
|
fs.copy(f, path.join(pkgPath, path.basename(f)), cb);
|
|
};
|
|
}), cb);
|
|
}
|
|
|
|
var copyLicense = _copyLicense(d, pkgPath);
|
|
|
|
var publishToNPM = _publishToNPM(d, pkgPath);
|
|
|
|
runSeries([
|
|
initDirectory,
|
|
listLocalFiles,
|
|
writePackageJSON,
|
|
writeREADME,
|
|
writeMain,
|
|
copyLocaleFiles,
|
|
copyLicense,
|
|
publishToNPM
|
|
], function(err) {
|
|
if(err) throw err;
|
|
});
|
|
}
|
|
|
|
function _initDirectory(d, pkgPath) {
|
|
return function(cb) {
|
|
if(common.doesDirExist(pkgPath)) {
|
|
cb();
|
|
} else {
|
|
fs.mkdir(pkgPath, cb);
|
|
}
|
|
};
|
|
}
|
|
|
|
function _copyLicense(d, pkgPath) {
|
|
return function(cb) {
|
|
fs.copy(
|
|
path.join(constants.pathToRoot, 'LICENSE'),
|
|
path.join(pkgPath, 'LICENSE'),
|
|
cb
|
|
);
|
|
};
|
|
}
|
|
|
|
function _publishToNPM(d, pkgPath) {
|
|
return function(cb) {
|
|
if(process.env.DRYRUN) {
|
|
console.log('dry run, did not publish ' + d.name);
|
|
cb();
|
|
return;
|
|
}
|
|
exec('npm publish', {cwd: pkgPath}, cb).stdout.pipe(process.stdout);
|
|
};
|
|
}
|
|
|